3、LVS/DR 模式
实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关
主机名 | ip | 系统 | 用途 |
---|---|---|---|
client | 172.16.147.1 | mac | 客户端 |
lvs-server | 172.16.147.154 | centos7.5 | 分发器 |
real-server1 | 172.16.147.155 | centos7.5 | web1 |
real-server2 | 172.16.147.156 | centos7.5 | web2 |
vip for dr | 172.16/147.200 | (真实场景是公网ip) |
2、LVS/DR模式实施
1、准备工作(集群中所有主机)关闭防火墙和selinux
[root@lvs-server ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.147.154 lvs-server 172.16.147.155 real-server1 172.16.147.156 real-server2
2、Director分发器配置
配置VIP
[root@lvs-server ~]# ip addr add dev ens33 172.16.147.200/32 #设置VIP [root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用 [root@lvs-server ~]# service ipvsadm start #启动 注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录 需要手动生成文件 [root@lvs-server ~]# 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
[root@lvs-server ~]# ipvsadm -C #清除内核虚拟服务器表中的所有记录。 [root@lvs-server ~]# ipvsadm -A -t 172.16.147.200:80 -s rr [root@lvs-server ~]# ipvsadm -a -t 172.16.147.200:80 -r 172.16.147.155:80 -g [root@lvs-server ~]# ipvsadm -a -t 172.16.147.200:80 -r 172.16.147.156:80 -g [root@lvs-server ~]# service ipvsadm save #保存方式一,使用下面的保存方式,版本7已经不支持了 [root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式二,保存到一个文件中 [root@lvs-server ~]# 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 [root@lvs-server ~]# ipvsadm -L -n [root@lvs-server ~]# ipvsadm -L -n --stats #显示统计信息 1. Conns (connections scheduled) 已经转发过的连接数 2. InPkts (incoming packets) 入包个数 3. OutPkts (outgoing packets) 出包个数 4. InBytes (incoming bytes) 入流量(字节) 5. OutBytes (outgoing bytes) 出流量(字节) [root@lvs-server ~]# 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 #为了测试效果,提供不同的页面(以下两台real-server都操作)
[root@real-server1 ~]# yum install -y nginx [root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html 两台机器都安装,按顺序添加不同的主机名以示区分 [root@real-server1 ~]# ip addr add dev lo 172.16.147.200/32 #在lo接口上绑定VIP [root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播 [root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包 [root@real-server1 ~]# systemctl start nginx [root@real-server1 ~]# 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、测试
[root@client ~]# elinks -dump http://172.16.147.200
8、LVS的调度算法
LVS的调度算法分为静态与动态两类。
1、静态算法(4种)
只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
①.RR:轮叫调度(Round Robin)
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
②.WRR:加权轮叫(Weight RR)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
③.DH:目标地址散列调度(Destination Hash )
根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
④.SH:源地址 hash(Source Hash)
源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
2、动态算法(6种)
前端的调度器会根据后端真实服务器的实际连接情况来分配请求
①.LC:最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
③.SED:最短期望延迟调度(Shortest Expected Delay )
在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
④.NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲。
⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
补充:
自己的总结:关于临时DR配置的
DR模式需要解决的问题
1、同一个网络中有3个VIP
假如lvs的VIP地址是192.168.91.130
为了让后台发包的时候直接发给客户端,所以要在real-server 中添加lvs的VIP lo
ip addr add 192.168.91.130/32 dev lo
这是添加lvs的本地回环ip,配置一个独一无二的ip地址,表示32位都指的是主机,没有网络位了
后端的两个VIP实现内部网卡,不会与lvs的负载均衡器冲突
2、为什么client不会直接发送包给后端
配置后端的realserver对arp请求静默
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
3、如何保证后端使用VIP作为回包的源地址
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置后端以精确ip地址回包
4、后端服务器都有VIP,如何进行分发包采用更底层的mac地址进行分发。
加一块新网卡
访问不会受限制
注意在真实的服务器上要把自己的lo设置的ip地址看好
脚本
写一下lvs-dr的脚本
开机自启(永久配置和临时生效)
lvs 中的资源配置永久生效和临时生效
生产环境中全部配置为永久生效哦
1、sysctl.conf 中的配置
永久生效: vim /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 sysctl -p 临时生效: echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
2、单块网卡添加多个ip[vip]
永久生效 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPADDR=192.168.241.155 IPADDR2=192.168.241.166 IPADDR3=192.168.241.177 PREFIX=24 GATEWAY=192.168.241.2 DNS1=114.114.114.114 DEVICE="ens33" ONBOOT="yes" 临时生效 ip addr add 192.168.241.155/24 dev ens33 ip addr add 192.168.241.166/24 dev ens33 ip addr add 192.168.241.177/24 dev ens33
3、默认路由、静态路由
永久生效 vim /etc/sysconfig/network-scripts/route-ens33 192.168.241.0/24 via 10.36.139.1 dev ens33 网段 下一跳 跳转的ip 设备 ens33 临时生效 ip route add 192.168.241.0/24 via 10.36.139.1 dev ens33 # 可以看出,文件中写的内容就是临时指令的后半段
4、ipvsadm规则
永久生效 方法1、通过ipvsadm 服务管理 1、配置规则 2、ipvsadm-save 保存到 /etc/sysconfig/ipvsadm 文件中 3、将ipvsadm 设置为开机启动 systemctl enable ipvsadm 方法2、通过rc.local 设置 1、ipvsadm -S > /tmp/ipvs 2、rc.local: ipvsadm -R < /tmp/ipvs