Docker部署Keepalived

概述

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

文档

功能示例

实现虚拟IP(IP漂移)

参考资料

场景描述

使用docker运行keepalived,实现主备切换虚拟IP,实现宕机一台另一台IP自动变更,不影响原有使用,环境配置信息如下

IP地址
  • 虚拟IP: 192.168.2.153
  • 主节点IP: 192.168.2.151
  • 备节点IP: 192.168.2.152
网卡信息
  • 主节点: ens160
  • 备节点: ens160
硬件配置与操作系统版本
  • 2C+4G+40G
  • Ubuntu 18.04

本地配置路径

此路径根据实际进行调整

1
vi /home/yh/keepalived/keepalived.conf

配置内容

主配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
global_defs {
#notification_email {
# root@localhost
#}
#notification_email_from root@localhost
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id ka1 # 主从id区分
vrrp_skip_check_adv_addr
#vrrp_strict # 单播模式需要注释
#vrrp_mcast_group4 224.100.100.100 # 单播模式需要注释
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state MASTER #设为主
interface ens160 #绑定的网卡名称,按需修改
virtual_router_id 11 #两台服务器保持一致
priority 100 # 主服务器优先级高一些
advert_int 1
#nopreempt #注释,表示打开VIP漂移,在优先级高的服务器上线后自动漂移VIP
authentication {
auth_type PASS
auth_pass 123
}
unicast_src_ip 192.168.2.151 # 本机IP
unicast_peer {
192.168.2.152 #单播,通知的目标IP,可以写多个
}
virtual_ipaddress {
192.168.2.153 #要保持和实际IP在同一网段,使用192.168.1.*,否则会因为缺少路由规则,两台服务器直接无法相互ping通
}
}
从配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
global_defs {
#notification_email {
# root@localhost
#}
#notification_email_from root@localhost
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id ka2 # 主从id区分
vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_mcast_group4 224.100.100.100
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state BACKUP # 设为备
interface ens160
virtual_router_id 11
priority 80 #优先级低于主
advert_int 1
#nopreempt
authentication {
auth_type PASS
auth_pass 123
}
unicast_src_ip 192.168.2.152 # 本机IP
unicast_peer {
192.168.2.151 #单播,通知的目标IP,可以写多个
}
virtual_ipaddress {
192.168.2.153 #要保持和实际IP在同一网段,使用192.168.1.*,否则会因为缺少路由规则,两台服务器直接无法相互ping通
}
}

运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 主备服务器均使用此命令启动
## 注意此处的keepalived.conf文件路径调整
docker run -d --restart=always \
--net=host \
-v /root/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--cap-add=NET_ADMIN \
--cap-add=NET_BROADCAST \
--cap-add=NET_RAW \
--name keepalived \
osixia/keepalived:2.0.20 --copy-service

# 查看日志
sudo docker logs -f keepalived

# 删除keepalived服务
sudo docker rm -f keepalived

# 删除网卡其他ip
ip addr del 192.168.2.xx dev ens192