前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >LVS-DR 模式负载均衡集群的搭建与测试(详细)

LVS-DR 模式负载均衡集群的搭建与测试(详细)

原创
作者头像
神秘泣男子
发布2025-01-14 17:28:52
发布2025-01-14 17:28:52
10700
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:0
代码可运行

实验环境

  • LVS 调度器: 192.168.14.111
  • Nginx1 节点: 192.168.14.112
  • Nginx2 节点: 192.168.14.113
  • 虚拟 VIP 地址: 192.168.14.200

实验目标

  • 构建基于 LVS-DR 模式的负载均衡集群。
  • 实现 LVS 调度器和两台 Nginx 服务器的协同工作。
  • 测试 LVS-DR 的负载均衡效果。

在日常工作中,负载均衡是一个非常重要的技术,它可以帮助我们提升系统的可用性和性能。听说 LVS 的 DR 模式(Direct Routing)非常高效,所以我决定通过这次实验来实际动手搭建一个 LVS-DR 的负载均衡集群。这个实验的目标很明确:让一台 LVS 调度器和两台 Nginx 后端服务器协同工作,利用 DR 模式实现请求的分发和负载均衡。通过实验,我希望能更深入地理解 LVS 的工作原理,同时也能掌握它在实际场景下的配置方法。实验的过程虽然有点繁琐,但每一步都能让我对网络和负载均衡的理解更上一层楼。

以下是本次实验的全部内容 如需对应某个命令不理解 请自我查询 涉及本次实验的理论部分。

希望你先明白理论部分,轻而易举的理解本次实验, 然后再来吸收本次实验。

本次实验架构图

本次实验结果

实验步骤

1. LVS 调度器配置

1.1 配置虚拟 IP 地址(VIP)

在 LVS 调度器 192.168.14.111 上配置 VIP 地址 192.168.14.200

执行以下命令:

代码语言:javascript
代码运行次数:0
复制
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vi ifcfg-ens33:0

添加以下内容:

代码语言:javascript
代码运行次数:0
复制
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.14.200
NETMASK=255.255.255.255

激活虚拟 IP:

代码语言:javascript
代码运行次数:0
复制
ifup ens33:0
ifconfig ens33:0

验证输出类似以下内容:

代码语言:javascript
代码运行次数:0
复制
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
inet 192.168.14.200
netmask 255.255.255.255

出现了error但是不用管

1.2 调整内核参数

修改 /etc/sysctl.conf 文件,关闭 ICMP 重定向:

代码语言:javascript
代码运行次数:0
复制
vi /etc/sysctl.conf

添加以下内容:

代码语言:javascript
代码运行次数:0
复制
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

应用配置:

代码语言:javascript
代码运行次数:0
复制
sysctl -p

1.3 配置负载分配策略

安装 ipvsadm 工具:

代码语言:javascript
代码运行次数:0
复制
yum -y install ipvsadm

配置调度规则:

代码语言:javascript
代码运行次数:0
复制
ipvsadm -C  # 清除原有规则
ipvsadm -A -t 192.168.14.200:80 -s rr  # 添加 VIP 地址
ipvsadm -a -t 192.168.14.200:80 -r 192.168.14.112 -g -w 1  # 添加 Nginx1
ipvsadm -a -t 192.168.14.200:80 -r 192.168.14.113 -g -w 1  # 添加 Nginx2
ipvsadm-save > /etc/sysconfig/ipvsadm  # 保存规则
systemctl enable ipvsadm

查看配置:

代码语言:javascript
代码运行次数:0
复制
ipvsadm -ln

2. 配置 Nginx 节点服务器

2.1 配置虚拟 IP 地址(VIP)

在每台 Nginx 节点服务器(192.168.14.112192.168.14.113)上配置虚拟 IP 地址。

以下操作在两台nginx服务器上执行 都一样的命令 除了网页区分一下

执行以下命令:

代码语言:javascript
代码运行次数:0
复制
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vi ifcfg-lo:0

添加以下内容:

代码语言:javascript
代码运行次数:0
复制
DEVICE=lo:0
IPADDR=192.168.14.200
NETMASK=255.255.255.255
NETWORK=192.168.14.200
BROADCAST=192.168.14.200
ONBOOT=yes
NAME=loopback

激活虚拟 IP:

代码语言:javascript
代码运行次数:0
复制
ifup lo:0
ifconfig lo:0

验证输出类似以下内容:

代码语言:javascript
代码运行次数:0
复制
lo:0: flags=73<UP,LOOPBACK,RUNNING>
inet 192.168.14.200
netmask 255.255.255.255
2.2 调整内核参数

修改 /etc/sysctl.conf 文件,调整 ARP 响应参数:

代码语言:javascript
代码运行次数:0
复制
vi /etc/sysctl.conf

添加以下内容:

代码语言:javascript
代码运行次数:0
复制
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

应用配置:

代码语言:javascript
代码运行次数:0
复制
sysctl -p

设置路由

临时路由 重启后会失效

代码语言:javascript
代码运行次数:0
复制
route add -host 192.168.14.200 dev lo:0

永久的路由:

代码语言:javascript
代码运行次数:0
复制
vim /etc/rc.local
route add -host 192.168.14.200 dev lo:0

2.3 安装 Nginx测试

执行以下命令安装 Nginx:

代码语言:javascript
代码运行次数:0
复制
yum -y install nginx

创建测试页面:

代码语言:javascript
代码运行次数:0
复制
如下我会公开源代码

启动并设置开机自启:

代码语言:javascript
代码运行次数:0
复制
systemctl start nginx
systemctl enable nginx

重复以上步骤配置两台 Nginx 节点服务器。

第一台 192.168.14.112的nginx页面
代码语言:javascript
代码运行次数:0
复制
vim /usr/share/nginx/html/index.html
代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Server 112</title>
  <style>
    body {
      background: linear-gradient(45deg, #ff9a9e, #fad0c4);
      color: #fff;
      font-family: Arial, sans-serif;
      text-align: center;
      padding: 50px;
    }
    h1 {
      font-size: 4em;
      text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
    }
    p {
      font-size: 1.5em;
    }
    .server-id {
      font-size: 5em;
      font-weight: bold;
      color: #ff6f61;
      text-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
    }
  </style>
</head>
<body>
  <h1>Welcome to Nginx Server</h1>
  <p>This is the page served by:</p>
  <div class="server-id">Server 112</div>
</body>
</html>
第二台 192.168.14.113的nginx页面
代码语言:javascript
代码运行次数:0
复制
vim /usr/share/nginx/html/index.html
代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Server 113</title>
  <style>
    body {
      background: radial-gradient(circle, #89f7fe, #66a6ff);
      color: #fff;
      font-family: "Comic Sans MS", cursive, sans-serif;
      text-align: center;
      padding: 50px;
    }
    h1 {
      font-size: 4em;
      text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
    }
    p {
      font-size: 1.5em;
    }
    .server-id {
      font-size: 5em;
      font-weight: bold;
      color: #ffcc00;
      text-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
    }
  </style>
</head>
<body>
  <h1>Welcome to Nginx Server</h1>
  <p>This is the page served by:</p>
  <div class="server-id">Server 113</div>
</body>
</html>

3. 测试 LVS 集群

  1. 在客户端访问 http://192.168.14.200/
  2. 刷新页面,验证负载均衡效果(不同节点的页面内容会有所不同)。
  3. 在 LVS 调度器上查看节点状态:
代码语言:javascript
代码运行次数:0
复制
ipvsadm -ln

输出示例:

代码语言:javascript
代码运行次数:0
复制
[root@master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.14.200:80 rr
  -> 192.168.14.112:80            Route   1      0          2         
  -> 192.168.14.113:80            Route   1      0          2   

测试结果:

明显的发现在轮询的替换交替页面

注意事项

如果你发现测试的时候适中是一个页面那么可能是浏览器缓存的原因 删掉缓存重新访问即可

只要lvs调度器上会正常的显示 链接数量 活动状态 权重 即可

总结

完成这个实验后,我对 LVS-DR 模式有了更直观的认识。整个实验的过程让我感受到 DR 模式的高效性,尤其是它将响应直接返回给客户端的设计,避免了调度器成为瓶颈,这真的很聪明!在配置 LVS 调度器和后端服务器的时候,虽然遇到了一些问题,比如虚拟 IP 的配置报错和 ARP 参数的调整,但这些都让我对网络底层的细节有了更多的了解。

最终的测试结果让我很满意,客户端通过 VIP 访问时,可以轮流访问两台 Nginx 后端服务器的页面,这说明 LVS 的负载均衡效果很好。更重要的是,这次实验让我对负载均衡技术有了更多的信心,也让我意识到它在实际生产环境中的重要性。虽然配置过程稍微复杂了一点,但当看到实验成功时,那种成就感是值得的!以后如果有机会,我一定会尝试配置更复杂的负载均衡场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验环境
  • 实验目标
  • 本次实验架构图
  • 本次实验结果
  • 实验步骤
    • 1. LVS 调度器配置
      • 1.1 配置虚拟 IP 地址(VIP)
      • 1.2 调整内核参数
      • 1.3 配置负载分配策略
    • 2. 配置 Nginx 节点服务器
      • 2.1 配置虚拟 IP 地址(VIP)
      • 2.2 调整内核参数
      • 设置路由
      • 2.3 安装 Nginx测试
      • 第一台 192.168.14.112的nginx页面
      • 第二台 192.168.14.113的nginx页面
    • 3. 测试 LVS 集群
  • 注意事项
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档