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)

[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服务器              

  

[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.客户端访问测试

[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安装的方式,这里只列举一台

[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

[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内核调度功能

[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

[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.客户端访问测试

 

  


posted @ 2019-07-01 16:33  看见酵母菌  阅读(649)  评论(0编辑  收藏  举报