Nginx 接入 Keepalived 实现高可用,让你的网站稳如泰山!

一、往期内容回顾

前面提到nginx可以实现后端服务的负载均衡,来使得后端的服务能力得到水平的扩展。但是怎么保证nginx的高可用呢,如果nginx挂了,还怎么持续提供服务呢?今天我们就来讲一讲Keepalived实现高可用的方案。

二、什么是高可用?Keepalived高可用架构是什么?

简单来说,高可用就是让你的网站服务时刻在线,即使出现硬件故障、网络波动等问题,也能快速恢复,保证用户访问不受影响。

Keepalived 是一款轻量级的高可用解决方案,它基于 VRRP 协议(虚拟路由冗余协议),可以实现 IP 漂移,即当主服务器出现故障时,备用服务器会自动接管虚拟 IP,继续提供服务,从而保证服务的高可用性。

Keepalived架构中,我们至少需要两台服务器部署Nginx和Keepalived:

  1. 主服务器 (Master): 正常情况下,用户访问的流量会指向主服务器的虚拟 IP,由主服务器的 Nginx 提供服务。

  2. 备用服务器 (Backup): 当主服务器出现故障时,Keepalived 会检测到并将虚拟 IP 漂移到备用服务器,由备用服务器的 Nginx 接管服务。

  3. 架构方案如下图所示

Nginx 接入 Keepalived 实现高可用,让你的网站稳如泰山!_第1张图片

 

 三、环境搭建

准备工作:

  • 两台服务器:192.168.1.101(主)、192.168.1.102(备)

  • 虚拟 IP:192.168.1.100

  • 操作系统:CentOS 7.x

1. 安装Keepalived


yum install keepalived -y

2. 配置Keepalived

编辑主服务器的 Keepalived 配置文件 /etc/keepalived/keepalived.conf


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
  • state MASTER:表示这台服务器是主服务器。

  • priority 100:优先级是 100,数字越大优先级越高。

  • virtual_ipaddress:虚拟 IP 是 192.168.1.100。

编辑备用服务器的 Keepalived 配置文件 /etc/keepalived/keepalived.conf


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
  • state BACKUP:表示这台是备用服务器。

  • priority 90:优先级比主服务器低。

保存配置后,启动 Keepalived:


sudo systemctl start keepalived

3. 安装并配置nginx


yum install nginx

在两台服务器上,配置 Nginx 都是一样的。编辑 Nginx 配置文件(通常在/etc/nginx/nginx.conf),写一个简单的配置:


server {
    listen 80;
    server_name example.com;

    location / {
        return 200 "Hello, I'm server $hostname\n";
    }
}

保存配置后,启动 Nginx:


sudo systemctl start nginx

四、测试高可用

1. 访问虚拟 IP
在浏览器中访问虚拟 IP(192.168.1.100),应该能看到主服务器返回的消息,比如:

Hello, I'm server master

2. 模拟主服务器故障
停止主服务器的 Keepalived 服务:


sudo systemctl stop keepalived

再次访问虚拟 IP,你会发现流量已经切换到了备用服务器,返回的消息变成了:

Hello, I'm server backup

五、进阶优化:健康检查

在实际生产环境中,我们不能只靠手动停止 Keepalived 来模拟故障。Keepalived 可以配置健康检查,自动检测 Nginx 是否正常运行。如果 Nginx 挂了,Keepalived 会自动切换到备用服务器。

1. 配置健康检查

在主服务器和备用服务器的 Keepalived 配置文件中,添加以下内容:


vrrp_script chk_nginx {
    script "killall -0 nginx"
    interval 2
    weight 2
}

track_script {
    chk_nginx
}
  • killall -0 nginx:检查 Nginx 进程是否存在。

  • interval 2:每 2 秒检查一次。

  • weight 2:如果检查失败,优先级降低 2。

2. 测试健康检查

在主服务器上,手动停止 Nginx:


sudo systemctl stop nginx

你会发现 Keepalived 检测到 Nginx 停止后,会自动将流量切换到备用服务器。

六、总结

通过上面的步骤,我们成功搭建了一个 Nginx + Keepalived 的高可用集群。用户访问虚拟 IP 时,流量会在主服务器和备用服务器之间自动切换,保证服务一直可用。

在实际部署中,你还可以根据需求扩展,比如增加更多的备用服务器,或者结合负载均衡让多台服务器分担流量。

获取更多内容,关注公众号:全栈程序员老马

你可能感兴趣的:(nginx,服务器,前端)