LVS负载均衡的两种调度模式:NAT和DR

概述:Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。我国章文嵩博士在1998年五月创建,默认编译为ip_vs内核模块,而在linux kernel的2.6版本之后kernel是直接支持ipvs的;

LVS是工作在OSi模型中的第四层,也就是传输层。

优势:LVS承受负载能力高、稳定、占用服务器资源小

缺点:适配场景、配置较麻烦、不支持节点的健康检查机制

 

LVS一般有三种工作模式:NAT、TUN、DR,其中常用的是NAT和DR模式

 

案例一:搭建LVS的NAT模式

  其中CIP和VIP是外网地址(本地测试用VMWare桥接模式来模拟)

  DIP和RIP是内网地址(本地测试用VMnet1仅主机模式模拟)

  因为客户端访问的目标地址是VIP,与RS服务器的不一致,所以RS服务器接受的请求不能直接返回给客户端,而是要通过调度器再返回到客户端,所以调度器的压力会很大,调度器也容易成为整个集群框架的瓶颈

 

系统 所需IP 所需软件

CentOS7.4/lB

DIP:192.168.92.101

VIP:192.168.0.88

镜像ISO文件里面有
CentOS7.4/RS1 RIP1:192.168.92.102 镜像ISO文件里面有
CentOS7.4/RS2 RIP2:192.168.92.103 镜像ISO文件里面有
CentOS7.4/RS3 RIP3:192.168.92.104 镜像ISO文件里面有
CentOS7.4/Client CIP:192.168.0.104 镜像ISO文件里面有

 

1.安装三台Real Server的httpd服务,由于是测试这里直接采用yum安装的方式(要注意Real Server的网关要指向LB的DIP)

1
2
3
4
5
6
7
[root@rs1 ~]#yum -y install httpd
 
[root@rs1 ~]#echo "this is $(hostname)" > /var/www/html/index.html        #三个服务器都写一个简单的页面,用来确定客户端访问的时候是访问的那一台Real Server
 
[root@rs1 ~]#systemctl start httpd
 
[root@rs1 ~]#systemctl enable httpd

  

2.配置lb服务器              

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@lb ~]#echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf      #开启路由转发功能
 
[root@lb ~]#sysctl -p                              #使设置生效
 
[root@lb ~]#modprobe ip_vs                           #加载ip_vs内核模块
 
[root@lb ~]#lsmod |grep ip_vs                         #查看内核模块是否开启
 
[root@lb ~]#yum -y install ipvsadm                      #安装ip_vs规则编写工具
 
[root@lb ~]#systemctl stop ipvsadm                      #清空原有内部规则
 
[root@lb ~]#ipvsadm -A -t 192.168.0.88:80 -s -rr              #指定集群的VIP地址,rr表示调度算法为轮询
 
[root@lb ~]#ipvsadm -a -t 192.168.0.88:80 -r 192.169.92.102 -m      #添加ld所能调度的服务器:RS1;-m表示NAT模式
 
[root@lb ~]#ipvsadm -a -t 192.168.0.88:80 -r 192.168.92.103 -m      #添加ld所能调度的服务器:RS2
 
[root@lb ~]#ipvsadm -a -t 192.168.0.88:80 -r 192.168.92.104 -m      #添加ld所能调度的服务器:RS3
 
[root@lb ~]#ipvsadm-save > /etc/ipvsadm_guize                #将规则保存到指定文件里(该文件可以自己定义),当规则清除了的时候可以通过:ipvsadm -R < /etc/ipvsadm_guize 命令来重新生成规则
 
[root@lb ~]#ipvsadm -L -n                            #查看规则情况

  

3.客户端访问测试

1
2
3
[root@client ~]#yum -y install elinks
 
[root@client ~]#elinks --dump http://192.168.0.88                #重复执行盖命令看执行访问页面是否会变化

  

 

案例二:搭建LVS的DR模式

 

  DR模式由于RS服务器也有一个VIP,所以当RS服务器收到请求之后,可以直接通过网关(路由器)直接将请求返回给客户端,因此相比于NAT模式来说LVS调度器的压力会小很多

系统 所需IP 所需软件
CentOS7.4/LB

DIP:192.168.92.101

VIP:192.168.92.88

镜像ISO文件里面有
CentOS7.4/RS1

RIP:192.168.92.102

VIP:192.168.92.88

镜像ISO文件里面有
CentOS7.4/RS2

RIP:192.168.92.103

VIP:192.168.92.88

镜像ISO文件里面有
CentOS7.4/RS3

RIP:192.168.92.104

VIP:192.168.92.88

镜像ISO文件里面有
CentOS7.4/GW

①ens33:192.168.0.100

②ens37:192.68.92.100

镜像ISO文件里面有
CentOS7.4/Client CIP:192.168.0.140 镜像ISO文件里面有

 

1.三台RS服务器安装httpd服务,采用yum安装的方式,这里只列举一台

1
2
3
4
5
6
7
[root@rs1 ~]#yum -y install httpd
 
[root@rs1 ~]#echo "this is $(hostname)" >> /var/www/html/index.html
 
[root@rs1 ~]#systemctl start httpd
 
[root@rs1 ~]#systemctl enable httpd

  

2.配置LVS调度器的VIP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@lb ~]#cat <<END >/etc/sysconfig/network-scripts/ifcfg-ens33:0      
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.92.88
PREFIX=24
GATEWAY=192.168.92.100
END
 
[root@lb ~]#systemctl restart network
 
[root@lb ~]#ip a|grep 192.168 

  

3.开启调度器的ip_vs内核调度功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@lb ~]#modprobe ip_vs   
     
[root@lb ~]#lsmod |grep ip_vs
 
[root@lb ~]#yum -y install ipvsadm
 
[root@lb ~]#systemctl stop ipvsadm
 
[root@lb ~]#ipvsadm -A -t 192.168.92.88:80 -s -rr   
           
[root@lb ~]#ipvsadm -a -t 192.168.92.88:80 -r 192.169.92.102 -g         #-g表示采用DR模式调度,DR模式调度不支持端口转发,  
 
[root@lb ~]#ipvsadm -a -t 192.168.92.88:80 -r 192.168.92.103 -g    
  
[root@lb ~]#ipvsadm -a -t 192.168.92.88:80 -r 192.168.92.104 -g
 
[root@lb ~]#ipvsadm -Ln
 
[root@lb ~]#ipvsadm-save > /etc/ipvsadm_guize

  

4.在RS上的本地回环网卡添加一个VIP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@lb ~]#echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore     #抑制arp广播
 
[root@lb ~]#echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
 
[root@lb ~]#echo "1" > /proc/sys/net/ipv4/conf/all/arp_announce
 
[root@lb ~]#echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
 
[root@lb ~]#cat <<END >/etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.92.88
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0
END
 
[root@lb ~]#systemctl restart network
 
[root@lb ~]#ip a|grep 192.168

  

5.客户端访问测试

 

  

1
 
posted @   看见酵母菌  阅读(677)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示