MySQL 主从复制 + LVS + Keepalived 高可用集群综合实训
一、一主一从
1. 主库(Master)
# 开binlog(配置文件加)
server-id=1
log-bin=mysql-bin
# 创建账号
CREATE USER repl@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
# 查看位置
SHOW MASTER STATUS;
2. 从库(Slave)
# 配置文件
server-id=2
# 绑定主库
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=上面查到的数字;
# 启动
START SLAVE;
# 检查成功
SHOW SLAVE STATUS\G
二、一主多从(再加一个从库)
再开一个 MySQL,server-id=3 执行一模一样的从库命令即可。
三、级联复制(主 → 从 1 → 从 2)
1. 中间从库(从 1)加配置
server-id=2
log-bin=mysql-bin
log_slave_updates=1
2. 最下级从库(从 2)
绑定从 1为主库:
CHANGE MASTER TO MASTER_HOST='从1IP';
START SLAVE;
一、LVS 概念
1.1 定义
LVS(Linux Virtual Server)是 Linux 虚拟服务器的简称,是由章文嵩博士于 1998 年 5 月发起的开源软件项目,也是中国国内最早出现的自由软件项目之一。如今 LVS 已经成为 Linux 内核标准的一部分,集成在内核的 Netfilter 框架中。
简单来说,LVS 是一个负载均衡器(Director),它本身不直接处理用户请求,而是将请求按照设定的调度策略转发至后端真正的服务器(Real Server)上。LVS 工作在传输层(TCP/UDP,即 OSI 模型的第 4 层),仅解析传输层头部信息,不需要像 Nginx 那样进入应用层解析 HTTP 协议,因此具有非常高的转发效率。
1.2 核心架构
LVS 的核心组件是 IPVS,它是集成在 Linux 内核中的框架,负责在内核态完成数据包的接收、处理和转发。用户可以通过用户空间的 ipvsadm 工具来定义和管理 IPVS 的调度规则。
LVS 集群从逻辑上可以分为三层:
-
负载调度器(Director):接收客户端请求的入口节点,运行 IPVS 服务。
-
真实服务器池(Real Server):实际处理请求的应用服务器集群。
-
共享存储(可选):用于确保 RS 之间的数据一致性。
1.3 核心优势
LVS 相比 Nginx、HAProxy 等应用层负载均衡器具有三大核心优势:
-
性能优势:工作在内核网络层,无需解析应用层协议,吞吐量可达 10Gbps+ 级别,单节点可支撑百万级并发连接。
-
透明性:后端 Real Server 可部署任意操作系统,无需安装特殊软件。
-
扩展性:支持万级并发连接,集群规模理论上无上限。
1.4 典型应用场景
LVS 广泛应用于以下场景:
-
电商大促流量承载
-
CDN 边缘节点调度
-
金融核心系统高可用架构
根据案例数据,采用 LVS 集群后系统可用性可以从 99.9% 提升至 99.995%,故障切换时间可缩短至 50ms 以内。
二、LVS 工作原理
2.1 三层核心架构
LVS 的工作基于虚拟服务器(VS)的抽象,其核心交互流程如下:
-
客户端(Client)发起请求,目标 IP 是 VIP(Virtual IP)。
-
负载调度器(Director)接收请求,根据调度算法选择一台后端真实服务器(RS)。
-
Director 将请求报文转发给选中的 RS。
-
RS 处理请求,并根据不同的工作模式决定响应的路径(直接返回客户端或经过 Director 转发)。
整个流程涉及的关键术语:
-
VS:Virtual Server,负载调度器
-
RS:Real Server,真实服务器
-
CIP:Client IP,客户端 IP
-
VIP:Virtual IP,VS 对外暴露的虚拟 IP
-
DIP:Director IP,调度器后端通信 IP
-
RIP:Real Server IP,后端真实 IP
2.2 核心调度机制
LVS 的调度决策由 IPVS 内核模块执行。当请求到达 Director 时,IPVS 根据预先定义的调度算法(如轮询、最少连接等)从 RS 池中选出一台服务器,然后将报文进行相应的封装或改写后转发出去。
注意:LVS 本身不具备健康检查功能,也无法自动检测 RS 是否存活。在实际生产环境中,LVS 通常与 Keepalived 结合使用,利用 Keepalived 实现 RS 健康检测和 LVS 节点自身的高可用故障切换。
三、LVS 集群模式特性
LVS 主要提供三种核心工作模式:NAT、DR 和 TUN,此外还有阿里贡献的 FULLNAT 扩展模式。
3.1 NAT 模式(Network Address Translation)
工作原理:
LVS 作为网关,通过修改请求报文的目标 IP 地址(VIP → RIP)进行转发。RS 处理完请求后,将响应报文先发送回 LVS,LVS 再将源 IP 从 RIP 改回 VIP 后发回客户端。RIP 和 DIP 通常应在同一 IP 网络中。
核心特性与要求:
-
请求和响应报文都必须经过 Director(双向流量)
-
RS 的默认网关必须指向 LVS 的 DIP
-
支持端口映射,可以修改请求报文的目标端口
-
RS 可以是其他操作系统(不限于 Linux)
-
适合内网环境,RS 可位于私有网络
优缺点:
-
优点:网络拓扑要求较低,调度器与后端服务器可部署于不同物理网络,配置简单。
-
局限:调度器成为性能瓶颈,需处理双向流量。在大规模高并发场景下,响应报文占用的带宽资源会使 LVS 迅速过载。可调度的 RS 数量也有限,难以大规模横向扩展。
3.2 DR 模式(Direct Routing)
工作原理:
LVS 默认模式,也是效率最高的一种。LVS 通过修改请求报文的 MAC 地址(将目标 MAC 改为选中的 RS 的 MAC),在局域网内直接转发,不修改 IP 头部。RS 处理请求后,将响应报文直接返回给客户端,不经过 LVS。这种模式下,Director 和 RS 都需配置 VIP。
核心特性与要求:
-
只处理请求报文,响应报文由 RS 直连客户端,极大减轻 LVS 压力
-
Director 和 RS 必须在同一物理网络(同一 VLAN),通过 MAC 地址寻址
-
不支持端口映射
-
RS 需要进行 ARP 抑制配置,防止 VIP 被其他设备通过 ARP 协议意外采集
优缺点:
-
优点:吞吐量最高,性能最优,可支撑 120Gbps 级别的带宽流量。非常适合视频流媒体等对带宽和延迟要求极高的场景。
-
局限:LVS 与 RS 必须在同一个 VLAN 下,网络拓扑限制严格,部署灵活性较低。
3.3 TUN 模式(IP Tunneling)
工作原理:
LVS 不修改原请求报文的 IP 头部,而是在原报文之外再封装一个新的 IP 头部(源 IP 为 DIP,目标 IP 为 RIP),形成一个 IPIP 隧道,将报文发往 RS。RS 收到后先解封获得原报文,若发现 VIP 配置在本地隧道设备上,则处理请求并将响应直接返回给客户端。
核心特性与要求:
-
只处理请求报文,响应报文由 RS 直连客户端
-
具备跨网段能力,可以通过公网跨越不同机房或地域
-
RS 的操作系统必须支持 IPIP 隧道功能(需加载 ipip 模块)
-
不支持端口映射
-
由于 IP 封装,单个请求报文会增加 20 字节左右的 IP 头部开销
优缺点:
-
优点:解决了 DR 模式不能跨网段的问题,甚至可以跨公网部署。某跨国企业利用 TUN 模式构建全球负载均衡网络,延迟降低 40%。
-
局限:性能比 DR 模式略低,配置相对复杂(需要每台 RS 创建隧道设备)。
四、三种模式对比总结
| 对比维度 | NAT 模式 | DR 模式 | TUN 模式 |
|---|---|---|---|
| 性能 | 中等(15%+ 开销) | 最高(<2% 开销) | 较高 |
| 响应路径 | 双向经过 LVS | 请求经 LVS,响应直连 | 请求经 LVS,响应直连 |
| 网络要求 | RS 可在不同物理网络 | 必须在同一 VLAN | 可跨网段,甚至跨公网 |
| 是否支持端口映射 | 是 | 否 | 否 |
| RS 配置要求 | 网关指向 LVS | 需绑定 VIP + ARP 抑制 | 需支持 IPIP 隧道 |
| 适用场景 | 内网环境,RS 无公网 IP | 高并发,同网段场景 | 异地机房,分布式部署 |
性能数据参考:DR 模式在 10G 网络环境下实测延迟低于 0.1ms,吞吐量损失小于 2%;NAT 模式的开销约为 15% 以上。
五、常用调度算法
LVS 提供了多种调度算法,可以分为静态和动态两大类。
5.1 静态调度算法(基于预设规则)
| 算法 | 原理 | 适用场景 |
|---|---|---|
| RR(轮询) | 按顺序依次将请求分配给每台服务器,循环往复 | 服务器性能一致,短连接服务 |
| WRR(加权轮询) | 为每台服务器分配权重,权重高的分配更多请求 | 服务器性能差异较大(异构集群) |
| SH(源地址哈希) | 根据源 IP 进行哈希计算,同一客户端的请求始终发往同一 RS | 需要会话保持的场景 |
| DH(目标地址哈希) | 根据目标 IP 进行哈希计算 | 缓存服务器集群 |
5.2 动态调度算法(基于实时状态)
| 算法 | 原理 | 适用场景 |
|---|---|---|
| LC(最少连接) | 将新请求分配至当前活动连接数最少的服务器 | 长连接服务,请求处理时间不均的场景 |
| WLC(加权最少连接) | 结合服务器权重和当前连接数,选择权重较高且连接数较少的 RS | 性能差异大的异构集群,长连接服务 |
| SED(最短期望延迟) | 根据服务器的响应时间估计,选择期望延迟最短的服务器 | 延迟敏感的应用 |
| NQ(永不排队) | SED 的改进版,在有空闲服务器时优先分配 | 请求突发的场景 |
算法选型建议:长连接服务优先选择 WLC 或 SH;短连接服务使用 RR 或 WRR 性能更优;异构集群必须使用加权算法。
LVS 调度算法与原理总结
LVS(Linux Virtual Server)通过内核模块 IPVS 实现四层负载均衡。其核心调度机制是:当客户端请求到达 Director 时,IPVS 根据预先设定的 调度算法,从后端 Real Server 池中选出一台合适的服务器,然后将报文按工作模式(NAT/DR/TUN)进行转发。
调度算法分为两大类:静态算法(仅依据预设规则,不关心后端实时负载)和 动态算法(实时监测后端连接数或负载情况,动态决策)。
一、静态调度算法
静态算法只根据请求本身或预设权重进行调度,不感知后端服务器的实时压力。
1. 轮询(Round Robin, RR)
-
原理:将请求按顺序循环分配给后端服务器。假设有 n 台 RS,第 1 个请求给 RS1,第 2 个给 RS2,……,第 n+1 个再回到 RS1。
-
特点:实现简单,无状态;假设所有服务器性能完全一致。
-
适用:短连接、请求处理时间均匀、服务器性能相同的场景。
2. 加权轮询(Weighted Round Robin, WRR)
-
原理:为每台 RS 赋予一个权重值(weight),权重越高分配的请求越多。调度器按权重比例循环分配。
-
特点:能处理异构服务器(不同 CPU/内存/带宽)。
-
适用:服务器性能差异明显的集群。
3. 源地址哈希(Source Hashing, SH)
-
原理:根据请求的源 IP 地址计算哈希值,将同一源 IP 的请求始终分配给同一台 RS。
-
特点:天然实现会话保持(session sticky),无需在应用层维护 session。
-
适用:需要持久连接或有状态服务(如购物车、FTP)。
4. 目标地址哈希(Destination Hashing, DH)
-
原理:根据请求的目标 IP(VIP)计算哈希值,将发往同一目标 IP 的请求分配给同一台 RS。
-
特点:主要用于缓存服务器集群,保证对同一资源的请求落到同一缓存节点。
-
适用:反向代理缓存、CDN 边缘节点。
二、动态调度算法
动态算法会收集后端服务器的实时状态(如当前连接数、响应时间等)来做出决策。
1. 最少连接(Least Connections, LC)
-
原理:将新请求分配给当前 活动连接数 最少的 RS。计算公式:活动连接数(active)。
-
特点:能自动应对不同请求处理时长差异大的情况(长连接服务效果尤其明显)。
-
适用:长连接应用(如数据库连接、WebSocket)、请求处理时间不均的 Web 服务。
2. 加权最少连接(Weighted Least Connections, WLC)
-
原理:在 LC 基础上引入权重,计算公式为:
(活动连接数 + 1) / 权重,选择计算结果最小的 RS。 -
特点:兼顾服务器性能差异和实时负载,是生产环境最常用的动态算法。
-
适用:异构集群、长连接混合短连接的场景。
3. 最短期望延迟(Shortest Expected Delay, SED)
-
原理:基于 WLC 改进,计算公式:
(活动连接数 + 1) / 权重的变形,选择期望延迟最小的 RS。具体实现中,SED 对权重高的服务器更“激进”。 -
特点:相比 WLC,更倾向于将请求分配给处理能力强的服务器。
-
适用:对响应延迟敏感的业务。
4. 永不排队(Never Queue, NQ)
-
原理:SED 的改进版。当集群中有空闲服务器(连接数为 0)时,直接分配过去,不执行 SED 计算。
-
特点:确保没有请求在队列中等待,进一步提升响应速度。
-
适用:请求突发、要求快速响应的系统。
5. 基于局部性的最少连接(Locality-Based Least Connections, LBLC)
-
原理:针对目标 IP 负载均衡的增强版。将同一目标 IP 的请求尽量分配给之前使用过的 RS;如果该 RS 过载(连接数超过阈值),则选择其他最少连接的 RS。
-
适用:缓存集群,提高缓存命中率。
6. 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication, LBLCR)
-
原理:LBLC 的扩展,维护一个“热门”目标 IP 到多个 RS 的映射集。当请求到达时,从映射集中选择最少连接的 RS;如果映射集内所有 RS 都过载,则从全局选择一台 RS 加入映射集。
-
适用:高负载、高命中率要求的缓存集群(如 Web 代理缓存)。
三、算法对比与选型建议
| 算法 | 类别 | 是否需要权重 | 会话保持 | 适用场景 |
|---|---|---|---|---|
| RR | 静态 | 否 | 无 | 同构服务器,短连接 |
| WRR | 静态 | 是 | 无 | 异构服务器,短连接 |
| SH | 静态 | 否 | 有(源 IP) | 需要粘性会话 |
| LC | 动态 | 否 | 无 | 长连接,请求处理时间差异大 |
| WLC | 动态 | 是 | 无 | 生产环境首选,通用性最强 |
| SED/NQ | 动态 | 是 | 无 | 延迟敏感,请求突发 |
| LBLC/LBLCR | 动态 | 是 | 无 | 缓存集群,提高命中率 |
核心原理总结:
-
静态算法执行速度快,不消耗额外计算,但无法适应负载波动。
-
动态算法通过监控后端连接数或负载信息,能更均衡地分发请求,但需要一定开销(如维护连接表)。
-
LVS 默认使用 WLC(加权最少连接),因为它在大多数场景下表现均衡。
-
如果业务需要会话保持且不想引入外部 session 共享,可选用 SH 算法,但需注意该算法可能导致负载不均(某些源 IP 请求量大)。
一、LVS 启动脚本 / 配置文件(完整版带注释)
这是 LVS + 保持心跳 + 自动转发 的标准配置,最常用。
#!/bin/bash
# LVS 负载均衡配置脚本
# 作用:配置虚拟IP、调度算法、后端真实服务器、转发规则
# 1. 定义变量(方便修改)
VIP=192.168.1.100 # 虚拟IP(客户端访问的IP)
RIP1=192.168.1.101 # 后端真实服务器1 IP
RIP2=192.168.1.102 # 后端真实服务器2 IP
NETMASK=255.255.255.0 # 子网掩码
PORT=80 # 对外提供服务的端口(web=80)
# 2. 清空原有规则(防止冲突)
ipvsadm -C
# 3. 添加虚拟服务
# -A:添加虚拟服务
# -t:TCP协议
# -s:指定调度算法(rr=轮询 wrr=加权轮询 wlc=加权最少连接)
ipvsadm -A -t $VIP:$PORT -s wrr
# 4. 添加后端真实服务器
# -a:添加真实服务器
# -t:TCP协议
# -r:指定真实服务器IP
# -m:使用NAT模式;-g:DR模式;-i:TUN模式
# -w:设置权重(数字越大,处理请求越多)
ipvsadm -a -t $VIP:$PORT -r $RIP1 -m -w 1
ipvsadm -a -t $VIP:$PORT -r $RIP2 -m -w 1
# 5. 保存配置
ipvsadm -S > /etc/sysconfig/ipvsadm
# 6. 开启系统路由转发(必须开启,否则无法转发流量)
echo 1 > /proc/sys/net/ipv4/ip_forward
二、LVS 固定配置文件(/etc/sysconfig/ipvsadm)
这是 LVS 重启后自动生效 的配置文件,系统自带格式:
# 自动生成的 LVS 配置文件
# 作用:记录虚拟服务、调度算法、后端节点信息
-A -t 192.168.1.100:80 -s wrr # 添加虚拟IP:192.168.1.100:80,调度算法=加权轮询
-a -t 192.168.1.100:80 -r 192.168.1.101:80 -m -w 1 # 添加后端节点1,模式=NAT,权重=1
-a -t 192.168.1.100:80 -r 192.168.1.102:80 -m -w 1 # 添加后端节点2,模式=NAT,权重=1
三、关键参数注释(必背,写博客用)
| 参数 | 含义 |
|---|---|
-A |
添加虚拟服务(客户端访问的 VIP) |
-t |
使用 TCP 协议(HTTP/HTTPS 常用) |
-s |
指定调度算法(rr/wrr/wlc 等) |
-a |
添加后端真实服务器 |
-r |
真实服务器的 IP 地址 |
-m |
NAT 模式(配置最简单) |
-g |
DR 模式(性能最高,生产常用) |
-i |
TUN 模式(跨机房模式) |
-w |
设置权重(值越大,分配请求越多) |
一、IP 规划(就用你当前环境)
- 调度器 Director:
- 物理 IP(DIP):
10.0.0.13 - 虚拟 IP(VIP):
10.0.0.100/24
- 物理 IP(DIP):
- 后端真实服务器 RS:
- RS1:
10.0.0.11 - RS2:
10.0.0.12
- RS1:
- 端口:
80(HTTP 服务)
二、LVS NAT 模式实战(用你 IP)
1. 调度器(10.0.0.13)
# 1. 安装ipvsadm
apt update && apt install -y ipvsadm
# 2. 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 3. 配置LVS规则
ipvsadm -C
ipvsadm -A -t 10.0.0.100:80 -s wrr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.11:80 -m -w 1
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.12:80 -m -w 1
# 4. 查看规则
ipvsadm -Ln
2. 后端 RS1/RS2(10.0.0.11/12)
# 1. 安装Nginx
apt update && apt install -y nginx
systemctl start nginx
# 2. 设置网关为调度器IP(关键!NAT模式必须)
ip route add default via 10.0.0.13
三、LVS DR 模式实战(用你 IP)
1. 调度器(10.0.0.13)
# 1. 绑定VIP到ens33网卡
ifconfig ens33:0 10.0.0.100 netmask 255.255.255.255 up
# 2. 配置LVS规则(-g表示DR模式)
ipvsadm -C
ipvsadm -A -t 10.0.0.100:80 -s wrr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.11:80 -g -w 1
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.12:80 -g -w 1
ipvsadm -Ln
2. 后端 RS1/RS2(10.0.0.11/12)
两台服务器都执行:
# 1. 抑制ARP(DR模式必须)
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
# 2. 绑定VIP到回环网卡
ifconfig lo:0 10.0.0.100 netmask 255.255.255.255 up
# 3. 启动Nginx
apt install -y nginx
systemctl start nginx
一、Keepalived 是什么?
Keepalived 是高可用(HA)工具,用来解决 LVS 单点故障问题。
- 自动检测 LVS 调度器状态
- 主挂了 → VIP 自动漂移到备机
- 与 LVS 无缝集成
二、安装 Keepalived(所有节点都执行)
yum install -y keepalived
三、Keepalived 配置文件详解(带中文注释,必背)
配置文件路径:/etc/keepalived/keepalived.conf
我给你最标准、最常用、带 LVS 集成的配置,逐行注释!
主节点配置(MASTER)
! Configuration File for keepalived
# 全局配置
global_defs {
router_id LVS_MASTER # 路由器ID,唯一标识,不能重复
}
# 检测脚本(可选,用于检测服务是否存活)
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 检测脚本路径
interval 2 # 每2秒检测一次
weight -20 # 失败则权重-20
}
# VRRP 实例(核心)
vrrp_instance VI_1 {
state MASTER # 角色:主节点 MASTER / 备节点 BACKUP
interface ens33 # 绑定网卡(你用的是ens33)
virtual_router_id 51 # 集群ID,主备必须一致
priority 100 # 优先级,主>备
advert_int 1 # 心跳间隔1秒
authentication {
auth_type PASS # 认证类型
auth_pass 1111 # 密码
}
virtual_ipaddress {
10.0.0.100/24 # 你的VIP(和LVS一致)
}
}
# LVS 配置(与Keepalived联动)
virtual_server 10.0.0.100 80 {
delay_loop 6 # 每6秒检测后端RS
lb_algo wrr # 调度算法:wrr加权轮询
lb_kind DR # LVS模式:DR/NAT/TUN
persistence_timeout 0 # 会话保持时间
protocol TCP
# 后端真实服务器 RS1
real_server 10.0.0.11 80 {
weight 1 # 权重
TCP_CHECK { # 健康检查
connect_timeout 3
}
}
# 后端真实服务器 RS2
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
备节点配置(BACKUP)
只需要改 2 行:
state BACKUP
priority 90
四、配置文件核心模块总结(写博客专用)
1. global_defs
全局配置,设置路由 ID。
2. vrrp_script
自定义健康检查脚本,检测服务是否正常。
3. vrrp_instance
高可用核心:
- state:MASTER/BACKUP
- interface:网卡
- priority:优先级(主高备低)
- virtual_ipaddress:VIP 地址
4. virtual_server
与 LVS 联动:
- lb_algo:调度算法
- lb_kind:LVS 模式(DR/NAT)
- real_server:后端 RS 节点
- TCP_CHECK:健康检查
五、启动命令
systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived
Keepalived + Nginx 高可用实战(跨系统:Ubuntu + Rocky)
环境固定
- 主节点(MASTER):10.0.0.13 Ubuntu
- 备节点(BACKUP):10.0.0.12 Rocky Linux
- VIP:10.0.0.100
- 功能:Nginx 挂了 / 机器宕机 → VIP 自动漂移到另一台
一、两台机器都要做的步骤
1. 安装 Nginx + Keepalived
Ubuntu 10.0.0.13 执行
apt update
apt install -y nginx keepalived
Rocky 10.0.0.12 执行
yum install -y nginx keepalived
2. 制作测试页面(区分主备)
10.0.0.13(Ubuntu 主)
echo "NGINX_MASTER_10.0.0.13" > /var/www/html/index.html
10.0.0.12(Rocky 备)
echo "NGINX_BACKUP_10.0.0.12" > /usr/share/nginx/html/index.html
3. 两台都创建 Nginx 检测脚本
1)创建脚本
mkdir -p /etc/keepalived
vi /etc/keepalived/check_nginx.sh
2)脚本内容(两台完全一样)
#!/bin/bash
# 检测Nginx是否存活
ps -ef | grep nginx | grep -v grep
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
3)加执行权限
chmod +x /etc/keepalived/check_nginx.sh
二、主节点配置(10.0.0.13 Ubuntu)
vim /etc/keepalived/keepalived.conf
配置内容
global_defs {
router_id NGINX_MASTER_13
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_nginx
}
}
三、备节点配置(10.0.0.12 Rocky)
vi /etc/keepalived/keepalived.conf
配置内容(直接复制)
global_defs {
router_id NGINX_BACKUP_12
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_nginx
}
}
四、两台都启动服务
systemctl restart keepalived
systemctl enable keepalived
五、实战测试(高可用验证)
1. 访问 VIP
http://10.0.0.100
显示:NGINX_MASTER_10.0.0.13
2. 模拟主 Nginx 挂掉
# 在 10.0.0.13 执行
systemctl stop nginx
3. 再次访问 VIP
自动切换到备机: NGINX_BACKUP_10.0.0.12
4. 重启主 Nginx
systemctl start nginx
systemctl start keepalived
VIP 自动切回主节点!
一、环境说明
- 主节点:10.0.0.13(Ubuntu)→ HAProxy + Keepalived
- 备节点:10.0.0.12(Rocky)→ HAProxy + Keepalived
- VIP:10.0.0.100
- 作用:主挂了 → VIP 自动漂移到备机,实现高可用
二、两台机器都执行(通用步骤)
1. 安装 HAProxy
Ubuntu 10.0.0.13
apt update
apt install -y haproxy
Rocky 10.0.0.12
yum install -y haproxy
2. 安装 Keepalived
Ubuntu
apt install -y keepalived
Rocky
yum install -y keepalived
3. 两台都创建 HAProxy 存活检测脚本
mkdir -p /etc/keepalived
vi /etc/keepalived/check_haproxy.sh
脚本内容(两台一样):
#!/bin/bash
ps -ef | grep haproxy | grep -v grep
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
加权限:
chmod +x /etc/keepalived/check_haproxy.sh
三、主节点配置(10.0.0.13 Ubuntu)
1. Keepalived 配置
vim /etc/keepalived/keepalived.conf
conf
global_defs {
router_id HAPROXY_MASTER
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 60
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_haproxy
}
}
2. HAProxy 配置(简单测试)
vi /etc/haproxy/haproxy.cfg
末尾添加:plaintext
listen test
bind *:80
mode http
server local 127.0.0.1:80 check
启动:
systemctl restart haproxy
systemctl restart keepalived
四、备节点配置(10.0.0.12 Rocky)
1. Keepalived 配置
vim /etc/keepalived/keepalived.conf
conf
global_defs {
router_id HAPROXY_BACKUP
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 60
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24
}
track_script {
chk_haproxy
}
}
2. HAProxy 配置
vi /etc/haproxy/haproxy.cfg
plaintext
listen test
bind *:80
mode http
server local 127.0.0.1:80 check
启动:
systemctl restart haproxy
systemctl restart keepalived
总结:
- HAProxy 提供七层负载均衡。
- Keepalived 提供 VRRP 高可用,实现 VIP 自动漂移。
- 检测脚本实现 HAProxy 挂掉即自动切换。
- 主备架构彻底解决负载均衡单点故障。
更多推荐



所有评论(0)