基于 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 .
相关推荐
不吃土豆的马铃薯9 分钟前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
数据法师24 分钟前
QuickSay :基于 Qt 的轻量级快捷短语管理工具
开发语言·qt
caimouse37 分钟前
Reactos 第1章 概述
c语言·开发语言·架构
.千余1 小时前
【C++】C++继承入门(下):友元、静态成员与菱形继承的底层逻辑
开发语言·c++·笔记·学习·其他
小短腿的代码世界1 小时前
行情快照与增量更新引擎:Qt在高频交易数据分发中的核心架构——你的行情推送为什么延迟了500ms?
开发语言·qt·架构
初中就开始混世的大魔王1 小时前
6 Fast DDS-传输层
开发语言·c++·中间件·信息与通信
2401_834636991 小时前
Keepalived + LVS (DR) + Nginx + NFS 高可用 Web 集群部署实战手册
前端·nginx·lvs
啊森要自信1 小时前
【GUI自动化测试】控件、鼠标键盘操作与多场景自动化
c语言·开发语言·python·adb·ipython
花北城1 小时前
【C#】ABP框架服务端开发
开发语言·c#·abp
电商API_180079052472 小时前
Python 实现闲鱼商品列表批量采集,接口异常重试机制搭建
大数据·开发语言·数据库·爬虫·python