Keepalived 配置 Nginx 自动重启 ?
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源软件,用于实现服务器之间的高可用性。通过配置 Keepalived,我们可以实现 Nginx 的自动重启和双主热备,从而提高系统的可用性和可靠性。以下是如何配置 Keepalived 以实现 Nginx 自动重启的步骤:
-
安装 Keepalived 和 Nginx: 首先,确保在所有参与高可用性架构的服务器上安装了 Keepalived 和 Nginx。你可以通过适合你的操作系统的包管理器(如 apt、yum 等)来安装这两个软件。
-
创建 Nginx 检查脚本: 我们需要一个脚本来检查 Nginx 的状态,并在必要时重新启动它。以下是一个简单的示例脚本,该脚本检查 Nginx 进程是否存在,如果不存在则尝试重新启动它:
#!/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ]; then /usr/local/nginx/sbin/nginx sleep 3 if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then # 如果 Nginx 仍未启动,你可以在这里添加额外的处理逻辑,例如发送警报或停止 Keepalived echo "Nginx failed to start" # killall keepalived fi fi
将上述脚本保存为
/etc/keepalived/check_nginx_alive_or_not.sh
,并赋予执行权限:chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
-
配置 Keepalived: 在主服务器和备份服务器上分别创建 Keepalived 的配置文件(通常是
/etc/keepalived/keepalived.conf
)。在配置文件中,你需要定义 VRRP 实例以及一个用于执行 Nginx 检查脚本的自定义检查。以下是一个简化的 Keepalived 配置示例,其中包含了自定义的脚本检查:
! Configuration File for keepalived global_defs { notification_email { your-email@example.com } notification_email_from keepalived@yourdomain.com smtp_server smtp.yourdomain.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx_alive_or_not.sh" interval 2 # 检查间隔 weight 2 # 如果脚本执行失败,则降低优先级 } vrrp_instance VI_1 { state MASTER # 主节点为 MASTER,备份节点为 BACKUP interface eth0 # 网络接口名称 virtual_router_id 51 # VRRP 组标识,主备节点必须一致 priority 100 # 优先级,主节点优先级高于备份节点 advert_int 1 # VRRP 广播间隔 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.100/24 # 虚拟 IP 地址 } track_script { chk_nginx # 执行上面定义的 chk_nginx 脚本检查 } notify_master "/path/to/your/script_to_run_when_master.sh" # 成为主节点时执行的脚本(可选) notify_backup "/path/to/your/script_to_run_when_backup.sh" # 成为备份节点时执行的脚本(可选) notify_fault "/path/to/your/script_to_run_when_fault.sh" # 出现故障时执行的脚本(可选) notify_stop "/path/to/your/script_to_run_when_stop.sh" # Keepalived 停止时执行的脚本(可选) }
注意,
interface
应该设置为你的服务器实际使用的网络接口名称,virtual_ipaddress
是你想要 Keepalived 管理的虚拟 IP 地址。 -
启动 Keepalived 服务: 配置完成后,启动 Keepalived 服务,并确保它在系统启动时自动启动:
sudo systemctl start keepalived sudo systemctl enable keepalived
-
验证配置: 检查 Keepalived 和 Nginx 的状态,确保它们正在运行并且按照预期进行故障转移。
请注意,