Linux Nginx+Keepalived高可用负载均衡配置详解
想象一下这样的场景:你的网站流量猛增,单台服务器不堪重负,随时可能宕机。或者,你需要对服务器进行维护,但又不想让用户感受到任何服务中断。这时候,高可用负载均衡就显得尤为重要了。今天,我们就来深入探讨如何使用 Nginx 和 Keepalived 在 Linux 环境下搭建一套高可用负载均衡系统,并分享一些我的经验和技巧。
什么是高可用负载均衡?
简单来说,高可用(HA)意味着系统能够在发生故障时自动切换到备用节点,保证服务的连续性。负载均衡则负责将用户请求分发到多台服务器上,从而提高整体的处理能力。 Nginx 作为一款高性能的 HTTP 反向代理服务器,而 Keepalived 则负责监控服务器状态,并在主节点发生故障时进行自动切换,它们二者结合,可以构建一套稳定可靠的高可用负载均衡系统。
配置 Nginx 负载均衡
首先,我们需要安装 Nginx。以 Ubuntu 为例,可以使用如下命令:
sudo apt update
sudo apt install nginx
安装完成后,编辑 Nginx 的配置文件 (通常是 /etc/nginx/nginx.conf 或者 /etc/nginx/conf.d/default.conf),配置 upstream 模块,定义后端服务器组:
upstream backend {
server 192.168.1.101 weight=5;
server 192.168.1.102 weight=5;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
在这个配置中,我们定义了一个名为 backend 的 upstream,包含了两个后端服务器 (192.168.1.101 和 192.168.1.102)。 weight 参数表示权重,可以根据服务器性能进行调整。 proxy_pass 指令将请求转发到 backend upstream。 记得重启 Nginx 使配置生效:
sudo systemctl restart nginx
值得注意的是,除了简单的轮询算法,Nginx 还支持多种负载均衡算法,例如:
ip_hash: 根据客户端 IP 进行哈希,保证同一个客户端的请求总是转发到同一台服务器。least_conn: 将请求转发到连接数最少的服务器。fair: 根据服务器的响应时间进行动态调整,将请求转发到响应最快的服务器 (需要安装 nginx-upstream-fair 模块)。
安装和配置 Keepalived
接下来,我们需要安装 Keepalived:
sudo apt update
sudo apt install keepalived
Keepalived 的配置文件通常位于 /etc/keepalived/keepalived.conf。 我们需要配置两个节点,一个作为 MASTER (主节点),另一个作为 BACKUP (备节点)。
MASTER 节点配置 (/etc/keepalived/keepalived.conf):
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 修改为你的网卡接口
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 # 虚拟 IP 地址
}
track_script {
chk_nginx
}
}
BACKUP 节点配置 (/etc/keepalived/keepalived.conf):
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 修改为你的网卡接口
virtual_router_id 51
priority 90 # 优先级低于 MASTER 节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 # 虚拟 IP 地址
}
track_script {
chk_nginx
}
}
关键配置项说明:
state: 指定节点状态,MASTER 或 BACKUP。interface: 指定网卡接口,根据实际情况修改。virtual_router_id: 虚拟路由 ID,MASTER 和 BACKUP 节点必须相同。priority: 优先级,MASTER 节点必须高于 BACKUP 节点。virtual_ipaddress: 虚拟 IP 地址,客户端访问的 IP 地址。track_script: 指定监控脚本,用于检测 Nginx 服务状态。
创建 Nginx 状态检测脚本 (/etc/keepalived/check_nginx.sh):
#!/bin/bash
nginx_pid=`pidof nginx`
if [ -z "$nginx_pid" ]; then
systemctl restart nginx
sleep 2
nginx_pid=`pidof nginx`
if [ -z "$nginx_pid" ]; then
systemctl stop keepalived
fi
fi
赋予脚本执行权限:
sudo chmod +x /etc/keepalived/check_nginx.sh
重启 Keepalived 服务使配置生效:
sudo systemctl restart keepalived
高可用测试
配置完成后,我们可以进行高可用测试。 首先,确保 MASTER 节点上的 Nginx 和 Keepalived 服务正常运行。 然后,访问虚拟 IP 地址 (192.168.1.200),检查是否能够正常访问网站。 接下来,模拟 MASTER 节点故障,例如关闭 Nginx 服务或者直接关机。 观察 BACKUP 节点是否能够自动接管虚拟 IP 地址,并继续提供服务。 如果一切正常,说明高可用负载均衡配置成功。
vDisk云桌面解决方案的优势
在构建高可用负载均衡系统时,我们往往需要考虑后端服务器的配置和管理。 传统的 VDI (Virtual Desktop Infrastructure) 架构需要大量的服务器资源和复杂的管理维护。 而 vDisk 云桌面 解决方案则提供了一种全新的思路。 vDisk 云桌面 是一种基于本地计算资源的云桌面系统,它将计算任务放在本地设备上进行,而不是集中在服务器端。 这样可以有效降低服务器的负载,提高性能,并减少网络延迟。 想象一下,如果你的后端服务器是基于 vDisk 云桌面 构建的,那么即使一台服务器出现故障,用户仍然可以在其他服务器上快速启动桌面,继续工作,而无需承担漫长的