首页 / 资讯中心 / 文章详情

Keepalived+Nginx高可用架构实战与优化

Keepalived+Nginx高可用架构实战与优化 ★ FEATURED ARTICLE
1. Keepalived与Nginx高可用架构解析在企业级Web服务部署中单点故障是必须解决的核心问题。我曾在某电商平台的黑色星期五大促期间亲眼见证过一套未经高可用设计的Nginx服务崩溃导致整个网站瘫痪的事故。这次经历让我深刻认识到用Keepalived实现Nginx的高可用HA不是可选项而是必选项。这套方案的核心价值在于当主Nginx节点发生故障时备用节点能在秒级通常1-3秒内自动接管服务对外表现为VIP虚拟IP的无缝漂移。整个过程对终端用户完全透明不会导致连接中断或请求失败。从技术实现来看Keepalived通过VRRP协议管理VIP而Nginx负责实际的请求处理二者各司其职又紧密配合。2. 环境准备与组件安装2.1 服务器基础配置建议准备两台配置相同的服务器以下称NodeA和NodeB我通常这样规划操作系统CentOS 7/8或Ubuntu 20.04 LTS网络配置双网卡管理网络业务网络防火墙规则开放80/443Nginx和224.0.0.18VRRP通信关键提示务必确保两台服务器的系统时间同步我曾遇到过因为时间不同步导致VRRP状态异常的案例建议配置NTP服务# 所有节点执行 yum install -y ntp || apt-get install -y ntpdate ntpdate pool.ntp.org hwclock --systohc2.2 Nginx安装与调优生产环境推荐源码编译安装可以定制模块和优化参数。这是我的标准编译选项./configure \ --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-threads \ --with-stream make make install编译完成后建议添加systemd服务管理创建/usr/lib/systemd/system/nginx.service[Unit] Descriptionnginx Afternetwork.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s QUIT $MAINPID PrivateTmptrue [Install] WantedBymulti-user.target2.3 Keepalived安装配置通过yum/apt直接安装即可# CentOS yum install -y keepalived # Ubuntu apt-get install -y keepalived3. 高可用核心配置实战3.1 Keepalived主备配置主节点NodeA配置示例/etc/keepalived/keepalived.confglobal_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script /usr/bin/killall -0 nginx interval 2 weight -20 } 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.100/24 dev eth0 } track_script { chk_nginx } }备节点NodeB只需修改state BACKUP priority 903.2 Nginx负载均衡配置在双活架构中建议采用以下配置/usr/local/nginx/conf/nginx.conf片段upstream backend { least_conn; server 10.0.1.1:8080 max_fails3 fail_timeout30s; server 10.0.1.2:8080 max_fails3 fail_timeout30s; keepalive 32; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ; } location /nginx_status { stub_status; allow 127.0.0.1; deny all; } }4. 高级调优与故障排查4.1 脑裂问题预防在金融级项目中我们通过以下手段避免脑裂多播检测配置secondary VIP用于健康检查仲裁节点部署第三台监控服务器参与决策硬件冗余使用带Bonding的双网卡增强版vrrp_script配置vrrp_script chk_host { script ping -c 1 -W 1 192.168.1.254 || exit 1 interval 2 fall 2 rise 1 }4.2 典型故障处理手册我在运维过程中总结的常见问题故障现象排查命令解决方案VIP不漂移ip addr show eth0检查防火墙是否拦截VRRP报文Nginx进程存活但无响应curl -I http://localhost调整keepalived检测脚本为端口检测主备同时持有VIPtcpdump -i eth0 vrrp配置vrrp_strict模式切换后Session丢失nginx -T在后端服务中启用共享Session存储5. 生产环境部署建议5.1 性能优化参数在/etc/sysctl.conf中添加# Keepalived优化 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.arp_ignore1 net.ipv4.conf.all.arp_announce2 # Nginx优化 net.core.somaxconn65535 net.ipv4.tcp_max_syn_backlog8192 fs.file-max20971525.2 监控方案设计推荐监控指标VRRP状态变化通过keepalived日志Nginx存活状态stub_status模块请求处理延迟$request_time活跃连接数$connections_active我的Prometheus监控配置示例- job_name: nginx metrics_path: /nginx_status static_configs: - targets: [192.168.1.100:80] relabel_configs: - source_labels: [__address__] regex: (.):80 target_label: instance replacement: $1这套架构经过多次618/双11大流量验证在某个百万QPS的直播平台中实现了全年99.999%的可用性。关键点在于定期进行故障演练每月至少一次主动触发切换以及建立完整的监控告警体系。
阅读完成 · 觉得有帮助?
咨询建站