keepalived安装
-
下载keepalived
官网下载地址:https://www.keepalived.org/download.html -
keepalived安装
#创建目录 tar -zxvf keepalived-2.2.8.tar.gz #进入解压包 cd keepalived-2.2.8 #执行配置安装目录 #--sysconf是指定核心配置文件,如果不指定位置为/etc,那么以后启动keepalived就会报错, #会提示在/etc下找不到keepalived ./configure --prefix=/usr/local/keepalived --sysconf=/etc #编译并安装 make && make install #创建目录 mkdir /etc/keepalived #切换到keepalived-2.2.8目录 #拷贝配置文件到/etc/keepalived目录下 cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/ #复制keepalived脚本到/etc/init.d/ cp keepalived/etc/init.d/keepalived /etc/init.d/ #切换到/etc/keepalived/目录,修改配置文件名称 mv keepalived.conf.sample keepalived.conf
-
keepalived配置注意
因为使用的是阿里云服务器,需要HaVip配合来实现。
参考地址:https://help.aliyun.com/zh/vpc/user-guide/use-highly-available-virtual-ip?spm=5176.22414175.sslink.1.677020deS99Wgm
在传统数据中心里,服务器可以通过地址解析协议ARP(Address Resolution Protocol)声明自己的IP地址并对外提供服务,很多应用场景或常用软件需要主机具备此能力。例如,使用Keepalived、Heartbeat等软件实现容灾恢复过程中服务IP不变的高可用方案。
然而,大部分云厂商采用SDN架构后,在VPC环境下不支持免费ARP广播功能。因为云上网络环境需使用虚拟化技术构建,虚拟服务器IP地址由云平台底层的虚拟化平台分配和管理。您的应用无法像传统方式一样修改主机IP地址,且整个虚拟网络是基于3层的隧道技术,ARP被终结在发送端,主机无法声明IP地址。为此,阿里云推出HaVip功能,解决此问题unicast_src_ip与unicast_peer一定要手动配置
配置的时候unicast_src_ip和unicast_peer一定要手动配置,否则会出现漂移ip挂载两台服务器上的情况。这是因为在服务器网络环境中,路由交换层禁用了ARP的广播限制,造成KEEPALIVE主备协议无法通过广播的方式进行通信,造成主备两台服务器都强占HAVIP地址,出现同时两台服务器都有VIP地址的情况出现,必须通过配置来指定IP的两台服务器间进行通讯。
-
修改keepalived.conf配置文件
首先修改MASTER节点配置文件
vim /etc/keepalived/keepalived.conf
global_defs { # 路由id,主备节点不能相同 router_id keepalived_node1 } # 自定义监控脚本 vrrp_script chk_haproxy { # 脚本位置 script "/etc/keepalived/haproxy_check.sh" # 脚本执行的时间间隔 interval 5 weight 10 } vrrp_instance VI_1 { # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点 state MASTER # 指定监测的网卡,可以使用 ifconfig 进行查看 interface eth0 # 虚拟路由的id,主备节点需要设置为相同 virtual_router_id 172 # 优先级,主节点的优先级需要设置比备份节点高 priority 100 # 设置主备之间的检查时间,单位为秒 advert_int 2 unicast_src_ip 10.188.1.172 unicast_peer{ 10.188.1.174 } # 定义验证类型和密码 authentication { auth_type PASS auth_pass rrduser9K! } # 调用上面自定义的监控脚本 track_script { chk_haproxy } virtual_ipaddress { # 虚拟IP地址,可以设置多个 10.188.1.204 } }
修改BACKUP节点配置文件
global_defs { # 路由id,主备节点不能相同 router_id keepalived_node2 } # 自定义监控脚本 vrrp_script chk_haproxy { # 脚本位置 script "/etc/keepalived/haproxy_check.sh" # 脚本执行的时间间隔 interval 5 weight 10 } vrrp_instance VI_1 { # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点 state BACKUP # 指定监测的网卡,可以使用 ifconfig 进行查看 interface eth0 # 虚拟路由的id,主备节点需要设置为相同 virtual_router_id 172 # 优先级,主节点的优先级需要设置比备份节点高 priority 50 # 设置主备之间的检查时间,单位为秒 advert_int 2 unicast_src_ip 10.188.1.174 unicast_peer{ 10.188.1.172 } # 定义验证类型和密码 authentication { auth_type PASS auth_pass rrduser9K! } # 调用上面自定义的监控脚本 track_script { chk_haproxy } virtual_ipaddress { # 虚拟IP地址,可以设置多个 10.188.1.204 } }
-
编写haproxy_check.sh
#!/bin/bash # 判断haproxy是否已经启动 if [ ${ps -C haproxy --no-header |wc -l} -eq 0 ] ; then #如果没有启动,则启动 haproxy -f /etc/haproxy/haproxy.cfg fi #睡眠3秒以便haproxy完全启动 sleep 3 #如果haproxy还是没有启动,此时需要将本机的keepalived服务停掉, #以便让VIP自动漂移到另外一台haproxy if [ ${ps -C haproxy --no-header |wc -l} -eq 0 ] ; then systemctl stop keepalived fi
-
脚本授权
chmod +x /etc/keepalived/haproxy_check.sh
-
启动服务
#开启服务 service keepalived start #关闭服务 systemctl stop keepalived #查看到虚拟 IP 的情况 ip a
-
结果验证
-
使用
ip a
命令查询rabbitmq1(10.188.1.172)主节点。存在虚拟ip 10.188.1.204
1. 使用ip a
命令查询 -
使用
ip a
命令查询rabbitmq2(10.188.1.174)备份节点。不存在虚拟ip
-
验证故障转移
停止rabbitmq1(10.188.1.172)主节点systemctl stop keepalived
,主节点虚拟ip消失
rabbitmq2(10.188.1.174)备份节点,存在虚拟ip 10.188.1.204
-