使用HAProxy创建一个active-active模式的分布式高可用Nginx集群,需要在每台Nginx节点上安装并配置Nginx,然后安装HAProxy作为负载均衡器分发流量到这些节点上。以下是详细步骤:
步骤1:安装Nginx
在所有三台服务器上安装Nginx。
sudo yum install nginx # 对于基于RedHat的系统
# 或者
sudo apt-get install nginx # 对于基于Debian的系统
步骤2:配置Nginx
为每台服务器编辑Nginx配置文件,通常位于/etc/nginx/nginx.conf
。
nginx">server {listen 80;server_name _; # 使用 '_' 匹配所有location / {root /usr/share/nginx/html;index index.html index.htm;}location /status {stub_status on;access_log off;}location ~ /\.ht {deny all;}
}
步骤3:安装HAProxy
在将作为负载均衡器的服务器上安装HAProxy。假设这台服务器不是Nginx节点之一。
sudo yum install haproxy # 对于基于RedHat的系统
# 或者
sudo apt-get install haproxy # 对于基于Debian的系统
步骤4:配置HAProxy
编辑HAProxy配置文件,通常位于/etc/haproxy/haproxy.cfg
。
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxyuser haproxygroup haproxydaemondefaultslog globalmode httpoption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000frontend http-inbind *:80mode httpoption http-server-close # 确保连接可以被优雅地关闭http-request set-path /status if { path /status } # 重写健康检查的URL路径default_backend nginx-backendbackend nginx-backendmode httpbalance source # 使用源IP哈希算法option httpchk GET /status # 定义健康检查方法http-check expect status 200 # 期望健康状态码为200server nginx1 192.168.0.1:80 checkserver nginx2 192.168.0.2:80 checkserver nginx3 192.168.0.3:80 check# 启用cookie持久性# 这里假设应用服务器设置了名为"NGINX_SID"的cookie# 如果应用使用不同的cookie名称,请相应修改option http-server-closehttp-response set-header Set-Cookie "NGINX_SID\(.*\)" "NGINX_SID\1"cookie NGINX_SID indirect nocache
步骤5:启动服务
启动所有服务器上的Nginx服务,以及负载均衡器上的HAProxy服务。
sudo systemctl start nginx # 在所有Nginx节点上执行
sudo systemctl start haproxy # 只在负载均衡器上执行
步骤6:测试配置
进行测试以确保HAProxy正确地将流量分发到所有Nginx节点。
注意
- 确保HAProxy的配置文件中的
bind
指令正确监听了客户端请求的端口。 balance
指令定义了负载均衡算法,roundrobin
是简单的轮询算法,还有leastconn
等其他算法可供选择。- 使用
check
选项启用健康检查,HAProxy将仅将流量发送到健康的服务器。 - 在生产部署之前,进行充分的测试以确保系统的稳定性和可靠性。
通过上述步骤,就可以建立一个active-active模式的分布式高可用Nginx集群,HAProxy将提供负载均衡,而所有Nginx节点都将独立处理请求。