一、一主一从

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 主要提供三种核心工作模式: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 地址
-mNAT 模式(配置最简单)
-gDR 模式(性能最高,生产常用)
-iTUN 模式(跨机房模式)
-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编程工具,助力开发者即刻编程。

更多推荐