Linux系统——keepalived安装与部署
一、keepalived的概念和核心功能
(1)keepalived是一个用于实现高可用和负载均衡的服务,主要基于虚拟路由协议,解决了nginx一台机器的单点故障问题
(2)高可用性:keepalived会通过健康检查机制定期检查nginx服务器,通过 VRRP 协议实现故障转移。当主服务器发生故障时,备用服务器会自动接管服务,确保服务不中断。
(3)负载均衡:支持基于传输层的负载均衡,可以将客户端请求分发到多个后端服务器,提高系统的处理能力和可靠性。
二、keepalived的安装与部署
(1)yum -y install keepalived:下载keepalived(主机和备机都需要下载)
(2)hostnamectl set-hostname keepalived-master:设置主机keepalived为keepalived-master
su:跳转进入keepalived-master
(3)hostnamectl set-hostname keepalived-backup:设置备机keepalived为keeplived-backup
su :跳转进入keepalived-backup
(4)cd /etc/keepalived:跳转到keepalive的目录
vim keepalived.conf:编辑keepalived配置文件
主机配置
! Configuration File for keepalived
global_defs {
#路由器id,是路由器唯一标识符,用于在日志中区分不同的Keepalived实例
router_id LVS_DEVEL
}
#定义一个vrrp脚本,用于监控nginx服务
vrrp_script check_nginx_pid_restart {
# 之前编写的nginx重启脚本的所在位置
script "/bin/keepalived/check_nginx_pid_restart.sh"
# 每间隔3秒执行一次
interval 3
# 如果脚本中的条件成立,重启一次则权重-20,即则降低优先级20分
weight -20
}
#定义一个名为VI_1的实例
vrrp_instance VI_1 {
state MASTER #设置此实例为主服务器状态(备机应设置为BACKUP)
interface ens33 #监听的网卡为ens33
virtual_router_id 121 #虚拟路由器ID,主备机必须相同
priority 100 # 优先级,数值越大优先级越高,主服务器应高于备服务器
advert_int 1 # VRRP通告间隔时间(秒)
authentication { # 认证信息,确保只有授权的节点可以加入VRRP组
auth_type PASS # 使用简单密码认证
auth_pass 1111 # 认证密码,主备机需一致
}
track_script {
# 执行Nginx监控的脚本
check_nginx_pid_restart
}
virtual_ipaddress {
192.168.186.100 #虚拟ip,需要与主机和备机在同一网域,但IP不能相同
}
}
备机配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script check_nginx_pid_restart {
# 之前编写的nginx重启脚本的所在位置
script "/bin/keepalived/check_nginx_pid_restart.sh"
# 每间隔3秒执行一次
interval 3
# 如果脚本中的条件成立,重启一次则权重-20
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 121
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
# 执行Nginx监控的脚本
check_nginx_pid_restart
}
virtual_ipaddress {
192.168.186.100
}
}
(5)mkdir keepalived :跳转到/bin目录,然后创建一个keepalived目录
vim check_nginx_pid_restart.sh:编辑脚本文件
chmod +x check_nginx_pid_restart.sh:给脚本赋予执行权限
脚本内容
#!/bin/bash
# 使用 systemctl 检查 Nginx 服务的状态,并通过 grep 查找 "active (running)" 字样
# 如果找到该字样,表示 Nginx 正在运行,grep 返回状态码为 0;否则返回非零状态码
systemctl status nginx | grep "active (running)" > /dev/null
# 检查上一条命令的退出状态码($?),如果状态码不等于 0,表示 Nginx 不是 "active (running)"
if [ $? -ne 0 ]; then
# 尝试重启 Nginx 服务并将输出重定向到 /dev/null 以避免输出到控制台
systemctl restart nginx &> /dev/null
sleep 1
# 再次检查 Nginx 服务的状态
systemctl status nginx | grep "active (running)" > /dev/null
# 如果 Nginx 仍然不是 "active (running)",则停止 Keepalived 服务
if [ $? -ne 0 ]; then
systemctl stop keepalived
else
Exit # 如果 Nginx 已经成功启动,则直接退出脚
fi
fi
(6)kdir -p /bin/keepalived :递归创建文件夹
scp check_nginx_pid_restart.sh root@192.168.186.180:/root #将脚本文件远程复制到备机的/root目录下
mv check_nginx_pid_restart.sh /bin/keepalived :将脚本文件移动到keepalived目录下
chomd +x check_nginx_pid_restart.sh :给脚本文件赋权
(7)systemctl start keepalived :在主机和备机上同时将keepalived开启
ip a :查询是否开启
如果出现虚拟ip则成功
(8)pkill -9 nginx:将主机nginx进程杀死
netstat -antp:查看端口是否关闭
systemctl stop nginx
#将主机上nginx关闭测试备机是否能启用nginx
systemctl status nginx:测试nginx是否关闭
#如果nginx关闭不了将主机nginx直接将其卸载
yum -y remove nginx
(9)在备机输入ip a查看nginx是否启用,如果查到虚拟ip则备机nginx已经启用