目录
1. 什么是LVS?
2. 集群体系结构图
3. lvs集群的类型
lvs-nat |
修改请求报文的目标
IP,
多目标
IP
的
DNAT
|
lvs-dr
|
操纵封装新的
MAC
地址
|
lvs-tun
|
在原请求
IP
报文之外新加一个
IP
首部
|
lvs-fullnat
|
修改请求报文的源和目标
IP
|
3.1 nat模式
nat模式数据逻辑
3.2 DR模式
DR模式数据逻辑
DR模式的特点
4. lvs的调度算法
4.1 lvs调度算法类型
4.1.1 lvs静态调度算法
4.1.2 lvs动态调度算法
4.1.3 在4.15版本内核以后新增调度算法
5. lvs部署命令介绍
5.1 lvs软件相关信息
5.2 ipvsadm命令
实操记录
DR模式
主机名 | lvs | webserver1 | webserver2 | client | router |
IP地址 | 172.25.254.50/24 172.25.254.200/32 | 172.25.254.10/24 172.25.254.200/32 | 172.25.254.20/24 172.25.254.200/32 | 192.168.0.200/24 | 192.168.0.100/24 172.25.254.100/24 |
网关 | vm1、lo | vm1、lo | vm1、lo | vm8 | vm8、vm1 |
网卡 | 172.25.254.100 | 172.25.254.100 | 172.25.254.100 | 192.168.0.100 |
# dnf install ipvsadm -y
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100 -r 172.25.254.10 -m
Service not defined
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 172.25.254.10:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 172.25.254.20:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 172.25.254.10:80 Masq 1 0 0
-> 172.25.254.20:80 Masq 1 0 0
在client上测试:
[root@client ~]# for i in {1..10}; do curl 192.168.0.100; done
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
成功~
6.LVS调度算法(十种)
静态:
RR
WRR
SH:绑定会话,有弊端,对源做
DH:对目的地做
动态:
LC:最少链接发,负载值=活动链接数x256+非活动链接数
WLC:权重最少链接,有弊端
SED:初始链接高权重,有弊端
所以先每人一个流量,再SED。
NQ:第一轮均匀分配,后续SED
LBLC:动态的DH算法,即使流量顶不住了它也不会去管。
LBLCR:带复制功能,如果流量顶不住了,它会把数据复制过来。
7.防火墙解决轮询问题
首先下载httpd所用到的模块:
[root@webserver1 ~]# yum install mod_ssl -y
[root@webserver1 ~]# systemctl restart httpd
[root@webserver2 ~]# systemctl restart httpd
[root@webserver2 ~]# netstat -antlupe | grep httpd
[root@lvs ~]# curl -k https://172.25.254.20
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 172.25.254.10:80 Masq 1 0 0
-> 172.25.254.20:80 Masq 1 0 0
[root@lvs ~]# ipvsadm -A -t 172.25.254.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:443 -r 172.25.254.10:443 -g
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:443 -r 172.25.254.20:443 -g
不合理,因为两个是分开控制的。
所以可以用防火墙标记解决轮询调度问题:
[root@lvs ~]# iptables -t mangle -nL
[root@lvs ~]# iptableds -t mangle -A PREROUTING -d 172.25.254.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
[root@lvs ~]# iptables -t mangle -nL
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 172.25.254.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 172.25.254.20 -g
[root@lvs ~]# ipvsadm -Ln
如果没做防火墙解决轮询:
做了防火墙解决轮询:
8.lvs持久链接 -p
[root@lvs ~]# ipvsadm -Ln
[root@lvs ~]# ipvsadm -E -f 66 -s rr -p 2