第一次搭建Keepalived集群,实现IP漂移。
笔者所搭建Keepalived集群额外满足下面两个需求点:
- 监听HAProxy进程,一旦HAProxy进程不存在,可能触发IP漂移
- 互为主备,充分利用服务器资源
一、安装
Debian下安装命令如下:
1
| sudo apt-get install keepalived
|
二、配置
默认配置文件路径为:“/etc/keepalived/keepalived.conf”。
2.1、主节点配置
由于互为主备,故同时包含备份节点配置。
具体配置如下:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| global_defs { notification_email { # 通知信息邮件接收者邮箱 xxx@domain.email } # 通知信息邮件发送者邮箱 notification_email_from keepalived@domain.email # 表示本地开启了一个SMTP Server进程,端口为默认端口25,通过该SMTP Server发送通知信息邮件 smtp_server 127.0.0.1 smtp_connect_timeout 4 }
vrrp_script chk_haproxy { # 存在haproxy进程返回0,否则返回非0 script "killall -0 haproxy" # 每隔2秒运行监听脚本 interval 2 # 上述脚本执行连续3次返回0,则将“VRRP实例”的状态置为“正常态”,结合其他条件,可能触发IP漂移 rise 3 # 上述脚本执行连续3次返回非0,则将“VRRP实例”的状态置为“错误态”,结合其他条件,可能触发IP漂移 fall 3 }
# 配置一个VRRP实例 vrrp_instance VI_101 { # 配置作为该VRRP实例的主节点 state MASTER # 同一个VRRP实例下的节点(主节点和备份节点)具有相同值 # 而且同一网段中virtual_router_id的值不能重复 virtual_router_id 101 # 在该VRRP实例中,本节点的优先级 priority 100
interface bond0 track_interface { bond0 } advert_int 1 smtp_alert authentication { auth_type PASS auth_pass keep@lived }
virtual_ipaddress { # 该VRRP实例的绑定到IP 10.200.164.101/22 }
track_script { chk_haproxy } }
# 配置另外一个VRRP实例 vrrp_instance VI_102 { # 配置作为该VRRP实例的备份节点 state BACKUP # 同一个VRRP实例下的节点(主节点和备份节点)具有相同值 # 而且同一网段中virtual_router_id的值不能重复 virtual_router_id 102 # 在该VRRP实例中,本节点的优先级 priority 50
interface bond0 track_interface { bond0 } advert_int 1 smtp_alert authentication { auth_type PASS auth_pass keep@lived }
virtual_ipaddress { # 该VRRP实例的绑定到IP 10.200.164.102/22 }
track_script { chk_haproxy } }
|
2.2、备份节点配置
由于互为主备,故同时包含主节点配置。
具体配置如下:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| global_defs { notification_email { # 通知信息邮件接收者邮箱 xxx@domain.email } # 通知信息邮件发送者邮箱 notification_email_from keepalived@domain.email # 表示本地开启了一个SMTP Server进程,端口为默认端口25,通过该SMTP Server发送通知信息邮件 smtp_server 127.0.0.1 smtp_connect_timeout 4 }
vrrp_script chk_haproxy { # 存在haproxy进程返回0,否则返回非0 script "killall -0 haproxy" # 每隔2秒运行监听脚本 interval 2 # 上述脚本执行连续3次返回0,则将“VRRP实例”的状态置为“正常态”,结合其他条件,可能触发IP漂移 rise 3 # 上述脚本执行连续3次返回非0,则将“VRRP实例”的状态置为“错误态”,结合其他条件,可能触发IP漂移 fall 3 }
# 配置一个VRRP实例 vrrp_instance VI_101 { # 配置作为该VRRP实例的备份节点 state BACKUP # 同一个VRRP实例下的节点(主节点和备份节点)具有相同值 # 而且同一网段中virtual_router_id的值不能重复 virtual_router_id 101 # 在该VRRP实例中,本节点的优先级 priority 50
interface bond0 track_interface { bond0 } advert_int 1 smtp_alert authentication { auth_type PASS auth_pass keep@lived }
virtual_ipaddress { # 该VRRP实例的绑定到IP 10.200.164.101/22 }
track_script { chk_haproxy } }
# 配置另外一个VRRP实例 vrrp_instance VI_102 { # 配置作为该VRRP实例的主节点 state MASTER # 同一个VRRP实例下的节点(主节点和备份节点)具有相同值 # 而且同一网段中virtual_router_id的值不能重复 virtual_router_id 102 # 在该VRRP实例中,本节点的优先级 priority 100
interface bond0 track_interface { bond0 } advert_int 1 smtp_alert authentication { auth_type PASS auth_pass keep@lived }
virtual_ipaddress { # 该VRRP实例的绑定到IP 10.200.164.102/22 }
track_script { chk_haproxy } }
|
三、启动,停止与重启
启动:sudo /etc/init.d/keepalived start
停止:sudo /etc/init.d/keepalived stop
重启:sudo /etc/init.d/keepalived restart
四、其他
4.1、同一网段中的virtual_router_id
的值不能重复
特别需要注意的是,同一网段中的virtual_router_id(vrid)
的值不能重复,否则会干扰其他Keepalived集群的正常运行。
可通过如下命令查看欲使用vrid
值是否已经被使用:
1
| sudo tcpdump -ani any vrrp | grep vrid
|
4.2、“VRRP实例的绑定到IP”对于所使用的网卡需要合法
比如使用网卡“bond0”,该网卡的掩码为“255.255.255.0”,那么所使用的“VRRP实例的绑定到IP”的掩码也必须为“255.255.255.0”,即具有“xxx.xxx.xxx.xxx/24”的形式。
参考文献:
[1]http://www.keepalived.org/manpage.html
[2]http://outofmemory.cn/wiki/keepalived-configuration