keepalived+nginx 的高可用集群搭建
一、keepalived软件介绍
1、概述
Keepalived 软件主要用于实现高可用性(High Availability)和负载均衡功能,它最初是为 Linux 系统设计的,通过管理虚拟 IP 地址(VIP)和健康检查来实现服务的故障转移。
2、keepalived的高可用原理
(1)Keepalived高可用服务通过VRRP协议实现故障切换。
(2)Keepalived采用VRRP竞选机制确定主备关系。
(3)在Keepalived服务组中,仅Master服务器持续发送VRRP组播包(或单播包)。当备机无法接收到主机的广播包时,将自动启动相关服务接管资源。
二、keepalived+nginx 高可用集群搭建
1、主机清单
| 主机名 | IP | 主备 |
| node1 | 172.21.118.8/24 | master |
| node2 | 172.21.118.9/24 | backup |
2、关闭防火墙
两台主机都操作
systemctl stop firewalld
systemctl disable firewalld
如果开启了防火墙必须放开keepalived之间的通信端口
firewall-cmd --zone=public --add-port=112/udp --permanent firewall-cmd --zone=public --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --permanent --add-rich-rule='rule protocol value="vrrp" accept' firewall-cmd --reload firewall-cmd --reload
3、关闭selinux
两台主机都操作
vi /etc/selinux/config SELINUX=disabled # 查看 selinux 状态 sestatus
4、配置主机名和hosts文件
两台主机都操作
vi /etc/hosts 172.21.118.8 node1 172.21.118.9 node2
5、nginx的安装与配置
两台主机都操作
vim /etc/yum.repos.d/nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
yum clean all
yum makecache
yum install -y nginx
systemctl start nginx 启动nginx systemctl stop nginx 停止nginx systemctl restart nginx 重启nginx nginx -s reload 重新加nginx配置 nginx -V 查看版本
6、keepalived快速安装
两台主机都操作
yum -y install keepalived
7、创建健康检查脚本
此脚本用于检查nginx进程是出现故障脚本必须返回退出状态码(Exit Code)
-
0:成功(服务正常,保持当前状态)。 -
非0:失败(服务异常,触发优先级调整或切换)
两台主机都操作
vim /etc/keepalived/check_nginx.sh
脚本1
脚本1:
#!/bin/bash
# 检查 Nginx 进程是否存在
if pgrep -x "nginx" >/dev/null; then
exit 0 # Nginx 正常运行,返回 0
else
exit 1 # Nginx 未运行,返回 1
fi
推荐脚本2
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then systemctl kill keepalived fi
chmod 755 /etc/keepalived/check_nginx.sh
8、keepalived配置
node1主机操作
vim /etc/keepalived/keepalived.conf
global_defs { router_id LVS_MASTER # 唯一标识,建议不同节点不同名称 script_user root # 明确指定执行脚本的用户(如 root) log_file /var/log/keepalived.log # 直接指定日志文件(需 Keepalived v2.0.0+) log_level INFO # 日志级别:INFO、NOTICE、WARNING、ERR } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" # 健康检查脚本路径 interval 2 # 检测间隔(秒) weight -20 # 检测失败时优先级降低值 } vrrp_instance VI_1 { state MASTER # 主节点为 MASTER,备节点为 BACKUP interface ens33 # 网卡名称(需根据实际修改) virtual_router_id 51 # 虚拟路由 ID,主备必须一致(范围 0-255) priority 100 # 优先级(主节点 > 备节点) advert_int 1 # 心跳间隔(秒) authentication { auth_type PASS # 认证方式 auth_pass 123456 # 认证密码(主备一致) } virtual_ipaddress { 17221.118.10./24 # 虚拟 IP(VIP) } track_script { chk_nginx # 引用健康检查脚本 } }
node2主机操作
vim /etc/keepalived/keepalived.conf
global_defs { router_id LVS_BACKUP script_user root # 明确指定执行脚本的用户(如 root) log_file /var/log/keepalived.log # 直接指定日志文件(需 Keepalived v2.0.0+) log_level INFO # 日志级别:INFO、NOTICE、WARNING、ERR } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" # 健康检查脚本路径 interval 2 # 检测间隔(秒) weight -20 # 检测失败时优先级降低值 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 90 # 优先级低于主节点 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.21.118.10/24 } track_script { chk_nginx # 引用健康检查脚本 } }
9、启动keepalived
两台主机都操作
systemctl start keepalived
systemctl enable keepalived
# 查看keepalived是否启动
systemctl status keepalived
# 查看是否有浮动ip
ip a
三、keepalived+nginx 故障模拟
1、环境确认
两台主机都操作
# 确认nginx进程成功启动 pgrep nginx # 确认keepalived服务成功启动 systemctl status keepalived # 找到浮动ip 172.21.118.10 所在主机 ip a |grep 172.21.118.10
2、制造nginx下线
systemctl stop nginx
3、查看日志变化
node1 主机的脚本检测到nginx下线,journalctl -u keepalived -f 观察日志,脚本返回值为 1,表示检测的进程异常。降低优先级,进入backup状态。

node1主机当(优先级高于80)收到来自 172.21.118.8 的低优先级通告。
连续 3 次未收到合法通告,当前节点晋升为 master,开始接管 VIP。向网络发送免费 ARP,宣告 VIP归属。

此时 vip 已经在node2上了。
==================================================================================
重新启动node1主机的nginx进程。
node1的日志

此时VIP恢复到node1主机上了
https://blog.csdn.net/dgfdhgghd/article/details/127328189 参考
本文来自博客园,作者:聆听城市喧哗,转载请注明原文链接:https://www.cnblogs.com/fzhelpdesk/p/18961084

浙公网安备 33010602011771号