Linux服务之lvs集群与dr模式部署
目录
一.lvs相关概述
1.lvs集群的工作模式
2.lvs调度算法
3.ipvsadm工具
二.DR模式部署
一.lvs相关概述
1.lvs集群的工作模式
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址(直接路由)
- lvs-tun:隧道模式
- lvs-fullnat:修改请求报文的源和目标IP
2.lvs调度算法
根据其调度时是否考虑各RS当前的负载状态分为两种:
静态方法: 不管后端真实服务器的 状态,根据自身 算法进行调度
动态方法: 会根据后端服务器的状态来进行调度
仅根据算法本身进行调度
静态:
1、RR:roundrobin,轮询,较常用
2、WRR:Weighted RR,加权轮询,较常用 先算总权重再用自己的权重去除以总权重
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存
动态:Overhead 一个参考值来确定服务器是否忙这个值越小代表服务器越闲就会优先调度给闲的服务器
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、LC:least connections 适用于长连接应用 最小连接数 不考虑权重
Overhead=activeconns*256+inactiveconns
active 活动连接
inactive 非活动连接
2、WLC:Weighted LC,默认调度方法,较常用 默认调度加权最小连接数第一轮不合理
Overhead=(activeconns*256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接 权重小的空闲的
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等 检查 后端服务器忙不忙
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等
3.ipvsadm工具
常用选项及说明:
-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc 默认的 )
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
一w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
二.DR模式部署
调度器 - ubunutu 2204
apt update
apt install ipvsadm -y
ifconfig ens33:0 192.168.91.188/24 #添加虚拟ip
ipvsadm -A -t 192.168.91.188:80 -s rr
ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.100:80 -g
ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.101:80 -g
ipvsadm -Ln
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
真实服务器1:
yum install epel-release -y
yum install nginx -y
systemctl start nginx
echo "7-1" > /usr/share/nginx/html/index.html
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
ifconfig ens33:0 192.168.91.188/24 #添加虚拟ip
真实服务器2:
yum install epel-release -y
yum install nginx -y
systemctl start nginx
echo "7-2" > /usr/share/nginx/html/index.html
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
ifconfig ens33:0 192.168.91.188/24 #添加虚拟ip
不要再集群内测试
新打开一台测试
curl 192.168.91.188