LVS+Keepalived高可用群集 - 指南

news/2025/10/6 9:56:57/文章来源:https://www.cnblogs.com/ljbguanli/p/19127326

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.mzph.cn/news/929182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

luogu P1020 [NOIP 1999 提高组] 导弹拦截

题目大意 共有两问求最长不升子序列 求最少能分为几个不升子序列Sol 原数据是 \(1e4\) 的,所以先考虑 \(O(n^2)\) 做法。第一问 容易发现,这跟我们求最长不降子序列是一样的 所以我们直接设状态为 \(dp_i\) 表示前 \…

网站建设方案后期服务制作网站的商家

作者:Greg Cipolaro,NYDIG 全球研究主管 编译:WEEX Exchange 几只重要的 ETF 申请将于 10 月中旬迎来审核窗口,本文通过观察近期期权市场的动态,以研究交易者对这些关键 ETF 日期的仓位态度;门头沟&#xf…

深圳住房建设局官方网站广州建网站要多少钱

sed https://mp.weixin.qq.com/s/PxaesXU7nkmYNCxIQ1ZHfw sed是一个强大的流式文本编辑器,它可以在读取文本时进行修改并输出,支持各种复杂的字符串替换、内容删除、行插入等操作。 sed s/old_string/new_string/g test.txt > new_test.txts是sed命令…

网站后台 设计生活服务网站开发

work下面新建文件夹 commit上传 上传 组员update 出现文件夹 新建文件夹 右键上传 点击小乌龟show-log 记录问题 版本操作 再次输入 bbb 先更新 更新之后再次上传 添加了bbb 单击右键 回滚

零基础学网站开发电子商务网站建设规划的论文

1:生成svg图标 登录阿里云官网 1.1 创建项目组 1.2 从阿里云网站上面获取喜欢的图标加入到已有的项目组 1.3 如果团队有自己的设计师,也可以让设计师上传自己的svg图标到阿里云指定的项目组; 使用的时候,把 资源包下载到本地项…

品牌网站建设推荐大蝌蚪外贸搜索引擎

有效单词缩写 字符串可以用 缩写 进行表示,缩写 的方法是将任意数量的 不相邻 的子字符串替换为相应子串的长度。例如,字符串 “substitution” 可以缩写为(不止这几种方法): “s10n” (“s ubstitutio n”) “sub4…

RabbitMQ 离线安装

Erlang安装 解压 tar -zxvf otp_src_22.1.tar.gz 安装配件 yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf yum install unixODBC unixODBC-devel 编译 cd /usr/local/erlang/erlanr22.1 ./c…

Nginx 离线安装

要在CentOS系统上安装Nginx的.tar.gz源码包,请按照以下步骤操作: 准备工作 确保您的系统更新至最新,并安装必要的依赖工具。 sudo yum update -y sudo yum install -y gcc pcre-devel zlib-devel openssl-devel 下载…

docker 离线安装

https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/ docker安装包上传 docker-24.0.0.tgz上传至/usr/local tar -zxvf docker-24.0.0.tgz cp docker/* /usr/bin/ docker安装包安装 配置docker服务 vim…

uniapp 转回tabbar页面

const handleBack = () => { uni.navigateTo({ url: /pages/index/index // 请根据实际页面路径调整 }) } 报错:navigateTo:fail can not navigateTo a tabbar page 改成: const handleBack = () => { uni.navig…

使用Gost替换FRP实现内网穿透为BT下载开放端口

使用Gost替换FRP实现内网穿透为BT下载开放端口2025.08.25 背景信息 在本教程将使用gost替代frp来为bt客户端提供穿透 在之前的教程中我们已经实现了通过stun穿透运营商NAT 为BT客户端开放端口 链接 但是此方案只使用于…

平面设计网站导航上海发布首页

嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对海防的越来越重视,对CAN的需求也会越来越大。这个暑假,通过参加苏州社会实践,去某船舶电气公司实习几周,也…

第十一届中国大学生程序设计竞赛网络预选赛 魔塔

这个战斗的情况非常的不正常,如果怪物不能破防还会给你加血。 于是我们可以和怪物战斗 \(\lceil\frac{h_i}{X-d_i}\rceil\) 回合,假设现在的防御力为 \(Y\),那么收益就是: \[\lfloor\frac{h_i}{X-d_i}\rceil\times…

JDK 离线安装

检查当前系统中是否已安装JDK [root@localhost ~]# java -version openjdk version "1.8.0_242" OpenJDK Runtime Environment (build 1.8.0_242-b08) OpenJDK 64-Bit Server VM (build 25.242-b08, mixed m…

minio 离线安装

在 CentOS 系统上离线安装 MinIO 的步骤如下: https://www.minio.org.cn/download.shtml#/linux准备工作 1.1 下载 MinIO 二进制文件 MinIO 是一个单文件的二进制程序,因此可以直接下载并运行。● 在有互联网连接的机…

HbuilderX 将 h5转成uniapp的一些记录.19127294

在将h5转成uniapp的过程中, 遇到了一些问题, 这里记录一下:1.转成uniapp后,开始打包,放到手机上安装app,有些功能竟然无法启动,顿时有些茫然, 明明在电脑模拟器上运行都没有问题. 2.于是为了探明原因,安装了手机基座,可…

银行同业存单产品的筛选方法

银行同业存单产品的筛选方法我们上一篇文章讲了《银行同业存单的信用等级》,那么这篇文章就介绍一下选择一个合适的同业存单产品的理论步骤。因为考察的方面会比较多,所以,即使压缩了篇幅也还是会比较长。我们普通投…

时间轴网站设计建设摩托车官网商城踏板

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)深度学习 (二)Tensorflo…

好的网站布局网络平面广告设计

对mysql 查询实战-变量方式-题目,进行一个解答。(先看题,先做,再看解答) 1、查询表中⾄少连续三次的数字 1,处理思路 要计算连续出现的数字,加个前置变量,记录上一个的值&#xff0c…

deepseek 私有部署文档

一、基于容器创建 进入节点后先启动容器,在容器中进行后续的操作(只需要执行一次就好,只要容器存在,下次直接进入就行) docker run -it --device=/dev/dri --device=/dev/htcd --group-add video --name openwebu…