192.168.14.111
192.168.14.112
192.168.14.113
192.168.14.200
在日常工作中,负载均衡是一个非常重要的技术,它可以帮助我们提升系统的可用性和性能。听说 LVS 的 DR 模式(Direct Routing)非常高效,所以我决定通过这次实验来实际动手搭建一个 LVS-DR 的负载均衡集群。这个实验的目标很明确:让一台 LVS 调度器和两台 Nginx 后端服务器协同工作,利用 DR 模式实现请求的分发和负载均衡。通过实验,我希望能更深入地理解 LVS 的工作原理,同时也能掌握它在实际场景下的配置方法。实验的过程虽然有点繁琐,但每一步都能让我对网络和负载均衡的理解更上一层楼。
以下是本次实验的全部内容 如需对应某个命令不理解 请自我查询 涉及本次实验的理论部分。
希望你先明白理论部分,轻而易举的理解本次实验, 然后再来吸收本次实验。
在 LVS 调度器 192.168.14.111
上配置 VIP 地址 192.168.14.200
。
执行以下命令:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vi ifcfg-ens33:0
添加以下内容:
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.14.200
NETMASK=255.255.255.255
激活虚拟 IP:
ifup ens33:0
ifconfig ens33:0
验证输出类似以下内容:
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
inet 192.168.14.200
netmask 255.255.255.255
出现了error但是不用管
修改 /etc/sysctl.conf
文件,关闭 ICMP 重定向:
vi /etc/sysctl.conf
添加以下内容:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
应用配置:
sysctl -p
安装 ipvsadm
工具:
yum -y install ipvsadm
配置调度规则:
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
查看配置:
ipvsadm -ln
在每台 Nginx 节点服务器(192.168.14.112
和 192.168.14.113
)上配置虚拟 IP 地址。
以下操作在两台nginx服务器上执行 都一样的命令 除了网页区分一下
执行以下命令:
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vi ifcfg-lo: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:
ifup lo:0
ifconfig lo:0
验证输出类似以下内容:
lo:0: flags=73<UP,LOOPBACK,RUNNING>
inet 192.168.14.200
netmask 255.255.255.255
修改 /etc/sysctl.conf
文件,调整 ARP 响应参数:
vi /etc/sysctl.conf
添加以下内容:
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
应用配置:
sysctl -p
临时路由 重启后会失效
route add -host 192.168.14.200 dev lo:0
永久的路由:
vim /etc/rc.local
route add -host 192.168.14.200 dev lo:0
执行以下命令安装 Nginx:
yum -y install nginx
创建测试页面:
如下我会公开源代码
启动并设置开机自启:
systemctl start nginx
systemctl enable nginx
重复以上步骤配置两台 Nginx 节点服务器。
vim /usr/share/nginx/html/index.html
<!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>
vim /usr/share/nginx/html/index.html
<!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>
http://192.168.14.200/
。ipvsadm -ln
输出示例:
[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 删除。