当前位置:网站首页 >  攻略

服务器秒级恢复运维实战:Keepalived双机热备配置

时间:2026年06月05日 03:57:27 来源:易频IT社区

一、环境规划与基础准备

为了实现服务器故障时的秒级自动切换,我们采用经典的 Keepalived + Nginx 架构。Keepalived 利用 VRRP 协议实现虚拟 IP(VIP)的漂移,当主节点宕机时,VIP 自动漂移到备节点,确保业务不中断。

请准备两台服务器,并确保它们处于同一局域网内:

  • 主服务器(Master):IP 地址 192.168.1.10
  • 备服务器(Backup):IP 地址 192.168.1.11
  • 虚拟 IP(VIP):对外提供服务的 IP 192.168.1.200
  • 操作系统:CentOS 7.x 或 CentOS 8.x

以下操作需在两台服务器上分别执行,除非特别标注“仅主节点”或“仅备节点”。

二、安装并配置 Nginx 服务

首先在两台服务器上安装 Nginx,作为实际承载业务流量的 Web 服务。

1. 安装 Nginx

执行以下命令安装 EPEL 源及 Nginx:

```bash yum install -y epel-release yum install -y nginx ```

2. 配置差异化页面(用于验证切换效果)

为了直观地看到 VIP 漂移到了哪台机器,我们修改默认首页内容。

主服务器 (192.168.1.10) 上执行:

```bash echo "Server Master - 192.168.1.10" > /usr/share/nginx/html/index.html ```

备服务器 (192.168.1.11) 上执行:

```bash echo "Server Backup - 192.168.1.11" > /usr/share/nginx/html/index.html ```

3. 启动 Nginx 并设置开机自启

```bash systemctl start nginx systemctl enable nginx ```

此时,分别访问两台服务器的真实 IP,应能看到对应的差异化文字。

三、安装 Keepalived 组件

在两台服务器上均执行以下命令安装 Keepalived:

```bash yum install -y keepalived ```

四、配置 Keepalived 实现双机热备

这是核心步骤。我们将配置 Keepalived 监控 Nginx 状态,并管理 VIP。

1. 编写 Nginx 存活检测脚本

为了防止 Nginx 进程挂了但 Keepalived 还活着导致业务不可用,我们需要一个检测脚本。在两台服务器上均创建脚本:

```bash vim /etc/keepalived/check_nginx.sh ```

写入以下内容(脚本逻辑:尝试检测 Nginx 进程,如果不存在则尝试启动,启动失败则关闭 Keepalived 触发切换):

```bash !/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ];then systemctl start nginx sleep 2 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then systemctl stop keepalived fi fi ```

赋予脚本执行权限:

```bash chmod +x /etc/keepalived/check_nginx.sh ```

2. 配置主服务器 (192.168.1.10)

编辑主节点配置文件:

```bash vim /etc/keepalived/keepalived.conf ```

删除原内容,完整粘贴以下配置:

```bash ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_MASTER } 定义检测脚本 vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 每2秒检测一次 weight -20 检测失败时优先级减20 } vrrp_instance VI_1 { state MASTER 定义角色为 MASTER interface ens33 网卡名称,请使用 ip a 命令查看实际网卡名(如 eth0, ens33) virtual_router_id 51 VRID,主备必须一致 priority 100 优先级,主节点必须高于备节点 advert_int 1 心跳检测间隔,单位秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 绑定的虚拟 IP } track_script { check_nginx 调用上面的检测脚本 } } ```

注意:请务必将 interface ens33 修改为你服务器实际的网卡名称。

3. 配置备服务器 (192.168.1.11)

编辑备节点配置文件:

```bash vim /etc/keepalived/keepalived.conf ```

删除原内容,完整粘贴以下配置:

```bash ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_BACKUP } vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP 定义角色为 BACKUP interface ens33 网卡名称,需与主节点一致 virtual_router_id 51 VRID,必须与主节点一致 priority 90 优先级,低于主节点 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 绑定的虚拟 IP } track_script { check_nginx } } ```

五、启动服务并验证 VIP

服务器秒级恢复运维实战:Keepalived双机热备配置

1. 启动 Keepalived

两台服务器上分别执行:

```bash systemctl start keepalived systemctl enable keepalived ```

2. 验证主节点 VIP 绑定

主服务器 (192.168.1.10) 上执行 ip addr 命令:

```bash ip addr ```

你应该能看到 ens33 网卡下绑定了 192.168.1.200

备服务器 (192.168.1.11) 上执行 ip addr,此时应该看不到 192.168.1.200

3. 客户端访问测试

在浏览器或终端访问 http://192.168.1.200,应显示返回内容为 "Server Master - 192.168.1.10"。

六、故障模拟与秒级切换验证

现在我们来模拟故障,验证是否能实现“秒级恢复”。

场景一:主服务器 Keepalived 进程挂掉(模拟宕机)

主服务器 上停止 Keepalived:

```bash systemctl stop keepalived ```

操作:立即在 备服务器 上执行 ip addr

预期结果:备服务器的网卡上瞬间出现了 192.168.1.200。再次访问 VIP,页面内容变为 "Server Backup - 192.168.1.11"。整个过程通常在 1-3 秒内完成。

恢复:在主服务器执行 systemctl start keepalived,VIP 会重新抢占回主服务器。

场景二:主服务器 Nginx 服务挂掉(模拟应用故障)

主服务器 上停止 Nginx(Keepalived 进程保持运行):

```bash systemctl stop nginx ```

观察:check_nginx.sh 脚本会检测到 Nginx 消失,尝试重启。如果重启失败(我们直接 stop 了),脚本会强制关闭 Keepalived。

预期结果:几秒钟后,主服务器上的 Keepalived 进程消失,VIP 漂移到备服务器。访问 VIP,页面内容显示为 Backup 服务器的内容。

恢复:在主服务器执行 systemctl start nginxsystemctl start keepalived 恢复正常状态。

七、常见问题处理

1. 启动报错:Unknown configuration item

请检查配置文件中是否有拼写错误,或使用了不支持的参数。确保所有大写(如 MASTER, BACKUP)和括号闭合正确。

2. VIP 无法绑定

请检查 interface 参数是否填写了正确的网卡名称。使用 ip a 查看本机实际网卡名(常见为 eth0, ens33, enp0s3 等)。

3. 两台服务器同时抢夺 VIP(脑裂)

请检查 virtual_router_id 是否一致,authentication 中的密码是否一致,并确保防火墙允许 VRRP 组播通信。如果是云服务器(如阿里云、腾讯云),通常不支持 VRRP 组播,需要使用云厂商提供的“高可用虚拟IP”功能替代标准的 Keepalived。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图