docker-compose之keepalived搭建
keepalived的版本如下:
/ # keepalived -v
Keepalived v2.0.20 (01/22,2020)
Copyright(C) 2001-2020 Alexandre Cassen, <acassen@gmail.com>
Built with kernel headers for Linux 4.19.36
Running on Linux 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021
configure options: --disable-dynamic-linking
Config options: LIBIPTC LIBIPSET LVS VRRP VRRP_AUTH OLD_CHKSUM_COMPAT FIB_ROUTING
System options: PIPE2 SIGNALFD INOTIFY_INIT1 VSYSLOG EPOLL_CREATE1 IPV4_DEVCONF IPV6_ADVANCED_API LIBNL3 RTA_ENCAP RTA_EXPIRES RTA_NEWDST RTA_PREF FRA_SUPPRESS_PREFIXLEN FRA_SUPPRESS_IFGROUP FRA_TUN_ID RTAX_CC_ALGO RTAX_QUICKACK RTEXT_FILTER_SKIP_STATS FRA_L3MDEV FRA_UID_RANGE RTAX_FASTOPEN_NO_COOKIE RTA_VIA FRA_OIFNAME FRA_PROTOCOL FRA_IP_PROTO FRA_SPORT_RANGE FRA_DPORT_RANGE RTA_TTL_PROPAGATE IFA_FLAGS IP_MULTICAST_ALL LWTUNNEL_ENCAP_MPLS LWTUNNEL_ENCAP_ILA LIBIPTC NET_LINUX_IF_H_COLLISION NETINET_LINUX_IF_ETHER_H_COLLISION LIBIPVS_NETLINK IPVS_DEST_ATTR_ADDR_FAMILY IPVS_SYNCD_ATTRIBUTES IPVS_64BIT_STATS VRRP_VMAC VRRP_IPVLAN IFLA_LINK_NETNSID CN_PROC SOCK_NONBLOCK SOCK_CLOEXEC O_PATH INET6_ADDR_GEN_MODE VRF SO_MARK SCHED_RESET_ON_FORK
docker-compose.yml文件内容如下:
version: "2.6.1"
services:
keepalived_master:
image: osixia/keepalived
container_name: keepalived_master
hostname: keepalived_master
environment:
TZ: "Asia/Shanghai"
volumes:
- ./default1.yaml:/container/environment/99-default/default.yaml
privileged: true
networks:
cmcc_001:
ipv4_address: "172.21.0.41"
keepalived_slave_1:
image: osixia/keepalived
container_name: keepalived_slave_1
hostname: keepalived_slave_1
environment:
TZ: "Asia/Shanghai"
volumes:
- ./default2.yaml:/container/environment/99-default/default.yaml
privileged: true
depends_on:
- keepalived_master
networks:
cmcc_001:
ipv4_address: "172.21.0.42"
keepalived_slave_2:
image: osixia/keepalived
container_name: keepalived_slave_2
hostname: keepalived_slave_2
environment:
TZ: "Asia/Shanghai"
volumes:
- ./default3.yaml:/container/environment/99-default/default.yaml
privileged: true
depends_on:
- keepalived_master
networks:
cmcc_001:
ipv4_address: "172.21.0.43"
networks:
cmcc_001:
external: true
default1.yaml文件内容如下:
KEEPALIVED_COMMAND_LINE_ARGUMENTS: --log-detail --dump-conf
KEEPALIVED_INTERFACE: eth0
KEEPALIVED_PASSWORD: d0cker
# For electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines
KEEPALIVED_PRIORITY: 150
KEEPALIVED_UNICAST_PEERS:
- 172.21.0.42
- 172.21.0.43
KEEPALIVED_VIRTUAL_IPS:
- 192.168.1.231
- 192.168.1.232
KEEPALIVED_NOTIFY: /container/service/keepalived/assets/notify.sh
KEEPALIVED_ROUTER_ID: 51
KEEPALIVED_STATE: MASTER
default2.yaml文件内容如下:
KEEPALIVED_COMMAND_LINE_ARGUMENTS: --log-detail --dump-conf
KEEPALIVED_INTERFACE: eth0
KEEPALIVED_PASSWORD: d0cker
# For electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines
KEEPALIVED_PRIORITY: 130
KEEPALIVED_UNICAST_PEERS:
- 172.21.0.41
- 172.21.0.43
KEEPALIVED_VIRTUAL_IPS:
- 192.168.1.231
- 192.168.1.232
KEEPALIVED_NOTIFY: /container/service/keepalived/assets/notify.sh
KEEPALIVED_ROUTER_ID: 51
KEEPALIVED_STATE: BACKUP
default3.yaml文件内容如下:
KEEPALIVED_COMMAND_LINE_ARGUMENTS: --log-detail --dump-conf
KEEPALIVED_INTERFACE: eth0
KEEPALIVED_PASSWORD: d0cker
# For electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines
KEEPALIVED_PRIORITY: 110
KEEPALIVED_UNICAST_PEERS:
- 172.21.0.41
- 172.21.0.42
KEEPALIVED_VIRTUAL_IPS:
- 192.168.1.231
- 192.168.1.232
KEEPALIVED_NOTIFY: /container/service/keepalived/assets/notify.sh
KEEPALIVED_ROUTER_ID: 51
KEEPALIVED_STATE: BACKUP
问题1:为什么没有keepalived.conf文件?
答:在使用volumes挂载keepalived.conf文件后,启动容器时会报错。
sed: can't move '/container/service/keepalived/assets/keepalived.confHBCjcp' to '/container/service/keepalived/assets/keepalived.conf': Resource busy
错误的具体描述见链接: https://github.com/osixia/docker-keepalived/issues/5
对错误的具体解释见链接:https://www.cnblogs.com/xuxinkun/p/7116737.html
问题2:如何为不同keepalived容器配置不同的conf文件
答:挂载default.yaml文件到/container/environment/99-default/default.yaml
。这个地方还没搞明白,猜测yaml文件是定义变量的,keepalived容器会根据yaml定义的变量,自动生成keepalived.conf文件内容。