当前位置: 首页 > news >正文

LVS+Keepalived高可用群集 - 指南

LVS+Keepalived高可用群集 - 指南

目录

简介

一、Keepalived双机热备基础

1.1 Keepalived核心概念与VRRP协议原理

1.2 环境准备与软件安装

1.3 主服务器Keepalived配置

1.4 备用服务器Keepalived配置

1.5 双机热备功能测试

1.5.1 启动服务并验证VIP绑定

1.5.2 连通性测试与故障切换验证

1.5.3 Web服务切换测试

1.5.4 日志分析

二、LVS+Keepalived高可用负载均衡集群

2.1 LVS+Keepalived集群架构设计

2.2 基础环境配置

2.3 主调度器完整配置

2.4 从调度器配置

2.5 Web节点服务器配置(DR模式)

2.6 集群功能测试

2.6.1 负载均衡验证

2.6.2 高可用性测试

三、总结


简介

在当今互联网服务高并发、高可用的需求背景下,单点故障已成为系统稳定性的重大挑战。本文将讲解如何构建高可用的负载均衡集群,通过理论与实操,帮助读者掌握从环境搭建到故障切换的全流程技术要点。

一、Keepalived双机热备基础

1.1 Keepalived核心概念与VRRP协议原理

Keepalived最初是为LVS负载均衡器设计的高可用解决方案,其核心基于VRRP(虚拟路由冗余协议)实现故障切换与健康检查功能。VRRP协议通过将多台服务器组成一个热备组,共享一个虚拟IP地址(VIP),实现服务的持续可用。

1.2 环境准备与软件安装

以下是在OpenEuler24系统中搭建双机热备环境的具体步骤,两台服务器的IP规划如下:

# 安装Keepalived、ipvsadm(LVS管理工具)和Nginx(测试Web服务)yum install -y keepalived ipvsadm nginx # 设置Keepalived服务开机自启动systemctl enable keepalived # 关闭防火墙(生产环境需谨慎配置防火墙规则)systemctl stop firewalldsystemctl disable firewalld # 关闭SELinux安全机制setenforce 0sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

命令解析

  • ​yum install​​​:通过包管理器安装所需软件,​​-y​​参数自动确认安装
  • ​systemctl enable​​:将Keepalived添加到系统启动项,确保服务器重启后服务自动运行
  • 防火墙和SELinux的关闭是为了简化测试环境,生产环境应根据安全策略配置
1.3 主服务器Keepalived配置
# 进入Keepalived配置目录cd /etc/keepalived/ # 复制配置模板作为基础cp keepalived.conf.sample keepalived.conf # 编辑主配置文件vi keepalived.conf
global_defs {    router_id HA_TEST_R1  # 本服务器在热备组中的标识名称} vrrp_instance VI_1 {    state MASTER          # 服务器角色状态,MASTER为主服务器    interface ens33       # 承载VIP的物理网络接口    virtual_router_id 1   # 虚拟路由ID,同一热备组内必须一致    priority 100          # 优先级,数值越大优先级越高,主服务器应设为最高    advert_int 1          # 心跳通告间隔(秒),用于主备服务器状态检测        authentication {        auth_type PASS    # 认证类型,PASS为密码认证        auth_pass 123456  # 认证密码,同一热备组内必须一致    }        virtual_ipaddress {        192.168.10.100/24  # 虚拟IP地址,即漂移地址    }}

配置解析

  • ​global_defs​​​:全局参数配置,​​router_id​​用于标识不同服务器
  • ​vrrp_instance​​​:VRRP实例配置,​​VI_1​​为实例名称
  • ​state​​指定服务器角色,MASTER表示主服务器
  • ​interface​​指定绑定VIP的物理接口,需根据实际环境修改
  • ​virtual_router_id​​是热备组的唯一标识,同一组内必须相同
  • ​priority​​决定故障切换顺序,主服务器应高于备用服务器
  • ​advert_int​​设置心跳频率,默认1秒一次
  • ​authentication​​配置认证信息,防止非法服务器加入热备组
  • ​virtual_ipaddress​​定义漂移IP地址,客户端通过此地址访问服务
1.4 备用服务器Keepalived配置

备用服务器的配置与主服务器基本相同,仅需修改少数参数:

global_defs {    router_id HA_TEST_R2  # 备用服务器标识名称,需与主服务器不同} vrrp_instance VI_1 {    state BACKUP          # 备用服务器状态标识    interface ens33       # 同主服务器的网络接口    virtual_router_id 1   # 保持与主服务器一致的虚拟路由ID    priority 99           # 优先级低于主服务器,确保主服务器优先接管    advert_int 1          # 心跳间隔与主服务器一致        authentication {        auth_type PASS            auth_pass 123456  # 认证信息必须与主服务器完全一致    }        virtual_ipaddress {        192.168.10.100/24  # 相同的虚拟IP地址    }}

关键差异说明

  • ​router_id​​​改为​​HA_TEST_R2​​,确保每台服务器标识唯一
  • ​state​​​设置为​​BACKUP​​,表明这是备用服务器
  • ​priority​​设为99,比主服务器的100低,保证正常情况下主服务器持有VIP
1.5 双机热备功能测试
1.5.1 启动服务并验证VIP绑定
# 启动Keepalived服务systemctl start keepalived # 查看网络接口配置,确认VIP是否绑定ip addr show dev ens33

主服务器输出示例

2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:93:80:fb brd ff:ff:ff:ff:ff:ff    inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33    inet 192.168.10.100/32 scope global ens33  # 自动绑定的VIP地址

备用服务器输出示例

2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:d1:f0:b5 brd ff:ff:ff:ff:ff:ff    inet 192.168.10.102/24 brd 172.16.16.255 scope global ens33    # 备用服务器此时不会绑定VIP
1.5.2 连通性测试与故障切换验证
# 在客户端持续ping VIP地址ping -t 192.168.10.100 # 模拟主服务器故障(停止Keepalived服务)systemctl stop keepalived # 观察ping命令输出,应只有1-2个包丢失# 恢复主服务器服务systemctl start keepalived
1.5.3 Web服务切换测试
# 在主服务器设置Nginx测试页面echo "主服务器提供服务" > /usr/share/nginx/html/index.htmlsystemctl start nginx # 在备用服务器设置不同的测试页面echo "备用服务器提供服务" > /usr/share/nginx/html/index.htmlsystemctl start nginx # 在客户端浏览器访问http://192.168.10.100# 正常应显示主服务器页面# 停止主服务器Keepalived服务后刷新页面# 应显示备用服务器页面# 恢复主服务器服务后再次刷新# 应重新显示主服务器页面
1.5.4 日志分析
# 查看Keepalived日志tail -f /var/log/messages # 主服务器日志关键信息Sep 11 13:36:42 localhost Keepalived_vrrp[18280]: VRRP_Instance(VI_1) Transition to MASTER STATE# 表示主服务器恢复后重新获取MASTER状态 # 备用服务器日志关键信息Sep 11 13:12:44 localhost Keepalived_vrrp[25338]: VRRP_Instance(VI_1) Entering MASTER STATE# 表示备用服务器接管VIP时的状态切换

二、LVS+Keepalived高可用负载均衡集群

2.1 LVS+Keepalived集群架构设计

LVS(Linux Virtual Server)是Linux内核级的负载均衡解决方案,结合Keepalived可以构建同时具备负载均衡和高可用特性的集群系统。本案例采用DR(直接路由)模式,其架构如下:

  • 主调度器:192.168.10.101(Keepalived+LVS)
  • 从调度器:192.168.10.102(Keepalived+LVS)
  • 虚拟IP:192.168.10.100
  • Web服务器池:
  • web01: 192.168.10.103
  • web02: 192.168.10.104
  • NFS共享服务器:192.168.10.105(提供Web内容共享)
2.2 基础环境配置
# 加载LVS核心模块modprobe ip_vs # 查看LVS模块版本信息cat /proc/net/ip_vs # 安装Keepalived和ipvsadmyum install -y keepalived ipvsadm # 备份原始配置文件cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

命令解析

  • ​modprobe ip_vs​​:手动加载LVS内核模块,确保系统支持LVS功能
  • ​cat /proc/net/ip_vs​​:验证LVS模块是否正确加载及版本信息
  • 备份配置文件是为了防止配置错误导致服务不可用
2.3 主调度器完整配置
! Configuration File for keepalived global_defs {    router_id LVS_HA_R1  # 主调度器标识名称} vrrp_instance VI_1 {    state MASTER          # 主调度器状态    interface ens33       # 绑定VIP的物理接口    virtual_router_id 62  # 虚拟路由ID,同一热备组内一致    priority 100          # 最高优先级    advert_int 1          # 心跳间隔1秒        authentication {        auth_type PASS    # 密码认证        auth_pass 1111    # 认证密码    }        virtual_ipaddress {        192.168.10.100    # 集群VIP地址    }} # 虚拟服务器配置(LVS负载均衡规则)virtual_server 192.168.10.100 80 {    delay_loop 3         # 健康检查间隔3秒    lb_algo rr           # 负载均衡算法:轮询(Round Robin)    lb_kind DR           # 集群工作模式:直接路由(DR)    persistence_timeout 50 # 连接保持时间50秒    protocol TCP         # 应用层协议:TCP        # 第一个真实服务器配置    real_server 192.168.10.103 80 {        weight 1         # 服务器权重,1表示正常参与负载均衡                TCP_CHECK {      # TCP健康检查方式            connect_port 80       # 检查目标端口            connect_timeout 10    # 连接超时时间            retry 3               # 重试次数            delay_before_retry 3  # 重试间隔        }    }        # 第二个真实服务器配置    real_server 192.168.10.104 80 {        weight 1                TCP_CHECK {            connect_port 80            connect_timeout 10            retry 3            delay_before_retry 3        }    }}

关键配置解析

  • ​virtual_server​​块定义LVS虚拟服务器,指定VIP和服务端口(80)
  • ​delay_loop​​设置健康检查频率,确保及时发现故障节点
  • ​lb_algo​​​指定负载均衡算法,​​rr​​为轮询算法,简单均衡流量
  • ​lb_kind DR​​表示使用直接路由模式,调度器仅处理入向请求,响应由节点服务器直接返回
  • ​persistence_timeout​​实现会话保持,同一客户端的请求会被分配到同一节点
  • ​real_server​​​定义真实服务器,​​weight​​表示服务器权重,可根据服务器性能调整
  • ​TCP_CHECK​​配置健康检查参数,确保只有健康的节点参与负载均衡
2.4 从调度器配置

从调度器的配置与主调度器基本相同,仅修改以下参数:

global_defs {    router_id LVS_HA_R2  # 从调度器标识} vrrp_instance VI_1 {    state BACKUP         # 从调度器状态    priority 90          # 优先级低于主调度器}
2.5 Web节点服务器配置(DR模式)

DR模式下,节点服务器需要特殊配置以处理VIP请求:

#!/bin/bash# VIP配置脚本,需在所有Web节点执行 vip='192.168.10.100'  # 集群VIP地址 case "$1" instart)    # 配置ARP参数,防止ARP广播暴露真实服务器    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore    echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce        # 临时添加VIP到lo接口    ip addr add $vip/32 dev lo label lo:0        # 临时添加本地路由    ip route add local $vip/32 dev lo        # 永久生效配置(通过rc.local)    echo "ip addr add $vip/32 dev lo label lo:0" | tee -a /etc/rc.local    echo "ip route add local $vip/32 dev lo" | tee -a /etc/rc.local    chmod +x /etc/rc.local    ;;stop)    # 恢复ARP参数    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce    echo "0" > /proc/sys/net/ipv4/conf/default/arp_announce    echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce        # 移除临时VIP    ip addr del $vip/32 dev lo label lo:0        # 移除临时路由    ip route del local $vip/32 dev lo        # 移除rc.local中的永久配置    sed -i "/ip addr add $vip/32 dev lo label lo:0/d" /etc/rc.local    sed -i "/ip route add local $vip/32 dev lo/d" /etc/rc.local    ;;*)    echo "Usage: $0 {start|stop}"    exit 1    ;;esacexit 0

配置解析

  • ARP参数配置:
  • ​arp_announce=2​​:限制ARP通告时使用指定接口的IP
  • ​arp_ignore=1​​:忽略对VIP的ARP请求,避免真实服务器响应ARP广播
  • VIP绑定:将VIP添加到​​lo:0​​虚拟接口,确保节点服务器能响应VIP请求
  • 本地路由:添加到VIP的本地路由,确保响应包正确发送
  • ​rc.local​​配置确保服务器重启后配置依然生效
2.6 集群功能测试
2.6.1 负载均衡验证
# 在调度器上查看LVS规则ipvsadm -ln # 输出示例IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.10.100:80 rr  -> 192.168.10.103:80            Route   1      0          0           -> 192.168.10.104:80            Route   1      0          0          # 查看连接状态ipvsadm -lnc # 输出示例TCP 192.168.10.100:80 192.168.1.10:54321 192.168.10.103:80 FIN_WAIT# 显示客户端请求被分配到不同的真实服务器
2.6.2 高可用性测试
  1. 停止主调度器Keepalived服务,观察VIP是否切换到从调度器
  2. 模拟某一Web节点故障,验证LVS是否自动将其移除
  3. 恢复故障节点,验证是否重新加入集群
  4. 同时访问集群VIP,验证流量是否在正常节点间均衡分配

三、总结

  1. 认证安全强化
  • 生产环境中应使用更安全的认证方式,避免明文密码
  • 定期更换热备组认证密码
  1. 健康检查优化
  • 根据服务特性调整健康检查参数,避免误判
  • 对于复杂服务,可自定义健康检查脚本
  1. 网络配置优化
  • 确保调度器与节点服务器在同一二层网络,以支持DR模式
  • 配置合适的防火墙规则,只开放必要端口
  1. 日志与监控
  • 配置集中式日志服务器,便于故障排查
  • 使用Prometheus等工具监控集群状态与性能指标
  1. 容灾扩展
  • 建议至少部署3台调度器(2主1备),提高可用性
  • 预留足够的节点服务器,支持业务流量突发增长

在实际应用中,需根据业务特点灵活调整配置参数,并建立完善的监控与应急预案,确保集群在各种场景下都能稳定高效运行。

http://www.hskmm.com/?act=detail&tid=25313

相关文章:

  • luogu P1020 [NOIP 1999 提高组] 导弹拦截
  • RabbitMQ 离线安装
  • Nginx 离线安装
  • docker 离线安装
  • uniapp 转回tabbar页面
  • 第十一届中国大学生程序设计竞赛网络预选赛 魔塔
  • JDK 离线安装
  • minio 离线安装
  • HbuilderX 将 h5转成uniapp的一些记录.19127294
  • 银行同业存单产品的筛选方法
  • deepseek 私有部署文档
  • MySQL运维及开发规范
  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小代码的适配性研究——以抖音与快手为例
  • 异步读写mysql依赖pymysql (asyncio/ aiomysql)
  • Linux发行版切换技术全解析
  • 手把手教你用 Docker 部署 Redis
  • 悟空博弈单元(WBUC)与广域统一计算(WAUC)研究:价值共生的技术基石——声明Ai研究
  • 掌握形式验证工具,提升芯片验证效率
  • 长租公寓的生存越来越难了 - 智慧园区
  • Spring Boot中保存前端上传的图片 - 教程
  • P2724 [IOI 1998 / USACO3.1] 联系 Contact 做题笔记
  • 深入解析:Linux运维笔记:服务器感染 netools 病毒案例
  • 设计模式——命令设计模式(行为型) - 详解
  • 港专专利申请量被反超,背后是谁在“偷家”?
  • 版权诉讼下的MiniMax:AI独角兽的上市迷途
  • HTB Eureka靶机渗透实战 - Spring Boot堆转储与Bash算术注入漏洞利用
  • 手机照片太多了存哪里? - 实践
  • 时隔十六年的南京之旅
  • 高贵的北上广深,没有父母托举,90后很难成家
  • 使用AI图像服务规模化视觉内容生产