知识小课堂
1.负载均衡会话保持
session sticky:同一用户调度固定服务器
session replication:每台服务器拥有全部session
session server:专门的session服务器
2.LVS集群工作模式
NAT:
DR:(必须在同一网络,用改内核参数)
TUNNEL:(可以跨网络,不用改内核参数,需要单独增加tunnel网卡)
FULLNAT:
3.调度算法
静态:RR,WRR,SH,DH
动态:LC,WLC,SED,NQ,LBLC,LBLCR
LVS
LVS:负载调度器,可以一个端口对多个端口
LVS集群类型中的术语
VS:虚拟服务器
RS:真实服务器
CIP:客户端IP
VIP:虚拟服务器网卡的IP
DIP:连内网网卡的IP
RIP:真正服务器的IP
访问流程:CIP-VIP-DIP-RIP
DR模型需要关闭arp广播(修改内核参数)
all/arp_announce
all/arp_ignore
lo/arp_announce
lo/arp_ignore
LVS调度算法
静态算法和动态算法
静态:
RR:轮询,雨露均沾
WRR:加权轮询,加优先级
SH:session sticky,访问一次就绑定IP,以后一直访问这个服务器
DH:目标地址哈希,将目标地址进行缓存
动态:(根据后端服务器负载情况进行调度,cost,越小,优先级越高)六种算法区别在于怎么算cost值
LC:最少连接数
WLC:默认调度算法,考虑了权重
SED:初始连接高权重优先,不公平
NQ:第一轮轮询,后续SED
LBLC:动态DH算法,根据负载调度
LBLCR:带复制功能的LBLC
新增调度算法三种MH,SH,FO
LVS相关软件
ipvsadm
安装:apt -y install ipvsadm
save 保存规则
restore 恢复规则
命令:
ipvsadm
-A 创建集群
-a 增加集群服务器成员
-L 查看集群,一般跟n一起使用,显示IP,不转换主机名,-Ln,顺序不能变
-D 清空集群
-t tcp协议 -u udp协议
-r 后端服务器
-d 删除某个后端服务器
-C 清空规则
-e 改权重后端服务器
-w 权重比例
-p 会话保持 默认360秒
-f 根据防火墙标签建集群
创建格式:ipvsadm -A -t 本机IP和端口号
添加格式:ipvsadm -a -t 集群端口号(10.0.0.100:80) -r 添加的主机IP和端口号
不指定工作模式,默认DR模式
不指定调度算法,默认wlc算法
route DR模式 直接路由 -g
Masq NAT模式 -m
TUNNEL TUNNEL模式 -i
ubuntu
vim /etc/default/ipvsadm
auto=true #修改为开机自启
ipvsadm-save -n >> /etc/ipvsadm.rulers #将集群规则保存至文件内,永久实现
ipvsadm-restore > 文件名 #恢复集群
rocky
systemctl enable ipvsadm.service
缺点:如果有服务器挂了,依然会往坏的服务器上调度
实战案例-NAT模式
环境准备:
四台实例
client:192.168.10.123 (仅主机模式)
LVS: 10.0.0.100 VIP:192.168.10.100 (仅主机模式)
RS1: 10.0.0.8 GW:10.0.0.100
RS2: 10.0.0.18 GW:10.0.0.100
LVS服务器:
安装:apt -y install ipvsadm
创建集群,添加集群
[root@ubuntu2004 ~]#ipvsadm -A -t 192.168.10.100:80 -s rr #rr指定算法
[root@ubuntu2004 ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.128:80 -m #m指定模式
[root@ubuntu2004 ~]#ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.129:80 -m
开启IP转发
[root@ubuntu2004 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@ubuntu2004 ~]#sysctl -p
net.ipv4.ip_forward = 1
改成wrr模式,比例为3:1
[root@ubuntu2004 ~]#ipvsadm -E -t 192.168.10.100:80 -s wrr
[root@ubuntu2004 ~]#ipvsadm -e -t 192.168.10.100:80 -r 10.0.0.128:80 -w 3 -m
RS1:RS2:
安装相关服务软件:httpd mysql-server 等
实战案例-DR模式
单网段
环境准备:
五台实例
client:192.168.10.123 GW:192.168.10.200 (仅主机模式)
Router: eth0:10.0.0.200 eth1:192.168.10.200(仅主机模式)
LVS: 10.0.0.10 VIP: lo: 10.0.0.100/32 GW:10.0.0.200(必须有)
RS1: 10.0.0.8 VIP: lo: 10.0.0.100/32 GW:10.0.0.200
RS2: 10.0.0.18 VIP: lo: 10.0.0.100/32 GW:10.0.0.200
Router服务器:
开启IP转发
[root@route ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@route ~]#sysctl -p
net.ipv4.ip_forward = 1
LVS服务器:
关闭IP转发
[root@lvs ~]#sysctl -w net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
创建集群,添加集群
[root@lvs ~]#ipvsadm -A -t 10.0.0.10:80 -s rr
[root@lvs ~]#ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.128:80 -g
[root@lvs ~]#ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.129:80 -g
#修改内核参数:修改后将不用添加网关,不做反向校验
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/eth0/rp_filter
RS1:RS2:
配置VIP时需将以下配置关闭,以免产生冲突
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
永久修改需修改配置文件:
[20:48:03 root@rs1 ~]# vim /etc/sysctl.conf
多网段
环境准备:
五台实例
client:192.168.10.101 GW:192.168.10.200 (仅主机模式)
Router: eth0:10.0.0.200 eth0:1:172.16.0.200 eth1:192.168.10.200(仅主机模式)
LVS: 10.0.0.10 VIP: lo: 172.16.0.100/32 GW:10.0.0.200(必须有)
RS1: 10.0.0.8 VIP: lo: 172.16.0.100/32 GW:10.0.0.200
RS2: 10.0.0.18 VIP: lo: 172.16.0.100/32 GW:10.0.0.200
实战案例-TUNNEL模式
环境准备:
五台实例
client:192.168.10.123 GW:192.168.10.200 (仅主机模式)
Router: eth0:10.0.0.200 eth1:192.168.10.200(仅主机模式)
LVS: 10.0.0.10 VIP: tunl0: 10.0.0.100/32 GW:10.0.0.200(必须有)
RS1: 10.0.0.8 VIP: tunl0: 10.0.0.100/32 GW:10.0.0.200
RS2: 10.0.0.18 VIP: tunl0: 10.0.0.100/32 GW:10.0.0.200
lvs和rs中间可以跨广域网,加路由
TUNNEL有专用的网卡,不能绑定在会环网卡上
开启tunnel网卡并配置tunnel网卡:ifconfig tunl0 10.0.0.100 netmask 255.255.255.255 up
lvs服务器
创建集群,添加集群
[root@lvs ~]#ipvsadm -A -t 10.0.0.10:80 -s rr
[root@lvs ~]#ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.128:80 -i
[root@lvs ~]#ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.129:80 -i
如果是在同一网络,则不用加内核参数,如果在同一网段,需要修改内核参数
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
不做反向校验,修改内核参数
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
防火墙标签
将两个端口贴一个标签,同时访问时,会识别到是同一个服务,就会分别调度,mangle贴标签
iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
创建集群,添加集群
ipvsadm -A -f 66 -s rr #-f 根据防火墙标签建集群
ipvsadm -a -f 66 -r 10.0.0.8 -i
ipvsadm -a -f 66 -r 10.0.0.18 -i