【LVS】nat模式+dr模式+防火墙标签解决轮询错误

++集群:++同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的

++分布式:++ 一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式 中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率。
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败 。

一.LVS--负载调度器

  • VS: Virtual Server ,负责调度
  • RS:RealServer,负责真正提供服务

lvs概念
VS : Virtual Server
RS : Real Server
CIP : Client IP
VIP: Virtual serve IP VS 外网的 IP
DIP: Director IP VS 内网的 IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
lvs****集群的类型
lvs-nat :
修改请求报文的目标 IP, 多目标 IP 的 DNAT
lvs-dr : 操纵封装新的 MAC 地址
lvs-tun :
在原请求 IP 报文之外新加一个 IP 首部
lvs-fullnat : 修改请求报文的源和目标 IP


案例:NAT模式

图形:

四台服务器都是采用的rhel9

webserver1//rs1

仅主机模式

准备环境:

安装软件编写html


webserver2//rs2

仅主机模式

准备环境:

安装软件编写html


lvs配置

2块网卡:/nat/仅主机

准备环境:

内核路由功能配置

复制代码
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#sysctl -p   #生效
net.ipv4.ip_forward=1

下载软件

后端调用主机

测试rs:

在lvs虚拟机上ping并且访问他的内容


客户机:172.25.254.200

总的测试:



案例:DR模式

图形:

lvs webserver1 webserver2处于同一个vlan里面都是仅主机模式

client route 处于同一个vlan里面都是nat模式

解决 vip 响应问题
DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各 RS 使用 arptables
(3) 在各 RS 修改内核参数,来限制 arp 响应和通告的级别
限制响应级别 :arp_ignore
0: 默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
0: 默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1: 尽量避免将接口信息向非直接连接网络进行通告
2: 必须避免将接口信息向非本网络进行通告

rs主机1

仅主机模式

准备环境:

安装软件编写html

静态绑定:

检查:

添加vip


rs主机2

仅主机模式

准备环境:

安装软件编写html

静态绑定:

检查:

添加vip


路由器route

2块网卡:/nat/仅主机

准备环境

内核路由功能配置

复制代码
#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#sysctl -p   #生效
net.ipv4.ip_forward=1

lvs配置

仅主机模式

准备环境

添加vip

在lvs虚拟机上ping并且访问他的内容

后端调动rs1和rs2


客户端

nat模式

准备环境

测试:



案例:防火墙标签解决轮询错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

复制代码
在RS1和RS2中安装mod_ssl并重启apache
]# yum install mod_ssl -y
]# systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g
[root@lvs ~]# 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.0.100:80 rr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
TCP 192.168.0.100:443 rr
-> 192.168.0.101:443 Route 1 0 0
-> 192.168.0.102:443 Route 1 0 0
测试问题
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
RS1 server - 192.168.0.101
RS1 server - 192.168.0.101
当访问vip时两次调度都到了

为了解决此问题:
以下实验将会实现以下功能
环境准备(以上即可)
RS1和RS2

  • 安装mod_ssl模块让rs支持https

重启httpd

查看端口

在lvs进行多端口标记

多端口自动识别

在客户端client

测试

相关推荐
电商API_180079052474 小时前
京东商品详情API技术文章
大数据·运维·人工智能·网络爬虫
三言老师5 小时前
秘诀-如何远程SSN访问家里的八台电脑(frp 实操方案)
linux·运维·ssh
躺不平的理查德6 小时前
ARCH与交叉编译器的关系
服务器·arm
举手7 小时前
Dispatcher模块剖析
linux·c++
BTU_YC7 小时前
Docker Compose 部署 DozerDB 完整教程
运维·docker·容器
谢慧琼8 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
allforgood8 小时前
运行容器
linux
Light_It9 小时前
Linux 内核参数 pci-stub.ids=
linux·kernel
RisunJan9 小时前
Linux命令-scriptreplay(终端会话回放)
linux·运维·chrome
spencer_tseng10 小时前
[kylin & linux] install docker
linux·docker·kylin