基于 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 .
相关推荐
BingoGo21 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack21 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1234 天前
matlab画图工具
开发语言·matlab
dustcell.4 天前
haproxy七层代理
java·开发语言·前端