第六次作业

一.对比 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 )
相关推荐
黑客老李21 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
开开心心就好30 分钟前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
特立独行的猫a35 分钟前
Nuxt.js 中的路由配置详解
开发语言·前端·javascript·路由·nuxt·nuxtjs
勤奋的知更鸟1 小时前
Java编程之原型模式
java·开发语言·原型模式
珂朵莉MM1 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
香蕉炒肉1 小时前
Java优化:双重for循环
java·开发语言
傍晚冰川2 小时前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
PingdiGuo_guo2 小时前
C++智能指针的知识!
开发语言·c++
黄雪超2 小时前
JVM——打开JVM后门的钥匙:反射机制
java·开发语言·jvm
我命由我123452 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea