资讯详情

资讯详情

Nginx+Keepalived高可用集群架构设计与实践

1. 高可用集群架构设计原理NginxKeepalived高可用集群的核心价值在于解决单点故障问题确保Web服务持续可用。这套架构通过虚拟IPVIP机制和健康检查实现了故障自动转移其设计哲学可以概括为冗余自动切换。在典型的生产环境中我们通常会部署两台Nginx服务器组成主备集群。主节点正常工作时所有流量通过VIP指向主节点当主节点发生故障时Keepalived会在秒级通常1-3秒内检测到异常并将VIP自动漂移到备用节点。这种切换对前端用户完全透明不会导致服务中断。关键设计要点VIP必须与物理服务器IP处于同一网段且需要确保网络环境中没有IP冲突。实际部署时建议使用192.168.x.x或10.x.x.x这类内网地址段。2. 环境准备与拓扑规划2.1 基础环境配置建议使用以下IP规划方案主Nginx节点192.168.1.101备Nginx节点192.168.1.102虚拟IPVIP192.168.1.100Tomcat应用服务器192.168.1.201-192.168.1.204根据业务规模可扩展所有节点需要确保关闭SELinuxsetenforce 0配置时间同步yum install -y ntpdate ntpdate time.nist.gov配置主机名解析/etc/hosts中添加所有节点IP与主机名映射2.2 网络拓扑验证使用以下命令验证网络连通性# 在各节点执行ping测试 ping -c 4 192.168.1.101 ping -c 4 192.168.1.102 ping -c 4 192.168.1.201 # 检查防火墙规则 iptables -L -n | grep 803. Nginx负载均衡配置详解3.1 编译安装优化版Nginx推荐使用以下编译参数获取最佳性能./configure \ --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-file-aio \ --with-threads \ --with-http_v2_module3.2 负载均衡策略对比Nginx支持多种负载均衡算法实际测试数据对比如下算法类型描述适用场景性能影响轮询(rr)默认方式按时间顺序分配后端服务器性能均衡低权重(weight)按配置的权重分配服务器配置不均低ip_hash按访问IP的hash结果分配需要会话保持中least_conn最少连接数优先长连接服务中url_hash按访问URL的hash结果分配缓存服务器高3.3 生产级nginx.conf配置upstream tomcat_cluster { least_conn; server 192.168.1.201:8080 weight5 max_fails3 fail_timeout30s; server 192.168.1.202:8080 weight5 max_fails3 fail_timeout30s; server 192.168.1.203:8080 weight3 max_fails3 fail_timeout30s; keepalive 32; } server { listen 80 reuseport; server_name example.com; # 启用0-RTT TLSv1.3 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { proxy_pass http://tomcat_cluster; proxy_http_version 1.1; proxy_set_header Connection ; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超时设置 proxy_connect_timeout 3s; proxy_read_timeout 15s; proxy_send_timeout 10s; } # 健康检查接口 location /nginx_status { stub_status; access_log off; allow 192.168.1.0/24; deny all; } }4. Keepalived高可用实现4.1 主备节点配置差异主节点配置关键参数global_defs { router_id nginx_master } vrrp_instance VI_1 { state MASTER priority 100 # 必须高于备节点 virtual_ipaddress { 192.168.1.100/24 dev eth0 label eth0:1 } }备节点配置关键参数global_defs { router_id nginx_backup } vrrp_instance VI_1 { state BACKUP priority 90 # 必须低于主节点 virtual_ipaddress { 192.168.1.100/24 dev eth0 label eth0:1 } }4.2 健康检查脚本优化改进版检查脚本/usr/local/bin/check_nginx.sh#!/bin/bash # 增加curl检查确保Nginx真正可用 if ! curl -I http://localhost -m 3 /dev/null 21; then systemctl restart nginx sleep 3 if ! curl -I http://localhost -m 3 /dev/null 21; then pkill -9 keepalived fi fi设置可执行权限并测试chmod x /usr/local/bin/check_nginx.sh /usr/local/bin/check_nginx.sh echo $? # 返回0表示正常5. 高级调优与故障排查5.1 内核参数优化在/etc/sysctl.conf中添加# 最大文件描述符 fs.file-max 655350 # 端口范围 net.ipv4.ip_local_port_range 1024 65000 # 启用TCP快速回收 net.ipv4.tcp_tw_recycle 1 net.ipv4.tcp_tw_reuse 1 # 最大SYN队列 net.ipv4.tcp_max_syn_backlog 262144 # 保持连接时间 net.ipv4.tcp_keepalive_time 600应用配置sysctl -p5.2 常见故障排查表故障现象排查命令可能原因解决方案VIP不生效ip addr show防火墙阻止VRRP协议iptables -I INPUT -p vrrp -j ACCEPTNginx不转发curl -v http://localhostupstream配置错误检查nginx -t输出主备不同步journalctl -u keepalived认证配置不一致检查auth_pass值脑裂问题tcpdump -i eth0 vrrp网络隔离配置多播检测6. 安全加固措施Nginx安全配置server_tokens off; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock;Keepalived安全配置vrrp_instance VI_1 { authentication { auth_type AH # 改用AH认证 auth_pass Secr3tPss } unicast_src_ip 192.168.1.101 # 主节点IP unicast_peer { 192.168.1.102 # 备节点IP } }定期维护建议每月进行故障转移演练每季度更新SSL证书实时监控VIP状态和Nginx负载在实际生产环境中我们曾遇到一个典型问题当主节点负载过高时虽然Nginx仍在运行但响应变慢导致健康检查失败。解决方案是在检查脚本中增加响应时间阈值判断避免不必要的故障转移。这个案例告诉我们高可用配置需要根据实际业务特点进行针对性调整。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →