阿里云、华为云keepalived和vip虚IP配置安装部署
架构为: 双服务器,双VIP,关系如下:
外网IP VIP-虚IP 内网服务器IP 219.153.117.65 192.168.43.240 192.168.43.49-slave节点/192.168.43.132-master节点 219.153.117.103 192.168.43.241 192.168.43.49-master节点/192.168.43.132-slave节点
图我就不画了,就是一个“外网IP映射到一个虚IP,然后虚IP映射到两个服务器IP”。
可以参考链接:搭建Keepalived Nginx高可用Web集群
注意:
1、VIP是自己随便设定的(只要在相同网段,本文是192.168.43.1/32网段,不和其他已有IP冲突就行)。
2、如果是用的阿里云、华为云,则要想让VIP能与网段下的其他IP通信,则需要在控制台申请(免费的),相关操作参见阿里云、华为云的文档,例如:
3、其中虚IP对应的服务器slave和master关系不是固定不变的,默认情况下priority权重大的是master,但是随着服务(这里为nginx)挂掉一次减少weight,会影响到实际的priority值。参见:https://blog.csdn.net/weixin_42558057/article/details/82722516
整个安装和配置过程如下:
yum install keepalived -y date(确保两个服务器时间一致) cat /etc/keepalived/keepalived.conf echo net.ipv4.ip_nonlocal_bind=1 >> /etc/sysctl.conf cat /usr/bin/check_nginx_alive.sh #!/bin/bash counter=$(ps -C nginx --no-heading|wc -l) if [ "${counter}" = "0" ]; then systemctl start nginx.service sleep 2 counter=$(ps -C nginx --no-heading|wc -l) if [ "${counter}" = "0" ]; then systemctl stop keepalived.service fi fi systemctl start keepalived systemctl enable keepalived
最关键的配置文件,在下面有详细注释:
其中配置文件server1(192.168.43.49,VIP-192.168.43.240-slave、241-master)为:
vrrp_script check_nginx_alive { ##脚本路径 script "/usr/bin/check_nginx_alive.sh" #script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" interval 3 #宕机一次将自身权重减3,权重改变则master-slave关系也将改变 weight -3 } global_defs { ## 设置lvs的id,在一个网络内唯一,可以自定义,保持唯一性 # 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。 router_id LB_DEVEL49 } vrrp_instance VI_1 { state BACKUP interface eth0 mcast_src_ip 192.168.43.49 virtual_router_id 51 priority 92 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.43.49 virtual_ipaddress { 192.168.43.240 } track_script { check_nginx_alive } } ##实例名,可修改 vrrp_instance VI_2 { ## 主机配置,从机为BACKUP state MASTER ## 网卡名称,虚拟机一般都是使用eth0 interface eth0 mcast_src_ip 192.168.43.49 ##虚拟路由ID,两机器保持一致即可 virtual_router_id 52 ## 权重值。值越大,优先级越高,backup-92设置比master-100小 priority 100 ## 组播信息发送间隔,两个节点设置必须一样 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.43.49 virtual_ipaddress { ## 同一网段虚拟IP 192.168.43.241 } ##与检测脚本一起使用 track_script { check_nginx_alive } }
server2(192.168.43.132,VIP-192.168.43.241-slave、240-master)为:
vrrp_script check_nginx_alive { ##脚本路径 script "/usr/bin/check_nginx_alive.sh" #script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" interval 3 #宕机一次将自身权重减3,权重改变则master-slave关系也将改变 weight -3 } global_defs { ## 设置lvs的id,在一个网络内唯一,可以自定义,保持唯一性 # 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。 router_id LB_DEVEL132 } ##实例名,可修改 vrrp_instance VI_1 { ## 主机配置,从机为BACKUP state MASTER ## 网卡名称,虚拟机一般都是使用eth0 interface eth0 mcast_src_ip 192.168.43.132 ##虚拟路由ID,两机器保持一致即可 virtual_router_id 51 ## 权重值。值越大,优先级越高,backup-92设置比master-100小 priority 100 ## 组播信息发送间隔,两个节点设置必须一样 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.43.132 virtual_ipaddress { ## 同一网段虚拟IP 192.168.43.240 } ##与检测脚本一起使用 track_script { check_nginx_alive } } vrrp_instance VI_2 { state BACKUP interface eth0 mcast_src_ip 192.168.43.132 virtual_router_id 52 priority 92 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.43.132 virtual_ipaddress { 192.168.43.241 } track_script { check_nginx_alive } }
亲测在华为云CentOS 7的服务器上是完全可以用的。
配置补充说明:
virtual_router_id 52,是一组VIP共同的标识,两边要一致。