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文件内容。

posted @ 2023-05-23 23:55  绿豆淀粉好勾芡儿  阅读(852)  评论(0)    收藏  举报