基于 openEuler 构建 LVS-DR 群集

一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式

1. NAT 模式

工作原理:

客户端请求发送到负载均衡器(LVS)。

LVS 修改请求的目标 IP 地址为后端服务器的 IP 地址,并将请求转发。

后端服务器处理请求后,将响应返回给 LVS。

LVS 再将响应的源 IP 地址修改为自己的 IP 地址,返回给客户端。

优势:

配置简单:NAT 模式相对容易配置,适合初学者或简单场景。

隐藏后端服务器:后端服务器的真实 IP 地址对客户端不可见,增强了安全性。

支持跨网段:LVS 和后端服务器可以位于不同的网络段,适合分布式部署。

劣势:

性能瓶颈:LVS 需要处理所有进出流量,可能成为性能瓶颈,尤其是在高流量场景下。

单点故障:LVS 是唯一的入口和出口,一旦故障,整个系统将不可用。

网络开销:LVS 需要修改每个数据包的 IP 地址,增加了网络开销。

2. DR 模式

工作原理:

客户端请求发送到负载均衡器(LVS)。

LVS 将请求转发给后端服务器,但不修改 IP 地址,仅修改 MAC 地址。

后端服务器直接响应客户端,不经过 LVS。

优势:

高性能:LVS 只处理入站流量,出站流量由后端服务器直接返回客户端,减少了 LVS 的负载,性能更高。

低延迟:响应数据包不经过 LVS,减少了网络延迟。

扩展性强:适合高流量、高并发的场景,能够轻松扩展后端服务器。

劣势:

配置复杂:DR 模式需要后端服务器配置 VIP(Virtual IP),并且需要确保后端服务器不响应 ARP 请求,配置较为复杂。

网络限制:LVS 和后端服务器必须在同一局域网(LAN)内,不能跨网段。

暴露后端服务器:后端服务器的真实 IP 地址可能暴露给客户端,存在一定的安全风险。

二、基于 openEuler 构建 LVS-DR 群集

1、实验环境

|-------------|----------------|-----------------|
| 主机名 | IP地址 | 角色 |
| openEuler-2 | 192.168.183.11 | Director Server |
| openEuler-1 | 192.168.183.12 | Real Server1 |
| openEuler-3 | 192.168.183.13 | Real Server2 |
| openEuler-4 | 192.168.183.14 | Client |

2、安装nginx服务器并设置静态页面(两台RS上配置一致)

复制代码
[root@openEuler-1 ~]# yum install nginx -y
 
[root@openEuler-1 ~]# echo "web test page, ip is `hostname -I`." > /usr/share/nginx/html/index.html
 
[root@openEuler-1 ~]# systemctl enable --now nginx
 
[root@openEuler-1 ~]# curl localhost
web test page, ip is 192.168.183.12 .

3、添加VIP的相关配置

在两台RS和DS上:

复制代码
[root@openEuler-2 ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.183.10/32
Connection 'dummy-dummy1' (c54d631d-3f2f-463c-b808-bd0f483e51fc) successfully added.
[root@openEuler-2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:29:96:40 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.11/24 brd 192.168.183.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe29:9640/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 52:0d:11:f4:39:6a brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.10/32 scope global noprefixroute dummy1
       valid_lft forever preferred_lft forever
    inet6 fe80::8a3f:23b2:85a2:66d6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

4、配置arp抑制(两台RS上配置)

复制代码
[root@open-1 ~]# vim /etc/sysctl.conf 
在最后加上四行
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.dummy1.arp_ignore = 1
> net.ipv4.conf.dummy1.arp_announce = 2

#使配置生效
[root@open-1 ~]# sysctl -p

5、LVS配置(DS上配置)

复制代码
[root@openEuler-2 ~]# yum install ipvsadm -y
[root@openEuler-2 ~]# ipvsadm -At 192.168.183.10:80 -s rr
[root@openEuler-2 ~]# ipvsadm -at 192.168.183.10:80 -r 192.168.183.12:80 -g
[root@openEuler-2 ~]# ipvsadm -at 192.168.183.10:80 -r 192.168.183.13:80 -g
[root@openEuler-2 ~]# 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.183.10:80 rr
  -> 192.168.183.12:80            Route   1      0          0
  -> 192.168.183.13:80            Route   1      0          0

6、clinet上测试

复制代码
[root@openEuler-4 ~]# for ((i=1;i<=6;i++))
> do
> curl 192.168.183.10
> done
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .
web test page, ip is 192.168.183.13 .
web test page, ip is 192.168.183.12 .
相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.13 分钟前
LVS集群技术
云原生·lvs
小灰灰搞电子28 分钟前
Qt 信号槽的扩展知识
开发语言·qt
nightunderblackcat36 分钟前
进阶向:Python图像处理,使用PIL库实现圆形裁剪
开发语言·图像处理·python
Kiri霧1 小时前
细谈kotlin中缀表达式
开发语言·微信·kotlin
想要成为祖国的花朵1 小时前
Java_Springboot技术框架讲解部分(二)
java·开发语言·spring boot·spring
Q_Q5110082851 小时前
python的小学课外综合管理系统
开发语言·spring boot·python·django·flask·node.js
勤奋的知更鸟1 小时前
JavaScript 性能优化实战:深入性能瓶颈,精炼优化技巧与最佳实践
开发语言·javascript·性能优化
Ruimin05191 小时前
LSV负载均衡
linux·运维·服务器·负载均衡·lvs
hqxstudying2 小时前
Java行为型模式---模板方法模式
java·开发语言·设计模式·代码规范·模板方法模式
weixin_443290692 小时前
【脚本系列】如何使用 Python 脚本对同一文件夹中表头相同的 Excel 文件进行合并
开发语言·python·excel