ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LVS+Keepalived高可用集群架构设计与实战

LVS+Keepalived高可用集群架构设计与实战 1. 高可用集群架构设计解析这个LVSKeepalivedDNSWebNFS的高可用集群方案本质上是一个面向生产环境的全栈式负载均衡解决方案。我在金融行业和电商平台的多个项目中实际部署过类似架构它能有效解决单点故障问题保证关键业务7x24小时不间断运行。这套架构的核心思想是分层冗余前端LVSKeepalived实现四层负载均衡中间层Web服务器集群处理业务逻辑后端NFS提供统一存储基础设施DNS实现智能解析重要提示生产环境部署前务必进行网络分区测试我曾遇到过因交换机配置不当导致脑裂的情况。1.1 各组件选型考量LVS选用DR模式而非NAT模式的原因性能更高直接路由不修改IP包节省公网IP资源后端服务器可隐藏在内网但需要配置ARP抑制后面会详细说明Keepalived版本选择建议使用1.3.5以上版本老版本存在VRRP协议栈溢出漏洞新版本支持更精细的健康检查策略NFS协议版本v4.1及以上支持并行访问建议禁用v2/v3协议安全考虑需要配合nfs-utils和rpcbind使用2. 基础环境准备2.1 服务器规划典型生产环境需要2台LVS服务器主备至少3台Web服务器2台NFS服务器主备1台DNS服务器可多实例硬件配置建议# LVS节点最小配置 CPU: 4核 内存: 8GB 网卡: 千兆双网卡建议绑定bonding # Web节点 CPU: 8核 内存: 16GB 磁盘: 100GB系统盘 # NFS节点 CPU: 4核 内存: 16GB 磁盘: 根据业务需求建议RAID102.2 网络拓扑设计关键网络配置要点VIP虚拟IP需要单独规划各节点间需要心跳线直连或VLANWeb节点需要配置lo:0接口防火墙需放行以下端口VRRP协议112HTTP/HTTPS80/443NFS2049/tcpudpDNS53/tcpudp3. LVSKeepalived部署实战3.1 LVS核心配置安装必要组件yum install ipvsadm keepalived -y # CentOS apt-get install ipvsadm keepalived # UbuntuDR模式关键配置# 在每台Web服务器上执行 echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 /proc/sys/net/ipv4/conf/all/arp_announce # 添加VIP到lo:0 ifconfig lo:0 VIP netmask 255.255.255.255 up3.2 Keepalived配置详解主节点配置示例/etc/keepalived/keepalived.confglobal_defs { router_id LVS_MASTER } 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 { VIP/24 dev eth0 } } virtual_server VIP 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP real_server Web1_IP 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } # 更多real_server配置... }避坑指南virtual_router_id必须相同但不同集群间要区分开否则会导致VRRP报文冲突。4. Web集群与NFS集成4.1 Web服务器标准化部署建议使用自动化工具统一配置# 使用Ansible示例playbook - hosts: webservers tasks: - name: Install httpd yum: namehttpd statelatest - name: Configure virtual host template: src: templates/vhost.conf.j2 dest: /etc/httpd/conf.d/vhost.conf - name: Mount NFS share mount: path: /var/www/html src: NFS_IP:/webdata fstype: nfs opts: rw,hard,intr,noatime state: mounted4.2 NFS服务器高可用配置NFS服务端配置/etc/exports/webdata Web1_IP(rw,sync,no_root_squash) Web2_IP(rw,sync,no_root_squash)使用rsyncinotify实现NFS主备同步# 主NFS服务器上 inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f %e \ -e modify,delete,create,attrib /webdata | while read date time file do rsync -az --delete /webdata/ Backup_NFS_IP:/webdata/ done5. DNS智能解析配置5.1 Bind9视图配置根据客户端IP返回不同解析结果view internal { match-clients { 10.0.0.0/8; 192.168.0.0/16; }; zone example.com { type master; file /etc/bind/internal/example.com.zone; }; }; view external { match-clients { any; }; zone example.com { type master; file /etc/bind/external/example.com.zone; }; };5.2 健康检查集成使用DNS轮询健康检查脚本#!/bin/bash VIPVIP if curl -s --connect-timeout 3 http://$VIP/healthcheck /dev/null; then # 更新zone文件 sed -i s/^www.*/www 60 IN A $VIP/ /etc/bind/zones/example.com.zone rndc reload example.com fi6. 全链路测试与监控6.1 故障转移测试方案模拟LVS主节点宕机systemctl stop keepalived观察备节点是否在3秒内接管VIP可通过tcpdump抓VRRP包验证模拟Web节点故障iptables -A INPUT -p tcp --dport 80 -j DROP检查LVS是否自动剔除故障节点ipvsadm -Ln查看6.2 监控指标配置Prometheus关键监控项- job_name: lvs static_configs: - targets: [LVS1_IP:9100, LVS2_IP:9100] - job_name: web static_configs: - targets: [Web1_IP:9117, Web2_IP:9117] - job_name: nfs static_configs: - targets: [NFS1_IP:9100, NFS2_IP:9100]Grafana监控看板应包含LVS连接数/吞吐量Web节点响应时间NFS IO延迟DNS查询量7. 生产环境优化经验7.1 性能调优参数内核参数优化/etc/sysctl.conf# LVS节点 net.ipv4.ip_forward 1 net.ipv4.conf.all.send_redirects 0 net.ipv4.conf.default.send_redirects 0 # Web节点 net.core.somaxconn 65535 net.ipv4.tcp_max_syn_backlog 65535 vm.swappiness 107.2 安全加固措施LVS节点iptables -A INPUT -p vrrp -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j DROPNFS访问控制# /etc/hosts.allow portmap: Web1_IP, Web2_IP lockd: Web1_IP, Web2_IP rquotad: Web1_IP, Web2_IP mountd: Web1_IP, Web2_IPKeepalived安全vrrp_script chk_nginx { script killall -0 nginx interval 2 weight -5 fall 2 rise 1 }这套架构在笔者参与的大型电商平台中成功支撑了单日3000万PV的流量故障转移时间控制在5秒内。关键是要做好容量规划和定期演练建议每季度进行一次全链路故障演练。
返回列表