什么是Keepalived
Keepalived是用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。 负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。Keepalived实现了一组检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。另一方面,VRRP实现了高可用性 协议。VRRP是路由器故障转移的基础砖。此外,Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实施BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。
Keepalived是免费软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它
官网:https://www.keepalived.org/
Keepalived+Nginx 高可用集群(主从模式)
架构图
服务器准备
准备2台服务器172.18.0.3(主)、172.18.0.2(备),系统CentOS
一个虚拟IP:172.18.0.80(自己网络内,未被其他主机占用IP即可)
Nginx安装
1、分别在2台服务器上安装nginx,参考【Web】Nginx下载与安装
2、修改172.18.0.3(主)上nginx的主页内容,内容如下:
1 Master nginx 2 172.18.0.3
172.18.0.2(备)上nginx内容如下:
1 Master nginx 2 172.18.0.2
3、测试
1)启动nginx
2)分别访问地址:http://172.18.0.3,http://172.18.0.2
Keepalived安装
1、安装命令: yum install keepalived -y
2、修改keepalived的配置文件(/etc/keepalived/keepalived.conf)
命令:vim /etc/keepalived/keepalived.conf
172.18.0.3(主)上keepalived的配置如下:
1 # 全局定义块 2 global_defs { 3 router_id LVS_DEVEL 4 } 5 6 vrrp_script chk_nginx { 7 # 检查脚本路径 8 script "/etc/keepalived/nginx_check.sh" 9 # 检查脚步执行的间隔,单位秒 10 interval 2 11 # 权限,成功+2 12 weight 2 13 } 14 15 vrrp_instance VI_1 { 16 ## 主节点为 MASTER, 对应的备份节点为 BACKUP 17 state MASTER 18 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,一般是eth0 我的是 eth1 19 interface eth1 20 # 主、备机的virtual_router_id 必须相同 21 virtual_router_id 51 22 # 主、备机不同的优先级,主机值大,备份机较小 23 priority 100 24 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s 25 advert_int 1 26 ## 设置验证信息,两个节点必须一致 27 authentication { 28 auth_type PASS 29 auth_pass 1111 30 } 31 ## 将 track_script 块加入 instance 配置块 32 track_script { 33 ## 执行 Nginx 监控的服务 34 chk_nginx 35 } 36 # 虚拟 IP 池, 两个节点设置必须一样 37 virtual_ipaddress { 38 # VRRP H虚拟地址 39 172.17.0.80 40 } 41 }
172.18.0.2(备)上keepalived的配置,只有如下2个地方不一样,其他都一样
1 vrrp_instance VI_1 { 2 ## 主节点为 MASTER, 对应的备份节点为 BACKUP 3 state BACKUP 4 ... 5 priority 50 6 ... 7 }
3、编写nginx检查脚本
命令:vim /etc/keepalived/nginx_check.sh
检测nginx进程是否存在,不存在就关闭keepalived应用
1 #!/bin/bash 2 if [ `ps -C nginx --no-header |wc -l` -lt 2 ];then 3 killall keepalived 4 fi
4、给nginx检查脚本授权
命令:chmod +x /etc/keepalived/nginx_check.sh
5、分别启动2台服务器上的keepalived
启动命令:systemctl start keepalived
加入开机启动命令:systemctl enable keepalived
停止命令:systemctl stop keepalived
6、使用命令查看keepalived是否启动
命令:ps -ef|grep keepalived
7、分别查看主备2台服务器的ip信息
命令:ip a
172.18.0.3(主),如下可以看到已经绑定了虚拟IP(172.18.0.80)
172.18.0.2(备),未绑定虚拟IP
高可用测试
1、使用命令,访问虚拟IP(172.18.0.80)
命令:curl 172.18.0.80,效果如下:
可以看到访问的是172.18.0.3(主)服务器上的Nginx
2、关闭172.18.0.3(主)服务器上的Nginx
再次用命令,访问虚拟IP(172.18.0.80),效果如下:
可以看到请求已转到172.18.0.2(备)服务器上的Nginx
3、分别查看主备2台服务器的ip信息,命令:ip a
可以看到172.18.0.3(主)服务器已经没有绑定虚拟IP,而172.18.0.2(备)绑定了虚拟IP
4、再次启动172.18.0.3(主)服务器上的Nginx 和 Keepalived
再次用命令,访问虚拟IP(172.18.0.80),发现请求已转到172.18.0.3(主)服务器上
总结:以上 Keepalived + Nginx 已实现vip漂移高可用