一、一主一从

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)的抽象,其核心交互流程如下:

  1. 客户端(Client)发起请求,目标 IP 是 VIP(Virtual IP)。

  2. 负载调度器(Director)接收请求,根据调度算法选择一台后端真实服务器(RS)。

  3. Director 将请求报文转发给选中的 RS。

  4. 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 主要提供三种核心工作模式:NATDR 和 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
  • 后端真实服务器 RS:
    • RS1:10.0.0.11
    • RS2:10.0.0.12
  • 端口: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 挂掉即自动切换
  • 主备架构彻底解决负载均衡单点故障。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐