背景:
负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。
由于业务扩展,网站的访问量不断加大,负载越来越高。现需要在web前端放置nginx负载均衡,同时结合keepalived对前端nginx实现HA高可用。
当一台nginx故障时,keepalived迅速检测出nginx服务状态并把vip主动漂移到另外一个节点上提供服务,实则用户是通过vip去访问后端的业务。
实验环境:
本次使用2台Centos 7.9的机器来模拟Nginx高可用架构的实现过程
Hostname | IP | VIP |
Nginx_keep1 | ||
Nginx_keep2 |
安装nginx服务
参考链接中的方法
安装keepalived服务
keepalived 原理
Keepalived 是Linux下面实现VRRP备份路由的高可靠性运行件
。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时VIP瞬间无缝交接。
安装 keepalived
vrrp_script check_nginx_status { #检查nginx服务是否运行
script "/home/nginx_keep/check_nginx_status.sh"
interval 2 #脚本执行间隔,每2秒检测一次
weight 2
}
! Configuration File for keepalived
global_defs {
router_id rancher #主机名
}
vrrp_instance VI_1 {
state MASTER #主节点写MASTER 备节点写BACKUP
interface ens33 # 写主机真是网卡的名字 ip addr查看
virtual_router_id 51 # 主备信息一致
priority 100 #优先等级 ,数字随便只要主节点的数字大于备节点上的就可以
advert_int 1
authentication {
auth_type PASS #主备信息一致
auth_pass 1111 #主备信息一致
}
virtual_ipaddress {
192.168.200.16 #虚拟机ip 简称vip 主备节点上填写一致
}
}
~
监控脚本:
监控脚本原理:当系统连续监控nginx服务出现故障时,这个时候就把本机的keepalived 服务器的进程pid号给杀掉,然后等vip迅速漂移到另外一个节点上对外提供正常服务,从而减少服务影响时间。
根据自己的环境情况来修改shell脚本情况
#!/bin/bash
# Nginx进程名称
NGINX_PROCESS_NAME="nginx"
# Keepalived进程名称
KEEPALIVED_PROCESS_NAME="keepalived"
# 检查Nginx进程是否存在
function check_nginx_status() {
local nginx_pid=$(pgrep -f "$NGINX_PROCESS_NAME")
if [ -z "$nginx_pid" ]; then
echo "Nginx is not running. Killing Keepalived..."
# 杀死Keepalived进程
pkill -f "$KEEPALIVED_PROCESS_NAME"
return 1
else
echo "Nginx is running."
return 0
fi
}
# 无限循环检查Nginx状态
while true; do
check_nginx_status
if [ $? -ne 0 ]; then
# 可以选择发送邮件或执行其他操作来通知管理员
echo "Notification: Nginx is down and Keepalived has been killed." | mail -s "Nginx Down Alert" admin@example.com
fi
sleep 5 # 每5秒检查一次
done