mycat 容器中安装 keepalived
- 假设为双 mycat
keeaplived 配置
看下 docker 的网络
> docker network lsNETWORK ID NAME DRIVER SCOPE25fed3e4d30a bridge bridge local7b6fce5125a3 docker_gwbridge bridge local36508b1e58ae host host localdd6163d8125d none null local
看下 docker_gwbridge 的 ip
ip addr
-- other4: docker_gwbridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group defaultlink/ether 02:42:3a:55:fc:08 brd ff:ff:ff:ff:ff:ffinet 172.18.0.1/16 brd 172.18.255.255 scope global docker_gwbridgevalid_lft forever preferred_lft forever
配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state MASTER# docker 的桥接网络 docker_gwbridgeinterface docker_gwbridge# 主备组可以保持一致virtual_router_id 51priority 100# nopreemptadvert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {# docker_gwbridge 同网段 172.18.0.1 的虚拟ip172.18.0.200}}
- 启动 keepalive
宿主机
- swarm 网络内的虚拟 ip 无法被外网访问
- 所以要把容器中的虚拟ip映射到宿主机,由宿主机负责接收外网请求,转发给虚拟ip
可以用负载均衡组件进行请求转发
keepalived 方式
- 配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state MASTERinterface docker_gwbridge# 主备保持一致virtual_router_id 51priority 100# nopreemptadvert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {# 面向外网的虚拟 ip192.168.1.212}}# 转发请求给 mycat 数据端口virtual_server 192.168.1.212 8066 {# 心跳检测 sdelay_loop 3# 轮询lb_algo rr# NAT 模式lb_kind NAT# 超时时间persistence timeout 50protocol TCP# 转发给容器的虚拟 ipreal_server 172.18.0.200 8066 {weight 1}}# 转发请求给 mycat 控制端口virtual_server 192.168.1.212 9066 {delay_loop 3lb_algo rrlb_kind NATpersistence timeout 50protocol TCPreal_server 172.18.0.200 9066 {weight 1}}
