Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述

本教程旨在助力您搭建一个基于 Keepalived 和 LVS(Linux Virtual Server)的高可用负载均衡环境,同时使其完美适配 Websocket 长连接场景,确保您的 Web 应用能够高效、稳定地运行,从容应对高并发访问,并且在服务器遭遇故障时实现自动无缝切换,为服务的连续性保驾护航。

二、环境准备

  1. 服务器规划
    • 准备至少 3 台服务器,推荐选用 CentOS 7 或以上版本的 Linux 操作系统,且在安装系统时确保已勾选基础网络工具与开发包。本教程中服务器角色及对应示例 IP 地址分配如下:
      • LVS 负载均衡器(MASTER):192.168.1.100
      • LVS 负载均衡器(BACKUP):192.168.1.101
      • Real Server 1:192.168.1.102
      • Real Server 2:192.168.1.103
      • VIP:192.168.1.200
    • 所有服务器需处于同一局域网内,务必保证相互之间能够通过 ping 命令顺畅连通,并且具备访问互联网的能力,用于后续软件安装及更新操作。
  2. 网络配置检查与调整
    • 在每台服务器上,执行 ifconfig 或 ip addr show 命令查看网卡配置信息,确保网卡正常工作且 IP 地址配置准确无误。例如,在 LVS MASTER 服务器上运行 ip addr show eth0(假设网卡名为 eth0),应得到类似如下输出:
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0valid from Sat, 01 Jan 2022 00:00:00 UTC valid until Sun, 01 Jan 2023 00:00:00 UTC
    • 若发现网络配置有误,使用 vi /etc/sysconfig/network-scripts/ifcfg-eth0(以 eth0 为例)编辑网卡配置文件,按需修改 IP 地址、子网掩码、网关等参数,修改完成后执行 systemctl restart network 重启网络服务,使新配置生效。 

三、安装软件

  1. 在 LVS 负载均衡器(MASTER 和 BACKUP)以及 Real Server 上,打开终端,通过 yum 命令安装所需软件:
    • yum install -y ipvsadm keepalived
    • ipvsadm:这是配置 LVS 规则的核心工具,利用它能够灵活地定义虚拟服务器、关联 Real Server 并指定负载均衡算法,是构建 LVS 功能体系的关键组件。
    • keepalived:一方面,它基于 VRRP(Virtual Router Redundancy Protocol)协议提供高可用保障,能将多台物理路由器虚拟化为一个 “虚拟路由器”,使得在主路由器出现故障时,备份路由器可迅速自动接管服务,有效规避单点故障风险;另一方面,它能够与 LVS 紧密协作,实现对 Real Server 的健康监测以及根据服务器状态动态调整负载均衡策略。

四、配置 Keepalived + Lvs(MASTER)节点

  1. 打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf,该文件是 Keepalived 的核心配置枢纽,所有与高可用、负载均衡及相关辅助功能的设定均在此文件内完成。
  2. 进行如下配置:
    global_defs {notification_email {your_email@example.com  # 务必替换为您真实有效的报警邮箱地址,其用途在于接收 Keepalived 运行过程中的异常报警信息,诸如主备切换失败、健康检查持续报错等突发状况。一旦出现问题,Keepalived 会自动向此邮箱发送详细通知邮件,以便系统管理员能够及时察觉并着手处理。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS1  # 路由器标识,在当前搭建的这个高可用环境所构成的 VRRP 域内,MASTER 和 BACKUP 的 router_id 必须不同,此处设定为 LVS1,它用于在 VRRP 协议数据包中标识不同的路由器实例,从而确保节点间能够准确无误地相互识别。
    }vrrp_instance VI_1 {state MASTER  # 明确此节点在 VRRP 实例中扮演“主”的角色,意味着在通常运行状态下,它将掌控对外提供服务的虚拟 IP(VIP),并肩负起主要的负载均衡重任。interface eth0  # 根据服务器实际使用的网卡名称进行修改,该参数指定 Keepalived 用于收发 VRRP 数据包的网卡接口,务必确保与所在服务器的实际网卡保持一致,否则整个系统将无法正常运转。virtual_router_id 51  # 虚拟路由 ID,在同一个 VRRP 域内,MASTER 和 BACKUP 的此项 ID 必须严格一致,它用于唯一标识一组虚拟路由器,取值范围通常为0 - 255,不同的 ID 代表不同的虚拟路由群组。priority 100  # 优先级数值,在主备节点选举过程中起着决定性作用,MASTER 的优先级必须高于 BACKUP,数值越大优先级越高,本示例中设为 100,如此一来,当主节点遭遇故障时,备份节点将依据优先级高低判断是否接管服务。advert_interval 1authentication {type PASSpassword 1111  # 密码,MASTER 和 BACKUP 需确保一致,其主要功能是用于 VRRP 节点间的认证,确保只有授权的节点才能参与虚拟路由器的运作,防止非法节点接入。}virtual_ipaddress {192.168.1.200/24  # 虚拟 IP(VIP),依据实际网络网段进行合理设置,这是面向外部客户端提供服务的统一 IP 地址,客户端将通过访问此 IP 来获取相应服务。在主节点正常运行期间,此 VIP 会绑定在主节点的网卡之上,一旦主节点发生故障,VIP 将自动无缝切换至备份节点的网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上述设置紧密对应,在此处定义了一个虚拟服务器,明确了对外服务的 IP 地址与端口号,后续的 Real Server 将挂载在此虚拟服务器之下,依照负载均衡策略接收并处理分发而来的请求。lb_algo wrr  # 加权轮询调度算法,您可根据实际需求进行灵活切换,如选用 rr(轮询)、sh(源地址散列)等其他算法。wrr 算法的优势在于能够依据 Real Server 的权重值来合理分配请求,不同权重的 Real Server 获取请求的机会不尽相同,权重越大则机会越多,相较于简单的轮询算法,它能更为精准地适配不同性能的 Real Server,进而实现更为优化、合理的负载分配效果。lb_kind DR  # 工作模式,DR(Direct Routing)模式在性能表现上较为出色,当然您也可根据实际情况选择 NAT 等其他模式。在 DR 模式下,客户端请求的数据包将直接发送至 Real Server,而响应数据包同样会直接返回客户端,LVS 负载均衡器在此过程中仅负责高效处理请求的分发与调度工作,极大地减轻了自身负担,显著提升了整体系统性能。不过,采用 DR 模式需要对 Real Server 进行一系列特殊配置(如设置 VIP 等操作),后续步骤会详细阐述。persistence_timeout 3600  # 持久连接超时时间,单位为秒,考虑到 Websocket 长连接的特性,特意将此值设置得较长,您也可根据实际业务场景进行适当调整。该参数决定了源自同一源 IP 的请求在多长时间内会被持续转发至同一个 Real Server,对于 Websocket 长连接而言,充足的超时时间能够确保在连接存续期间,客户端后续发出的所有请求都能被精准导向最初建立连接的 Real Server,有效避免因负载均衡调度而意外导致连接中断的情况发生。persistence_granularity SOURCE_IP  # 以源 IP 实现持久连接,这一设置能够切实确保同一客户端的请求始终被定向到同一 Real Server。其原理是基于客户端的源 IP 进行哈希运算,只要源 IP 保持不变,后续所有请求都将被稳定送达最初建立连接的那台 Real Server,这对于维护 Websocket 长连接的稳定性起着举足轻重的作用。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:vi /etc/sysctl.conf
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时主节点会依据新配置尝试绑定虚拟 IP(VIP),并基于设定好的调度算法、健康检查机制等对 Real Server 进行负载均衡调度。

五、配置 Keepalived + Lvs(BACKUP)节点

  1. 同样打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf
  2. 修改如下内容:
    global_defs {notification_email {your_email@example.com  # 替换为真实的报警邮箱地址,作用与 MASTER 节点配置相同。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS2  # 更改为与 MASTER 不同的标识,此处设为 LVS2,用于清晰区分主备节点。
    }vrrp_instance VI_1 {state BACKUP  # 表明此节点在 VRRP 实例中的角色为“备份”,正常运行时不承担对外服务职责,处于待命状态,一旦主节点出现故障,将立即接管服务。interface eth0  # 根据实际网卡名修改,需与 MASTER 节点对应网卡保持一致。virtual_router_id 51  # 与 MASTER 一致,同属一个虚拟路由组。priority 99  # 低于 MASTER 的优先级,本示例中设为 99,当主节点发生故障且此备份节点在剩余备份节点中优先级最高时,将顺利接管主节点工作,成为新的主节点。advert_interval 1authentication {type PASSpassword 1111  # 与 MASTER 一致,用于节点间认证。}virtual_ipaddress {192.168.1.200/24  # 与 MASTER 一致的 VIP,当主节点故障时,此 VIP 将自动切换到该备份节点网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上面设置对应,配置与 MASTER 节点类似,确保备份节点也能准确无误地对 Real Server 进行负载均衡调度。lb_algo wrr  # 加权轮询调度算法,可按需更换,如 rr(轮询)、sh(源地址散列)等。lb_kind DR  # 工作模式,DR 模式性能较好,也可按需选 NAT 等。persistence_timeout 3600  # 持久连接超时时间,单位秒,为适应 Websocket 长连接设长些,可调整。persistence_granularity SOURCE_IP  # 以源 IP 实现持久,确保同一客户端请求到同一 Real Server。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
    • 执行命令使配置生效:sysctl -p
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时备份节点会依据新配置进入监听状态,时刻准备在主节点出现故障时接管服务,保障整个高可用负载均衡系统的正常运作。

六、配置 Real Server

  1. 在 Real Server(以 192.168.1.102 和 192.168.1.103 为例)上:
    • 编辑 /etc/sysctl.conf 文件:
# 防止 ARP 冲突,调整 ARP 相关内核参数
net.ipv4.arp_ignore = 1
net.ipv4.arp_announce = 2
  • net.ipv4.arp_ignore = 1:当设置为 1 时,若接收到 ARP 请求,且目标 IP 为本地配置的 VIP,此时仅当请求的源 IP 与本机某一网卡的 IP 处于同一网段时,才会响应 ARP 请求,这样能够有效规避不必要的 ARP 响应,最大程度防止 ARP 冲突的发生。
  • net.ipv4.arp_announce = 2:设置为 2 时,当本机向外发送 ARP 宣告时,将始终使用本机的真实 IP 地址,而非 VIP,以此确保 ARP 信息的准确性与一致性,避免网络中的其他设备出现混淆情况。
  • 执行命令使配置生效:sysctl -p
  • 编写设置 VIP 的脚本,如 vi /etc/init.d/lvsrs,内容如下:
#!/bin/bash
VIP=192.168.1.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 256.256.256.255 up
/sbin/route add -host $VIP dev lo:0
  • 该脚本的目的在于在 Real Server 的本地环回接口(0) 上设置 VIP。在 LVS 的 DR 模式下,Real Server 需要能够精准识别并妥善处理发往 VIP 的请求,将 VIP 绑定至本地环回接口,既便于统一管理,又能有效避免与真实网卡 IP 发生冲突。首先明确定义 VIP 的值,随后通过 ifconfig 命令将 VIP 绑定到 lo:0 接口,并设置相应的广播地址和子网掩码,最后利用 route 命令添加一条指向 VIP 的的路由,确保发往 VIP 的数据包能够在本地得到有效处理。
  • 赋予脚本执行权限:chmod +x /etc/init.d/lvsrs
  • 启动脚本:/etc/init.d/lvsrs start

七、测试

在客户端上

  • 使用 ping 命令测试能否连通虚拟 IP(VIP),例如在一台与搭建环境处于同一局域网且能正常访问网络的客户端机器上执行:
ping 192.168.1.200
  • 如果能收到来自 VIP 的正常响应(不断显示类似 Reply from 192.168.1.200: bytes=32 time<1ms TTL=64 的信息),则说明客户端到 VIP 的网络链路是通畅的,初步表明负载均衡前端配置没有问题。

在 LVS 负载均衡器(MASTER 和 BACKUP)上

  • 使用 ping 命令分别测试能否连通各个 Real Server 的 IP 地址,例如在 MASTER 节点上执行:
ping 192.168.1.102
ping 192.168.1.103
  • 若都能正常收到回应,表明负载均衡器与后端 Real Server 之间的网络连接正常,不存在物理层面的网络故障,这是后续负载均衡功能能正常发挥的基础条件。

验证虚拟 IP(VIP)绑定情况

  1. 在 LVS 负载均衡器(MASTER)上
    • 执行 ip addr show 命令查看网卡信息,检查 VIP 是否正确绑定在 MASTER 节点的网卡上,正常情况下应该能看到类似如下输出(假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 其中 inet 192.168.1.200/24 这一行就表示 VIP 已成功绑定在该网卡上,这意味着 MASTER 节点已经做好准备利用此 VIP 接收客户端请求并进行负载均衡处理。

  1. 手动停止 MASTER 节点的 Keepalived 服务(仅用于测试 VIP 切换)
    • 在 MASTER 节点上执行 systemctl stop keepalived 命令。
    • 接着迅速在 LVS 负载均衡器(BACKUP)上再次执行 ip addr show 命令查看网卡信息,此时应该能看到 VIP 已经切换绑定到 BACKUP 节点的网卡上,类似如下输出(同样假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 这就验证了 Keepalived 的高可用切换机制生效,VIP 能够在主节点故障时自动迁移到备份节点,保障服务持续可用。完成测试后,可以在 MASTER 节点上再次执行 systemctl start keepalived 恢复正常状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501880.html

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

相关文章

ARM 汇编基础总结

GNU 汇编语法 编写汇编的过程中&#xff0c;其指令、寄存器名等可以全部使用大写&#xff0c;也可以全部使用小写&#xff0c;但是不能大小写混用。 1. 汇编语句的格式 label: instruction comment label即标号&#xff0c;表示地址位置&#xff0c;有些指令前面可能会有标…

米哈游可切换角色背景动态壁纸

米哈游可切换角色背景动态壁纸 0. 视频 B站演示: 米哈游可切换角色背景动态壁纸-wallpaper 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列 (衍生 wallpaper壁纸引擎 用)网站: 网页版在线预览 (没有搞大小适配, 建议横屏看; 这个不能切角色, 只能在wallpaper中切)仓库: GitHub…

Mac iTerm2集成DeepSeek AI

1. 去deepseek官网申请api key&#xff0c;DeepSeek 2. 安装iTerm2 AI Plugin插件&#xff0c;https://iterm2.com/ai-plugin.html&#xff0c;插件解压后直接放到和iTerms相同的位置&#xff0c;默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…

HTML——66.单选框

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单选框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单选框:&#xff08;如所住省会&#xff0c;性别选择&…

深入Android架构(从线程到AIDL)_10 主线程(UI 线程)的角色

目录 4、 细说主线程(UI线程)的角色 近程通信 远程通信 4、 细说主线程(UI线程)的角色 近程通信 在Android里&#xff0c;无论组件在那一个进程里执行&#xff0c;于预设情形下&#xff0c;他们都是由该进程里的主线程来负责执行之。例如下述的范例&#xff0c;由一个Acti…

掌握RabbitMQ:全面知识点汇总与实践指南

前言 RabbitMQ 是基于 AMQP 高级消息队列协议的消息队列技术。 特点&#xff1a;它通过发布/订阅模型&#xff0c;实现了服务间的高度解耦。因为消费者不需要确保提供者的存在。 作用&#xff1a;服务间异步通信&#xff1b;顺序消费&#xff1b;定时任务&#xff1b;请求削…

渗透测试-非寻常漏洞案例

声明 本文章所分享内容仅用于网络安全技术讨论&#xff0c;切勿用于违法途径&#xff0c;所有渗透都需获取授权&#xff0c;违者后果自行承担&#xff0c;与本号及作者无关&#xff0c;请谨记守法. 此文章不允许未经授权转发至除先知社区以外的其它平台&#xff01;&#xff0…

前端-计算机网络篇

一.网络分类 1.按照网络的作用范围进行分类 &#xff08;1&#xff09;广域网WAN(Wide Area Network) 广域网的作用范围通常为几十到几千公里,因而有时也称为远程网&#xff08;long haul network&#xff09;。广域网是互联网的核心部分&#xff0c;其任务是长距离运送主机…

开发培训-慧集通(iPaaS)集成平台脚本开发Groovy基础培训视频

‌Groovy‌是一种基于Java虚拟机&#xff08;JVM&#xff09;的敏捷开发语言&#xff0c;结合了Python、Ruby和Smalltalk的许多强大特性。它旨在提高开发者的生产力&#xff0c;通过简洁、熟悉且易于学习的语法&#xff0c;Groovy能够与Java代码无缝集成&#xff0c;并提供强大…

腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎

在当今数字化时代的汹涌浪潮中&#xff0c;数据已跃升为企业发展的关键要素&#xff0c;其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性&#xff0c;宛如一颗璀璨的明星&#xff0c;在交通、…

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…

消息中间件类型都有哪些

在消息中间件的专业术语中&#xff0c;我们可以根据其特性和使用场景将其划分为几种主要的类型。这些类型不仅反映了它们各自的技术特点&#xff0c;还决定了它们在不同应用场景下的适用性。 1. 点对点&#xff08;Point-to-Point&#xff09;消息中间件&#xff1a; • 这类中…

服务器迁移中心——“工作组迁移”使用指南

简介 服务器迁移中心&#xff08;Server Migration Center&#xff0c;简称SMC&#xff09;是阿里云提供给您的迁移平台。专注于提供能力普惠、体验一致、效率至上的迁移服务&#xff0c;满足您在阿里云的迁移需求。 工作组迁移是SMC的一项功能&#xff0c;提供标准化迁移流程…

C#调用Lua

目录 xLua导入 打包工具导入 单例基类导入与AB包管理器导入 Lua解析器 文件加载与重定向 Lua解析器管理器 全局变量获取 全局函数获取 对于无参数无返回值 对于有参数有返回值 对于多返回值 对于变长参数 完整代码 List与Dictionary映射Table 类映射Table 接口映射…

Wend看源码-Java-fork/Join并行执行任务框架学习

摘要 本文主要介绍了Java的Fork/Join并行任务执行框架&#xff0c;详细阐述了其工作原理和核心构件&#xff0c;全面解读了Fork/Join框架的运作机制&#xff0c;旨在为学习这一框架的开发者提供一份详实且实用的参考资料。 Java的Fork/Join框架是Java 7引入的一个用于并行执行任…

C++ 中 Unicode 字符串的宽度

首先&#xff0c;什么是 Unicode&#xff1f; Unicode 实际上是一个统一的文字编码标准&#xff0c;它出现目的是为了解决不同计算机之间字符编码不同而导致的灾难性不兼容问题。 Unicode 字符集与 Unicode 编码是两种不同的概念。Unicode 字符集实际是对进入标准的所有文字用…

Python爬虫 - 豆瓣图书数据爬取、处理与存储

文章目录 前言一、使用版本二、需求分析1. 分析要爬取的内容1.1 分析要爬取的单个图书信息1.2 爬取步骤1.2.1 爬取豆瓣图书标签分类页面1.2.2 爬取分类页面1.2.3 爬取单个图书页面 1.3 内容所在的标签定位 2. 数据用途2.1 基础分析2.2 高级分析 3. 应对反爬机制的策略3.1 使用 …

MIPI_DPU 综合(DPU+MIPI+Demosaic+VDMA 通路)

目录 1. 简介 2. 创建 Platform 2.1 Block Design 2.1.1 DPU PFM Lite 2.1.2 DPU prj 2.1.3 DPU MIPI Platform 2.2 pin 约束 2.2.1 GPIO 约束 2.2.2 IIC 约束 2.1.3 DPHY 约束 3. 报错总结 3.1 AXI_M 必须顺序引用 3.2 DPU 地址分配错误 4. Design Example 4.…

Spring系列一:spring的安装与使用

文章目录 ?? 官方资料 ??Spring5下载??文档介绍 ??Spring5 ??内容介绍??重要概念 ??快速入门 ??Spring操作演示??类加载路径??Spring容器结构剖析??Debug配置 ??实现简单基于XML配置程序 ??Spring原生容器结构梳理??作业布置??Spring课堂练习 …

AutoSar架构学习笔记

1.AUTOSAR&#xff08;Automotive Open System Architecture&#xff0c;汽车开放系统架构&#xff09;是一个针对汽车行业的软件架构标准&#xff0c;旨在提升汽车电子系统的模块化、可扩展性、可重用性和互操作性。AUTOSAR的目标是为汽车电子控制单元&#xff08;ECU&#xf…