欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#LVS学习(3)#LVS实现四层负载均衡--基于DR模式

程序员文章站 2024-02-01 15:00:58
...

LVS实现四层负载均衡–基于DR模式

1、直接路由(Direct routing)模式(LVS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
#LVS学习(3)#LVS实现四层负载均衡--基于DR模式
实验说明:
1.网络使用桥接模式
2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域
3.所有节点网关均指定真实网关

主机名 ip 系统 用途
client 10.11.67.88 windows10 客户端
lvs-server 10.11.67.82 centos7.6 分发器
real-server1 10.11.67.79 centos7.6 web1
real-server2 10.11.67.54 centos7.6 web2
vip for dr 10.11.67.84 (真实场景是公网ip)
2、LVS/DR模式实施

1、准备工作(集群中所有主机)关闭防火墙和selinux
#本地域名解析

[aaa@qq.com ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.11.67.82 lvs-server
10.11.67.79 web1
10.11.67.54 web2

2、Director分发器配置

配置VIP

[aaa@qq.com ~]# ip addr add dev ens33 10.11.67.84/32 #设置VIP
[aaa@qq.com ~]# yum install -y ipvsadm   #RHEL确保LoadBalancer仓库可用
[aaa@qq.com ~]# service ipvsadm start  #启动
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
需要手动生成文件
[aaa@qq.com ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

定义LVS分发策略

-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到realserverip
-s:算法
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr:轮循
如果添加ip错了,删除命令如下:
# ip addr del 172.16.147.200 dev ens33
[aaa@qq.com ~]# ipvsadm -C  #清除内核虚拟服务器表中的所有记录。
[aaa@qq.com ~]# ipvsadm -A -t 10.11.67.84:80 -s rr 
[aaa@qq.com ~]# ipvsadm -a -t 10.11.67.84:80 -r web1 -g 
[aaa@qq.com ~]# ipvsadm -a -t 10.11.67.84:80 -r web2 -g  
[aaa@qq.com ~]# service ipvsadm save #保存方式一,使用下面的保存方式,版本7已经不支持了
[aaa@qq.com ~]# ipvsadm -S > /etc/sysconfig/ipvsadm  #保存方式二,保存到一个文件中
[aaa@qq.com ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.147.100:80 rr
  -> 172.16.147.155:80            Route   1      0          0         
  -> 172.16.147.156:80            Route   1      0          0         
     
[aaa@qq.com ~]# ipvsadm -L -n       
[aaa@qq.com ~]# ipvsadm -L -n --stats    #显示统计信息
1. Conns    (connections scheduled)  已经转发过的连接数
2. InPkts   (incoming packets)       入包个数
3. OutPkts  (outgoing packets)       出包个数
4. InBytes  (incoming bytes)         入流量(字节)  
5. OutBytes (outgoing bytes)         出流量(字节)
[aaa@qq.com ~]# ipvsadm -L -n --rate	#看速率
1. CPS      (current connection rate)   每秒连接数
2. InPPS    (current in packet rate)    每秒的入包个数
3. OutPPS   (current out packet rate)   每秒的出包个数
4. InBPS    (current in byte rate)      每秒入流量(字节)
5. OutBPS   (current out byte rate)      每秒出流量(字节)

3、所有RS配置

配置好网站服务器,测试所有RS #为了测试效果,提供不同的页面(以下两台web都操作)

[aaa@qq.com ~]# yum install -y nginx
[aaa@qq.com ~]# echo "web1web1" >> /usr/share/nginx/html/index.html
两台机器都安装,按顺序添加不同的主机名以示区分
[aaa@qq.com ~]# ip addr add dev lo 10.11.67.84/32   #在lo接口上绑定VIP
[aaa@qq.com ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  #忽略arp广播
[aaa@qq.com ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[aaa@qq.com ~]# systemctl start nginx 
[aaa@qq.com ~]# systemctl enable  nginx 
=============================================================================
因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.  
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore 
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce   
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的
4、测试
[aaa@qq.com ~]# elinks -dump http://10.11.67.84