ARTICLE DETAIL

资讯详情

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

CentOS下Keepalived高可用部署与VRRP协议详解

CentOS下Keepalived高可用部署与VRRP协议详解 1. Keepalived高可用方案概述在CentOS环境下部署Keepalived实现高可用性是保障关键业务连续性的经典方案。这套方案的核心在于利用VRRP协议Virtual Router Redundancy Protocol实现IP地址的自动漂移当主节点故障时备节点能在秒级完成接管。我曾在金融行业核心交易系统中部署过这套方案实测故障切换时间可控制在3秒以内。VRRP协议通过多播地址224.0.0.18进行通信默认使用112作为协议号。其工作原理类似于值班小组MASTER节点定期发送通告报文默认1秒间隔如果BACKUP节点超过3倍通告间隔未收到报文就会发起选举接管VIP。这种机制避免了单点故障但要注意网络分区Split-Brain风险——这也是为什么我们需要在配置中添加额外的健康检查。2. 基础环境准备2.1 系统要求与软件安装推荐使用CentOS 7.9或CentOS Stream 8作为操作系统这两个版本对Keepalived的支持最为稳定。安装过程需要注意几个关键点# 清除可能存在的旧版本 sudo yum remove keepalived -y # 安装EPEL仓库CentOS 7 sudo yum install epel-release -y # 安装Keepalived和依赖 sudo yum install keepalived ipvsadm -y # 验证安装版本应≥1.3.5 keepalived --version注意如果遇到为仓库appstream下载元数据失败错误需要先执行sudo yum clean all sudo yum makecache清理缓存。在企业内网环境建议配置本地yum镜像源。2.2 网络配置要点每台服务器需要至少两个网络接口eth0对外服务的VIP承载接口eth1VRRP协议通信的专用通道避免与业务流量竞争通过ip addr命令确认网卡名称后建议永久配置静态IP。编辑/etc/sysconfig/network-scripts/ifcfg-eth0示例DEVICEeth0 BOOTPROTOstatic IPADDR192.168.1.100 NETMASK255.255.255.0 GATEWAY192.168.1.1 ONBOOTyes3. Keepalived核心配置解析3.1 主备节点配置差异主节点配置文件/etc/keepalived/keepalived.conf示例global_defs { router_id LVS_MASTER # 唯一标识建议用主机名 } vrrp_instance VI_1 { state MASTER # 初始状态 interface eth0 # 监听网卡 virtual_router_id 51 # 组ID主备必须相同 priority 100 # 选举权重主备 advert_int 1 # 通告间隔(秒) authentication { auth_type PASS auth_pass 1111 # 密码需主备一致 } virtual_ipaddress { 192.168.1.200/24 dev eth0 label eth0:1 # VIP配置 } }备节点只需修改三处state BACKUP priority 90 router_id LVS_BACKUP3.2 健康检查增强配置基础VRRP缺乏业务层健康检测需要添加脚本检查vrrp_script chk_nginx { script /usr/bin/killall -0 nginx # 检查nginx进程是否存在 interval 2 # 检查频率 weight -20 # 检测失败时优先级调整值 } track_script { chk_nginx # 关联检测脚本 }更完善的健康检查应该包括端口检测和响应验证例如#!/bin/bash curl -sSf http://localhost:80/health-check /dev/null || exit 14. 高级部署方案4.1 多VIP场景配置当需要管理多个虚拟IP时可以扩展vrrp_instancevirtual_ipaddress { 192.168.1.200/24 dev eth0 label eth0:1 192.168.1.201/24 dev eth0 label eth0:2 10.0.0.100/24 dev eth1 label eth1:1 }4.2 脑裂防护措施为防止网络分区导致的双主问题建议配置多播检测vrrp_instance VI_1 { ... unicast_src_ip 192.168.1.100 # 本机真实IP unicast_peer { 192.168.1.101 # 对端真实IP } }使用iptables限制VRRP通信iptables -A INPUT -i eth0 -d 224.0.0.18 -j ACCEPT iptables -A INPUT -i eth0 -p vrrp -j ACCEPT iptables -A OUTPUT -o eth0 -d 224.0.0.18 -j ACCEPT5. 运维与排错指南5.1 服务管理命令# 启动服务首次需加载配置 systemctl start keepalived # 设置开机自启 systemctl enable keepalived # 查看运行状态 systemctl status keepalived -l # 动态重载配置不中断服务 systemctl reload keepalived5.2 日志分析技巧Keepalived日志默认输出到syslog建议单独配置global_defs { ... log_file /var/log/keepalived.log log_file_size 1024 # 日志轮转大小(MB) }常见日志分析Entering MASTER STATE成功接管VIPVRRP_Instance(xxx) Transition to MASTER状态切换IPVS: Cant initialize ipvs缺少ipvs模块需modprobe ip_vs5.3 故障排查流程图VIP是否漂移ip addr show eth0查看VIP绑定tcpdump -i eth0 vrrp抓包分析健康检查是否通过手动执行检测脚本验证检查应用端口netstat -tulnp防火墙是否放行iptables -L -n -v查看规则firewall-cmd --list-allFirewalld6. 生产环境优化建议6.1 参数调优vrrp_instance VI_1 { ... garp_master_delay 5 # 接管后延迟发送GARP garp_master_refresh 60 # 定期刷新GARP track_interface { eth0 weight -50 # 网卡故障降权 eth1 weight -50 } }6.2 与LVS集成Keepalived原生支持LVS负载均衡配置示例virtual_server 192.168.1.200 80 { delay_loop 6 lb_algo wrr # 加权轮询 lb_kind DR # 直接路由模式 persistence_timeout 50 # 会话保持 real_server 192.168.1.100 80 { weight 3 TCP_CHECK { connect_timeout 5 connect_port 80 } } }6.3 监控集成方案推荐Prometheus监控指标# 安装exporter yum install keepalived-exporter -y # 配置采集 scrape_configs: - job_name: keepalived static_configs: - targets: [localhost:9650]关键监控指标vrrp_state0init,1backup,2mastervrrp_data_errors通信错误计数check_script_status健康检查状态在部署过程中我发现很多故障源于基础配置错误。建议首次部署时逐步验证先测试单机VIP绑定再测试主备切换最后引入健康检查 这种分层验证法能快速定位问题层级。另外VIP切换时会有短暂网络抖动对TCP长连接应用需要做好重试机制。
返回列表