文章目录
- [一、安装与配置 LVS + Keepalived](#一、安装与配置 LVS + Keepalived)
-
- [1. 环境规划](#1. 环境规划)
- [2. 主 DR(192.168.100.14)配置](#2. 主 DR(192.168.100.14)配置)
-
- [2.1 基础环境准备](#2.1 基础环境准备)
- [2.2 配置 VIP 网卡(ens33:0)](#2.2 配置 VIP 网卡(ens33:0))
- [2.3 内核参数优化(避免转发冲突)](#2.3 内核参数优化(避免转发冲突))
- [2.4 配置 Keepalived(核心高可用配置)](#2.4 配置 Keepalived(核心高可用配置))
- [2.5 启动服务并验证](#2.5 启动服务并验证)
- [3. 备 DR(192.168.100.15)配置](#3. 备 DR(192.168.100.15)配置)
-
- [3.1 基础环境准备(与主 DR 一致)](#3.1 基础环境准备(与主 DR 一致))
- [3.2 内核参数优化(与主 DR 一致)](#3.2 内核参数优化(与主 DR 一致))
- [3.3 配置 Keepalived(备 DR 角色修改)](#3.3 配置 Keepalived(备 DR 角色修改))
- [3.4 启动服务并验证](#3.4 启动服务并验证)
- [4. Web 节点配置(web01:192.168.100.11;web02:192.168.100.13)](#4. Web 节点配置(web01:192.168.100.11;web02:192.168.100.13))
-
- [4.1 基础环境准备](#4.1 基础环境准备)
- [4.2 在 lo 接口配置 VIP(避免 MAC 冲突)](#4.2 在 lo 接口配置 VIP(避免 MAC 冲突))
- [4.3 调整 ARP 参数(防止 VIP 地址冲突)](#4.3 调整 ARP 参数(防止 VIP 地址冲突))
- [4.4 验证 Web 节点配置](#4.4 验证 Web 节点配置)
- [5. 集群测试(验证负载均衡与高可用)](#5. 集群测试(验证负载均衡与高可用))
-
- [5.1 负载均衡测试(客户端访问 VIP)](#5.1 负载均衡测试(客户端访问 VIP))
- [5.2 高可用测试(主 DR 故障切换)](#5.2 高可用测试(主 DR 故障切换))
一、安装与配置 LVS + Keepalived
1. 环境规划
| 服务器角色 | 服务器 IP | 核心任务 |
|---|---|---|
| 主 DR(MASTER) | 192.168.100.14 | 承担负载调度,正常状态下绑定 VIP,管理 LVS 集群 |
| 备 DR(BACKUP) | 192.168.100.15 | 作为主 DR 的热备,主 DR 故障时自动接管 VIP 和调度任务 |
| Web 节点 1(web01) | 192.168.100.11 | 提供 Web 服务,lo 接口配置 VIP,处理客户端请求 |
| Web 节点 2(web02) | 192.168.10.13 | 提供 Web 服务,lo 接口配置 VIP,处理客户端请求 |
| 虚拟 IP(VIP) | 192.168.10.180 | 对外提供统一访问入口,由 Keepalived 管理漂移 |
2. 主 DR(192.168.100.14)配置
2.1 基础环境准备
bash
# 关防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# 安装依赖工具(ipvsadm 用于 LVS 配置,keepalived 实现高可用)
yum -y install ipvsadm keepalived
# 加载 ip_vs 内核模块(LVS 依赖内核模块),并验证加载结果
modprobe ip_vs
cat /proc/net/ip_vs # 输出内容即表示模块加载成功

2.2 配置 VIP 网卡(ens33:0)
主 DR 需手动配置 VIP 网卡,确保正常状态下 VIP 绑定到主 DR
bash
# 进入网卡配置目录,复制基础网卡配置文件生成 VIP 网卡配置
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0 # 以 ens33 为例,若网卡名不同需替换(如 eth0)
# 编辑 VIP 网卡配置文件(ifcfg-ens33:0)
vim ifcfg-ens33:0
# 输入内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
# 启用 VIP 网卡并验证
ifup ens33:0
ifconfig ens33:0 # 查看是否显示 VIP(192.168.10.180)

2.3 内核参数优化(避免转发冲突)
bash
# 编辑内核配置文件,关闭 IP 转发和重定向,适配 LVS DR 模式
vim /etc/sysctl.conf
# 添加以下内容:
net.ipv4.ip_forward = 0 # DR 模式无需开启 IP 转发
net.ipv4.conf.all.send_redirects = 0 # 关闭所有网卡的重定向
net.ipv4.conf.default.send_redirects = 0 # 关闭默认网卡的重定向
net.ipv4.conf.ens33.send_redirects = 0 # 关闭基础网卡(ens33)的重定向
# 执行命令使配置生效:
sysctl -p

输出显示

2.4 配置 Keepalived(核心高可用配置)
Keepalived 配置文件路径为/etc/keepalived/keepalived.conf,需同时实现 VRRP 高可用和 LVS 集群管理
bash
# 备份默认配置文件(可选,避免配置错误无法恢复)
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# 新建并编辑配置文件
vim /etc/keepalived/keepalived.conf
# 写入以下内容(主 DR 角色配置):
# 全局配置:定义路由器 ID 和邮件服务(邮件服务可选,此处用本地地址)
global_defs {
router_id LVS_01 # 主 DR 的唯一标识,需与备 DR 不同
smtp_server 127.0.0.1
}
# VRRP 实例配置:实现 VIP 漂移和主备切换
vrrp_instance VI_1 {
state MASTER # 角色为 MASTER(备 DR 需改为 BACKUP)
interface ens33 # 绑定 VIP 的基础网卡(与 VIP 网卡 ens33:0 对应)
virtual_router_id 10 # VRRP 组 ID,主备 DR 必须一致(范围 0-255)
priority 100 # 优先级,主 DR 需高于备 DR(备 DR 建议设为 90)
advert_int 1 # 心跳发送间隔(秒),主备保持一致
# 认证配置:防止非法节点加入 VRRP 组
authentication {
auth_type PASS # 认证类型为密码认证
auth_pass abc123 # 认证密码,主备 DR 必须一致(建议 8 位以内)
}
# 虚拟 IP 配置:声明 VIP,与手动配置的 VIP 一致
virtual_ipaddress {
192.168.10.180
}
}
# LVS 虚拟服务配置:关联 VIP 和 Web 节点,定义调度规则
virtual_server 192.168.10.180 80 {
delay_loop 6 # 健康检查间隔(秒)
lb_algo rr # 调度算法为轮询(rr),也可改为 wrr、lc 等
lb_kind DR # LVS 工作模式为 DR 模式
persistence_timeout 50 # 会话保持时间(秒),50 秒内同一客户端请求转发到同一 Web 节点
protocol TCP # 协议为 TCP(Web 服务基于 TCP)
# Web 节点 1(192.168.100.11)配置
real_server 192.168.100.11 80 {
weight 1 # 权重,值越高分配到的请求越多(默认 1)
# TCP 健康检查:检测 Web 节点 80 端口是否存活
TCP_CHECK {
connect_port 80 # 检查的端口(Web 服务端口)
connect_timeout 3 # 连接超时时间(秒)
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 重试间隔(秒)
}
}
# Web 节点 2(192.168.100.13)配置
real_server 192.168.100.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# 配置完成 下边内容都可删掉
2.5 启动服务并验证
bash
# 启动 Keepalived 和 ipvsadm 服务
systemctl start keepalived
systemctl enable keepalived # 开机自启
ipvsadm-save > /etc/sysconfig/ipvsadm # 保存 LVS 配置
systemctl start ipvsadm
systemctl enable ipvsadm
#配置 IPVS 规则
# 创建虚拟服务(调度算法为轮询rr)
ipvsadm -A -t 192.168.100.14:80 -s rr
# 添加后端Web节点1
ipvsadm -a -t 192.168.100.14:80 -r 192.168.100.11:80 -m
# 添加后端Web节点2
ipvsadm -a -t 192.168.100.14:80 -r 192.168.100.13:80 -m
# 验证服务状态和配置
查看 VIP 绑定:ip addr,确保 ens33 网卡下有 192.168.10.180(VIP)
查看 LVS 节点状态:ipvsadm -ln,输出应包含 Web 节点 192.168.100.11:80 和 192.168.100.13:80,且调度模式为 Route(DR 模式)


3. 备 DR(192.168.100.15)配置
备 DR 配置与主 DR 基本一致,仅需修改角色、路由器 ID、优先级 ,且无需手动配置 VIP 网卡(VIP 由 Keepalived 自动管理)
3.1 基础环境准备(与主 DR 一致)
bash
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# 装依赖工具并加载 ip_vs 模块
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs # 验证模块加载
3.2 内核参数优化(与主 DR 一致)
bash
vim /etc/sysctl.conf
# 添加以下内容并生效:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

3.3 配置 Keepalived(备 DR 角色修改)
bash
# 备份默认配置并新建配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
# 写入以下内容
global_defs {
router_id LVS_02 # 备 DR 的唯一标识,与主 DR 不同
smtp_server 127.0.0.1
}
vrrp_instance VI_1 {
state BACKUP # 角色改为 BACKUP
interface ens33
virtual_router_id 10 # 与主 DR 一致
priority 90 # 优先级低于主 DR(主 DR 为 100)
advert_int 1
authentication {
auth_type PASS
auth_pass abc123 # 与主 DR 一致
}
virtual_ipaddress {
192.168.10.180 # 声明 VIP,无需手动配置网卡
}
}
# LVS 虚拟服务配置与主 DR 完全一致,直接复制
virtual_server 192.168.10.180 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.100.11 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#-------------------------------------------修改地方
-----------------------------------------------------------------------------------------
vim keepalived.conf
......
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
#vrrp_strict
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
#nopreempt #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass abc123
}
virtual_ipaddress { #指定群集vip地址
192.168.10.180
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.10.180 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.100.1180 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.100.13 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
##删除后面多余的配置##
}
-------------------------------------------------------
-------------------------------------------------------------------------------
3.4 启动服务并验证
bash
# 启动服务
systemctl start keepalived
systemctl enable keepalived
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl enable ipvsadm
# 验证(正常状态下)
查看 VIP:ip addr,备 DR 的 ens33 网卡无 VIP(192.168.10.180)
查看 LVS 状态:ipvsadm -ln,与主 DR 输出一致(包含 Web 节点)
4. Web 节点配置(web01:192.168.100.11;web02:192.168.100.13)
两个 Web 节点配置完全一致,以下以 web01 为例
4.1 基础环境准备
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum -y install httpd
systemctl start httpd
systemctl enable httpd
echo 'This is web01 (192.168.100.11)' > /var/www/html/index.html
echo 'This is web02 (192.168.100.13)' > /var/www/html/index.html
4.2 在 lo 接口配置 VIP(避免 MAC 冲突)
bash
# 复制 lo 接口配置文件生成 lo:0(VIP 接口)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
# 编辑 lo:0 配置文件
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.180 # 与 VIP 一致
NETMASK=255.255.255.255 # 32 位子网掩码
# 启用 lo:0 接口并添加路由(绑定 VIP 到 lo 接口)
ifup lo:0
route add -host 192.168.100.180 dev lo:0 # 确保 VIP 请求通过 lo 接口处理
4.3 调整 ARP 参数(防止 VIP 地址冲突)
编辑内核配置,避免 Web 节点对外发送 VIP 的 ARP 广播,导致客户端错误识别
bash
vim /etc/sysctl.conf
# 仅响应目标 IP 为本地网卡的 ARP 请求(避免响应 VIP 的 ARP 请求)
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
# 发送 ARP 请求时,仅使用网卡自身 IP(不使用 VIP)
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
sysctl -p
4.4 验证 Web 节点配置
访问本地 Web 页面,确认服务正常:
bash
curl http://127.0.0.1 # web01 应输出"This is web02 (192.168.100.13)"

bash
curl http://127.0.0.1 # web01 应输出"This is web01 (192.168.100.11)"

5. 集群测试(验证负载均衡与高可用)
5.1 负载均衡测试(客户端访问 VIP)
- 客户端(如 192.168.10.xxx)打开浏览器,访问
http://192.168.10.180 - 刷新页面(间隔需超过 50 秒,避免会话保持影响),应轮询显示 web01 和 web02 的测试页面,说明 LVS 轮询调度生效
5.2 高可用测试(主 DR 故障切换)
在主 DR(192.168.10.162)上停止 Keepalived 服务,模拟主 DR 故障:
bash
systemctl stop keepalived
在备 DR(192.168.100.15)上执行ip addr,查看 ens33 网卡是否自动绑定 VIP(192.168.10.180),若绑定则切换成功
客户端再次访问http://192.168.10.180,页面仍能正常显示(轮询 web01 和 web02),说明服务未中断
恢复主 DR 服务:
bash
systemctl start keepalived
执行ip addr,主 DR 的 ens33 网卡会重新绑定 VIP(默认抢占模式),备 DR 的 VIP 自动解绑