安装与配置 LVS + Keepalived

文章目录

  • [一、安装与配置 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)

  1. 客户端(如 192.168.10.xxx)打开浏览器,访问http://192.168.10.180
  2. 刷新页面(间隔需超过 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 自动解绑

相关推荐
LucidX2 小时前
LVS DR模式工作原理群集部署
lvs
2501_939909052 小时前
LVS+Keepalived群集
lvs
默恋~微凉2 小时前
LVS+keepalived
lvs
伞啊伞3 小时前
LVS-DR 模式负载均衡群集
智能路由器·负载均衡·lvs
不想画图3 小时前
负载均衡——LVS+Keepalived群集部署
运维·负载均衡·lvs
可爱又迷人的反派角色“yang”11 小时前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
Q鑫6 天前
LVS/Nginx/Haproxy+keepalived负载均衡集群工作原理
nginx·负载均衡·lvs
yifengyiyufjq8 天前
基于 CentOS 7 搭建 LVS 负载均衡(NAT 模式)搭建指南
centos·负载均衡·lvs
Aiden1212111 天前
LVS+Keepalived
lvs