当前位置: 首页 > news >正文

Keepalived + LVS-DR 高可用与负载均衡实验

实验目标

  1. k1k2 上部署 Keepalived,实现 VIP 的高可用。

  2. rs1rs2 上部署 Httpd 服务,作为 LVS-DR 模式的后端真实服务器。

  3. 通过 client 测试 VIP 的高可用性和负载均衡功能。

实验环境准备

1. 节点信息

节点

角色

IP地址

说明

k1

Keepalived 主节点

172.25.254.20

负责管理 VIP 和 LVS

k2

Keepalived 备节点

172.25.254.30

负责接管 VIP 和 LVS

rs1

后端服务节点

172.25.254.40

提供 Httpd 服务

rs2

后端服务节点

172.25.254.50

提供 Httpd 服务

client

客户端

172.25.254.60

用于测试访问

2. 网络拓扑

  • 所有节点通过 ens160 网卡连接到同一局域网。

  • VIP 地址为 172.25.254.100(LVS-DR 模式下由 Keepalived 绑定)。

步骤一:系统初始化

1. 时间同步

# 在所有节点上安装 chrony 并同步时间
sudo dnf install -y chrony
sudo systemctl enable --now chronyd
sudo chronyd -q

2. 关闭防火墙

# 在所有节点上执行
sudo systemctl stop firewalld
sudo systemctl disable firewalld

3. 关闭 SELinux

# 在所有节点上执行
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

4. 配置静态 IP

  • 根据节点角色配置静态 IP,确保所有节点在同一子网(172.25.254.0/24)。

  • 示例:

    k1的网络配置(其他节点类似):

    sudo nmcli connection modify ens160 ipv4.method manual ipv4.addresses 172.25.254.20/24
    sudo nmcli connection up ens160

步骤二:安装 Keepalived与ipvsadm

1. 安装 Keepalived

# 在 k1 和 k2 上执行
sudo dnf install -y keepalived

2.安装ipvsadm

# 在 k1 和 k2 上执行
sudo dnf install -y ipvsadm

步骤三:配置 Keepalived

1.配置文件结构

Keepalived 的配置文件 /etc/keepalived/keepalived.conf 由以下三部分组成:

global_defs { ... }              # 全局配置
vrrp_instance VI_1 { ... }       # VRRP 实例(高可用)
virtual_server VIP PORT { ... }  # 负载均衡(LVS-DR)

2. 配置 k1(主节点)

2.1 全局配置(global_defs

sudo vim /etc/keepalived/keepalived.conf

配置内容

global_defs {notification_email {admin@example.com}notification_email_from keepalived@k1smtp_server 127.0.0.1smtp_connect_timeout 30router_id k1
}

参数解释

  • notification_email: 故障时发送邮件的地址(可选,需配置 SMTP)。

  • notification_email_from: 发件人邮箱。

  • smtp_server: SMTP 服务器地址(本地默认即可)。

  • smtp_connect_timeout: SMTP 连接超时时间。

  • router_id: 当前节点的唯一标识符(建议与主机名一致)。


2.2 VRRP 实例配置(主节点)

vrrp_instance VI_1 {state MASTER                 # 角色:主节点interface ens160               # 绑定的网卡(需与实际接口一致)virtual_router_id 51         # 虚拟路由器 ID(主备节点必须一致)priority 100                 # 优先级(主节点 > 备节点)advert_int 1                 # 心跳间隔(秒)authentication {auth_type PASS           # 认证类型(PASS 或 AH)auth_pass 1111           # 认证密码(主备节点必须一致)}virtual_ipaddress {172.25.254.100           # 虚拟 IP(VIP)}
}

关键参数说明

  • state: 主节点设为 MASTER,备节点设为 BACKUP

  • interface: 指定绑定 VIP 的网卡(使用 ip a 查看接口名称)。

  • virtual_router_id: 虚拟路由器 ID(主备节点必须相同,范围 0-255)。

  • priority: 优先级(主节点设为 100,备节点设为 80)。

  • advert_int: 心跳间隔(单位秒,建议保持默认 1 秒)。

  • authentication: 认证信息(主备节点必须完全一致)。

  • virtual_ipaddress: 虚拟 IP 地址(VIP)。

2.3 LVS-DR 负载均衡配置

virtual_server 172.25.254.100 80 {delay_loop 6                 # 健康检查间隔(秒)lb_algo rr                   # 负载均衡算法(rr=轮询)lb_kind DR                   # 转发模式(DR=直接路由)protocol TCP                 # 协议(TCP/UDP)
​real_server 172.25.254.40 80 {weight 1                 # 权重(默认 1)TCP_CHECK {connect_timeout 3    # 连接超时时间(秒)retry 3       # 最大重试次数delay_before_retry 3 # 重试间隔(秒)connect_port 80      # 检查端口}}
​real_server 172.25.254.50 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}
}

关键参数说明

  • virtual_server: 定义 VIP 和端口。

  • lb_algo: 负载均衡算法(rr=轮询,wrr=加权轮询,lc=最少连接)。

  • lb_kind: 转发模式(DR=直接路由,NAT=网络地址转换,TUN=隧道)。

  • real_server: 后端真实服务器 IP 和端口。

  • TCP_CHECK: 健康检查配置(确保后端服务正常)。


3. 修改 k2(备节点)配置文件

3.1 全局配置(global_defs

sudo vim /etc/keepalived/keepalived.conf

配置内容

global_defs {notification_email {admin@example.com}notification_email_from keepalived@k2smtp_server 127.0.0.1smtp_connect_timeout 30router_id k2
}

差异说明

  • notification_email_from: 修改为主机名 k2

  • router_id: 修改为 k2


3.2 VRRP 实例配置(备节点)

vrrp_instance VI_1 {state BACKUP                 # 角色:备节点interface ens160virtual_router_id 51         # 与主节点保持一致priority 80                  # 优先级低于主节点advert_int 1authentication {auth_type PASSauth_pass 1111           # 与主节点保持一致}virtual_ipaddress {172.25.254.100}
}

关键参数说明

  • state: 备节点设为 BACKUP

  • priority: 优先级设为 80(低于主节点的 100)。

4. 配置文件保存与验证

4.1保存配置文件

4.2语法检查

sudo keepalived -t -f /etc/keepalived/keepalived.conf

如果输出无错误,表示配置文件语法正确。

5. 主备配置文件差异

  • Keepalived 的 VRRP 模块负责管理 VIP 的高可用性(即主备节点切换),而 LVS 的虚拟服务器配置virtual_server)仅在主节点上生效。

  • 当主节点(k1)正常运行时,它会主动维护 LVS 的转发规则(通过 ipvsadm),并将 VIP 绑定到自身。

  • 当主节点故障时,备用节点(k2)会接管 VIP,此时 Keepalived 会自动同步主节点的 LVS 配置(基于相同的 virtual_server 定义),无需手动在备用节点上重复配置。

步骤四:配置后端服务(rs1 和 rs2)

1. 安装 Httpd

# 在 rs1 和 rs2 上执行
sudo dnf install -y httpd
sudo systemctl enable --now httpd

2. 修改 Httpd默认页面

# 在 rs1 上执行
echo "This is rs1-172.25.254.40" | sudo tee /var/www/html/index.html
​
# 在 rs2 上执行
echo "This is rs2-172.25.254.50" | sudo tee /var/www/html/index.html

3. 配置 ARP 行为(LVS-DR 模式)

# 在 rs1 和 rs2 上执行
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2
sudo sysctl -w net.ipv4.conf.default.arp_ignore=1
sudo sysctl -w net.ipv4.conf.default.arp_announce=2
sudo sysctl -w net.ipv4.conf.lo.arp_ignore=1
sudo sysctl -w net.ipv4.conf.lo.arp_announce=2
​
# 持久化配置
echo "net.ipv4.conf.all.arp_ignore = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.arp_ignore = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.arp_announce = 2" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.default.arp_announce = 2" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" | sudo tee -a /etc/sysctl.conf

4. 添加 VIP 路由

# 在 rs1 和 rs2 上执行
sudo ip addr add 172.25.254.100/32 dev lo

步骤五:启动服务并验证

1. 启动 Keepalived

# 在 k1 和 k2 上执行
sudo systemctl enable --now keepalived

2. 验证 VIP 是否在 k1 上

# 在 k1 上执行
ip a show ens160
# 预期输出: 172.25.254.100 应出现在 ens160 接口

3. 验证 LVS 转发规则

# 在 k1 上执行
ipvsadm -L -n
# 预期输出: 显示 rs1 和 rs2 的 IP:Port

步骤六:测试高可用性

1. 模拟故障切换

  • 停止 k1 的 Keepalived 服务:

    sudo systemctl stop keepalived
  • 在 k2 上验证 VIP 是否接管:

    ip a show ens160
    # 预期输出: 172.25.254.100 应出现在 ens160 接口

2. 恢复 k1 服务

  • 重启 k1 的 Keepalived 服务:

    sudo systemctl start keepalived
  • 观察 VIP 是否自动切换回 k1(默认为抢占模式)。


步骤七:客户端测试

1. 访问 VIP

# 在 client 上执行
curl http://172.25.254.100
# 预期输出: 轮询显示 "This is rs1-172.25.254.40" 或 "This is rs2-172.25.254.50"

2. 模拟后端服务故障

  • 停止 rs1 的 Nginx 服务:

    sudo systemctl stop httpd
  • 再次访问 VIP:

    curl http://172.25.254.100
    # 预期输出: 只显示 "This is rs2-172.25.254.50"

实验总结

  • 通过本实验,你已经实现了 Keepalived 的高可用和 LVS-DR 模式的负载均衡。

  • Keepalived 通过 VRRP 协议管理 VIP 的高可用性,确保主节点故障时 VIP 自动切换到备节点。

  • LVS-DR 模式通过直接路由转发请求到后端服务器,结合 Keepalived 的健康检查功能,实现了后端服务的故障隔离。

http://www.xdnf.cn/news/1198801.html

相关文章:

  • Java全栈面试实战:从JVM到AI的技术演进之路
  • OpenResty 高并发揭秘:架构优势与 Linux 优化实践
  • Unity TAA
  • CentOS网卡未被托管解决记录
  • PDF文件被加密限制怎么办?专业级解除方案分享
  • Python|OpenCV-实现快速处理图像的方法(23)
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 昇思学习营-模型推理和性能优化
  • 【AcWing 838题解】堆排序
  • MySQL - 主从复制与读写分离
  • 一分钟部署一个导航网站
  • 递归查询美国加速-技术演进与行业应用深度解析
  • CentOS 9 配置国内 YUM 源
  • 2025第15届上海生物发酵展将于8月7号启幕
  • 高级 Tkinter:使用类
  • 通过不同坐标系下的两个向量,求解旋转矩阵
  • 《C++ list 完全指南:list的模拟实现》
  • 《频率之光:维度回响》
  • mac电脑安装docker图文教程
  • 【笔记】活度系数推导
  • Linux驱动21 --- FFMPEG 音频 API
  • 深度解析 inaSpeechSegmenter:高效音频语音分割与检测开源工具
  • STL——list
  • Web Worker:解锁浏览器多线程,提升前端性能与体验
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现
  • PHP框架之Laravel框架教程:3. 数据库操作(简要)
  • Keil MDK 嵌入式开发问题:warning: #223-D: function “sprintf“ declared implicitly
  • Flutter开发实战之测试驱动开发
  • IP--MGER综合实验报告
  • 人工智能——图像梯度处理、边缘检测、绘制图像轮廓、凸包特征检测