LVS的 NAT 模式实验

文章目录

目录

文章目录

概要

IP规划与题目分析

实验步骤

一、nginx配置(rs1、rs2、rs3)

二、LVS配置

三、客户端配置

四、防火墙和selinux配置

实验结果

痛点解答


概要

LVS/NAT
lvs/nat网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址)--利用三层功能

++原理++:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!


IP规划与题目分析

|--------|-------|------------|---------|---------------------------------------------|
| 主机 | 角色 | 系统 | 网络 | IP |
| client | 客户端 | redhat 9.5 | 仅主机 | 172.25.250.129/24 |
| lvs | lvs | rocky | NAT/仅主机 | 172.25.250.131/24 DIP 172.35.100.200/24 VIP |
| rs1 | nginx | rocky | NAT | 172.25.250.129/24 |
| rs2 | nginx | rocky | NAT | 172.25.250.128/24 |
| rs3 | nginx | rocky | NAT | 172.25.250.127/24 |

RS:Real Server #后端请求处理服务器

VIP:Director Virtual IP #负载均衡器虚拟IP

DIP:Director IP #负载均衡器IP

RIP:Real Server IP #后端请求处理服务器IP


实验步骤

修改ip和主机名就不展示了,可以看我前面的文章

一、nginx配置(rs1、rs2、rs3)

++首先下载nginx++,防止等下修改网关后无法连接外网

复制代码
[root@rs1 ~]# yum install nginx -y
[root@rs2 ~]# yum install nginx -y
[root@rs3 ~]# yum install nginx -y

第二步启动nginx并进行配置(写入的内容为本机的ip地址,也可自行更改)

复制代码
systemctl start nginx
echo $(hostname -I) > /usr/share/nginx/html/index.html

第三步重启并检验

复制代码
systemctl restart nginx
curl 本机IP

++第四步修改网关++ (一定要修改,不然最后客户端拒绝)

复制代码
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.127/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.128/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.129/24 ipv4.gateway 172.25.250.131 connection.autoconnect yes

二、LVS配置

++首先++ 由于lvs上有仅主机的网卡,所以我们先添加一块网卡。进入虚拟机设置点击添加,添加后选择仅主机(++注意,由于新添加的网卡分配ip的方式是dhcp,若虚拟机在添加网卡之后没有分配ip地址,请启动dhcp,或者后面直接更改,没有仅主机网络先在虚拟机网络中添加++)

第二步下载ipvsadm(先确保虚拟机联网,可以看我前面的文章)

复制代码
yum install ipvsadm -y

第三步查看网卡配置并修改(如果NAME不一样则修改)

复制代码
[root@lvs ~]# nmcli c modify 'Wired connection 1' connection.id ens224
[root@lvs ~]#  nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens160  448cc681-b549-35ff-979a-2b57220d864c  ethernet  ens160 
ens224  9cdf1af9-86ab-3318-a810-680d4bee4027  ethernet  ens224 
lo      9f4232f5-ae88-49d5-8402-a30098bb5317  loopback  lo   

第四步修改网关(172.35.100为仅主机网段,172.25.250为NAT网段)

复制代码
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.131/24 ipv4.gateway 172.25.250.9 ipv4.dns 223.5.5.5 connection.autoconnect yes 
nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.35.100.200/24 ipv4.gateway 172.35.100.2 ipv4.dns 223.5.5.5 connection.autoconnect yes 


nmcli c up ens160
nmcli c up ens224

++修改后如图++

第五步配置IPVSADM

复制代码
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]# ipvsadm -A -t 172.35.100.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.127 -m -w 2
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.128 -m -w 2
[root@lvs ~]# ipvsadm -a -t 172.35.100.200:80 -r 172.25.250.129 -m -w 2
[root@lvs ~]# systemctl restart ipvsadm
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p

++tip:使用ipvsadm -Ln可以查看规则匹配++

++结果如图++

三、客户端配置

客户端只需要修改ip和网关

复制代码
[root@localhost ~]# hostnamectl hostname client
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.35.100.129/24 ipv4.gateway 172.35.100.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160
[root@client ~]# nmcli d show ens160 

四、防火墙和selinux配置

在每台主机上都要进行

复制代码
[root@lvs ~]# setenforce 0
[root@lvs ~]# systemctl stop firewalld.service

实验结果

++在客户端上curl 172.25.100.200出现不同的结果++

痛点解答

1.若在客户端上curl时出现连接超时,请检查您的lvs的NAT的网卡的IP地址是否为nginx服务器的网关。

2.若配置与步骤都没有问题,在客户端出现拒绝连接,请重启您的虚拟机。

3.若添加网卡后没有出现ip地址请检查虚拟机网络的仅主机网络,或者虚拟机是否为动态路由。

4.请下载服务之前不要修改网关,这回导致虚拟机丢失网络。

5.若虚拟机没有网络可以查看我之前的博客。

6.请将NAT与仅主机网段区分清楚,NAT的网关须在虚拟机网络配置查看,文中172.25.250.2的网关是我自己的,nginx三台服务器的网关一定要与NAT的ip地址一致。


++最后感谢阅览,谢谢您顺手三连,有问题可以留言++

相关推荐
Dontla3 分钟前
Modbus RTU ---> Modbus TCP透传技术实现(Modbus透传、RS485透传、RTU透传)分站代码实现、协议转换器
服务器·网络·tcp/ip
Wireless_wifi613 分钟前
QCN9274/QCN6274 WiFi 7 Modules: Transforming Mining & Oil Industries
linux·5g·service_mesh
若云止水36 分钟前
ngx_http_index_t
网络·网络协议·http
梅见十柒1 小时前
UNIX网络编程笔记:TCP、UDP、SCTP编程的区别
服务器·网络·c++·笔记·tcp/ip·udp·unix
JZC_xiaozhong1 小时前
单一主数据系统 vs. 统一主数据中心,哪种更优?
大数据·运维·企业数据管理·主数据管理·mdm管理·数据孤岛解决方案·数据集成与应用集成
一直走下去-明1 小时前
docker简单使用
运维·docker·容器
三块钱07941 小时前
ubuntu22.04 安装Jitsi meet 开源会议系统,代替腾讯会议
linux·运维·服务器·腾讯会议·会议系统·jitis meet
m0_740154671 小时前
SpringMVC 请求和响应
java·服务器·前端
多多*2 小时前
JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
java·运维·数据库·redis·mysql·java-ee·wpf