第六次作业

一.对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。

LVS-NAT模式的优势

配置简单:NAT模式的配置相对容易,无需复杂的网络设置,适合初学者和小型网络环境。

网络架构灵活:由于使用了NAT技术,LVS调度器和后端服务器可以位于不同的网段,网络架构更加灵活。

安全性高:后端服务器的IP地址被隐藏,客户端无法直接访问后端服务器,增加了系统的安全性。

支持端口映射:可以将一个端口的流量映射到多个后端服务器的不同端口,增加了配置的灵活性。

操作系统兼容性好:后端服务器可以使用任意操作系统,无需特殊支持

LVS-DR模式的优势

高性能:请求报文经过调度器,但响应报文直接从后端服务器返回客户端,减少了调度器的负载,提高了整体性能。

低延迟:由于响应报文不经过调度器,减少了数据传输的路径,降低了延迟。

可扩展性强:适合大规模集群和高并发场景,能够有效分散网络流量。

无需地址转换:不修改报文的源IP和目标IP地址,减少了地址转换带来的性能开销。

支持公网IP:后端服务器可以使用公网IP,便于直接从互联网访问。

适用场景:

NAT模式适合小型集群或对安全性要求较高的场景,例如小型企业内部的负载均衡。

DR模式更适合高并发、大规模的负载均衡需求,例如大型网站或数据中心。

性能:

NAT模式在高负载下容易成为性能瓶颈,而DR模式可以有效分散流量,提高性能。

配置复杂度:

NAT模式配置简单,适合初学者;DR模式配置相对复杂,但性能更优。

二.总结表格:

以下是LVS负载均衡群集的NAT模式和DR模式的优势对比:

LVS-NAT模式适合小型集群或对配置简单性要求较高的场景,其优点在于配置容易、网络架构灵活,但性能和扩展性受限。

LVS-DR模式适合高并发、大规模的负载均衡需求,其优点在于高性能、低延迟和良好的可扩展性,但配置相对复杂,且对网络架构有一定要求。

基于 openEuler 构建 LVS-DR 集群

1、环境准备

准备好下面四台台服务器

2、Web服务器配置

在两台RS上安装并配置nginx服务:

复制代码
[root@openEuler-2 ~]# yum install nginx -y
 
[root@openEuler-2 ~]# echo "this is test page!(ip:`hostname -I`)" > /usr/share/nginx/html/index.html
 
[root@openEuler-2 ~]# systemctl enable --now nginx
 
[root@openEuler-2 ~]# curl localhost
this is test page!(ip:192.168.121.12 )
 
# 第二台RS配置同上

3、添加VIP的相关配置

在两台RS和DS上:

复制代码
[root@openEuler-1 ~]# nmcli con add type dummy ifname dummy1 ipv4.method manual ipv4.addresses 192.168.121.10/32
Connection 'dummy-dummy1' (7a44b435-72fc-4aa4-afb2-28bf52a1b5b4) successfully added.
[root@openEuler-1 ~]# 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:12:dd:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.121.11/24 brd 192.168.121.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe12:dd13/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 82:81:c6:9e:a9:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.121.10/32 scope global noprefixroute dummy1
       valid_lft forever preferred_lft forever
    inet6 fe80::1837:14b2:ae95:267a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
 
# 剩下二台RS配置同上

4、配置arp抑制

在两台RS上:

复制代码
[root@openEuler-2 ~]# cat >> /etc/sysctl.conf << EOF
> 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
> EOF
 
# 使其生效
[root@openEuler-2 ~]# sysctl -p
 
# 第二台RS配置同上

5、LVS配置

在DS上:

复制代码
[root@openEuler-1 ~]# yum install ipvsadm -y
[root@openEuler-1 ~]# ipvsadm -At 192.168.121.10:80 -s rr
[root@openEuler-1 ~]# ipvsadm -at 192.168.121.10:80 -r 192.168.121.12:80 -g
[root@openEuler-1 ~]# ipvsadm -at 192.168.121.10:80 -r 192.168.121.13:80 -g
[root@openEuler-1 ~]# 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.121.10:80 rr
  -> 192.168.121.12:80            Route   1      0          0
  -> 192.168.121.13:80            Route   1      0          0

相关参数说明

ipvsadm --help

-A 添加虚拟服务器

-t 设置群集地址(VIP,Virtual IP)

-s 指定负载调度算法

-a 添加真实服务器

-d 删除真实服务器

-r 指定真实服务器(Real Server)的地址

-m 使用NAT模式;-g、-i分别对应DR、TUN模式

-w 为节点服务器设置权重,默认为1

6、测试

在Client上:

复制代码
[root@localhost ~]# for ((i=1;i<10;i++)); do curl 192.168.121.10; done
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
this is test page!(ip:192.168.121.12 )
this is test page!(ip:192.168.121.13 )
相关推荐
lv__pf3 分钟前
09-深入理解AQS之独占锁ReentrantLock源码分析【TL 并发 09】
java·开发语言
这是程序猿24 分钟前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
quantdash_cc36 分钟前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
郝学胜-神的一滴1 小时前
C++20模板元编程 01:从零吃透模板核心底层逻辑
开发语言·c++·vscode·程序人生·开源
闲云野鹤在人间1 小时前
Docker入门|第3章 镜像详解
linux·网络·docker·容器·centos·云计算·php
sbjdhjd1 小时前
从兼容路由到任意方法调用:ThinkPHP 5.1.29 RCE 复现与调试复盘 | 06
经验分享·安全·网络安全·数据挖掘·开源·php·rce
可乐鸡翅yeah_1 小时前
HLS流媒体首屏起播慢深度优化,从分片、索引、播放器全链路调优
开发语言·javascript·ecmascript·m3u8·m3u8在线
luj_17681 小时前
生物体如何应对功能击穿?
c语言·开发语言·c++·经验分享·算法
luj_17681 小时前
击穿分析五大关键步骤
开发语言·网络·c++·经验分享·算法
wuyk5551 小时前
从零吃透 MQTT 通信|第 11 章 MQTT 项目调试验证、性能优化、常见疑难问题、OTA 升级基础
c语言·开发语言·stm32·学习·性能优化