theme: qklhk-chocolate
1、LVS集群
LVS 即 linux virtual server,是Linux虚拟服务器。
系统性能扩展方式:
- Scale UP 垂直扩展: 向上扩展,增强,性能更强的计算机运行同样的服务 升级单机的硬件设备
- Scale Out 水平扩展:向外扩展,增加设备,并行地运行多个服务 调度分配问题
LVS默认的规则:
- 默认工作模式:DR模式(直连路由模式)
- 默认调度算法:WLC 加权最小连接
1.1 Cluster
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统。
集群 Cluster 分为三种类型:
- LB 负载均衡: Load Balancing,多个主机组成,每个主机只承担一部分访问请求
- HA 高可用: High Availiablity,避免 SPOF(single Point Of failure) 单点故障
- HPC 高性能: High-performance computing
小拓展: HA高可用集群实现
keepalived:vrrp协议 虚拟路由协议
1.2 软件
- LVS:四层 nginx 负载均衡软件,支持百万级并发
- haproxy:支持七层,十万级
- nginx:支持七层,万级
2、LVS 术语
LVS是四层:主要通过ip、协议、端口号。
四层协议是:tcp和udp;http是七层协议。
简称 名称 全称 VS 代理服务器 Virtual Server RS 真实服务器 Real Server(lvs) CIP 客户机IP Client IP VIP 代理服务器 外网IP Virtual serve IP DIP 代理服务器 内网IP Director IP RIP 真实服务器IP Real server IP流程: CIP——VIP——DIP——RIP
3、LVS 工作模式
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址(直接路由)
- lvs-tun:隧道模式
- lvs-fullnat:修改请求报文的源和目标IP
3.1 LVS-NAT 模式⭐⭐⭐
- 客户端访问时,源地址不变,目的地址一直在变;
- 服务端回复时,目的地址不变,源地址一直在变。
3.2 LVS-DR 模式
DR模式,是LVS默认的工作模式,也称为直连路由模式。主要是关于 路由器转发的过程。
NAT和DR模式 工作原理的区别:
- NAT模式的工作原理是:原路进去,也从原路返回;
- DR模式从原路进去,但不按原路返回,类似于打圈闭环,返回时,不经过LVS调度服务器。
NAT和DR模式 不同点:
- NAT的代理服务器 和 真实服务器可以不在同一网段,中间可以添加路由器;
- 但DR 直连路由模式中,代理和后台真实服务器,必须在同一网段,中间不能加路由器。因为真实服务器不需要通过代理服务器,会主动回包给客户端,但是客户端因为访问的是代理,所以并不认识真实服务器的ip地址,收到包后会将包丢掉。
关键原理:
ip不变,mac地址一直在变。怎么得到mac地址,通过ARP广播。
3.3 LVS 工作模式 对比
NAT DR TUN 优点 端口转换 性能最好 WAN 缺点 性能瓶颈 不支持跨网段 服务器支持隧道模式 真实服务器要求 any Non-arp device Tunneling 支持网络 private(私网) LAN(私网) LAN/WAN(私网/公网) 真实服务器数量 low (10~20) High (100) High (100) 真实服务器网关 lvs内网地址 Own router(网工定义) Own router(网工定义)4、LVS 调度算法⭐⭐
分为两种:
- 静态方法:不管后端真实服务器的状态,根据自身算法进行调度
- 动态方法:根据后端服务器的状态来进行调度
4.1 静态算法:
类型 名称 说明 RR 轮询 roundrobin,较常用 WRR 加权轮询 Weighted RR,加权轮询,较常用。先算总权重 再用自己的 权重去除以 总权重 SH 源IP地址hash Source Hashing,将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现session sticky会话绑定 DH 目标地址哈希 Destination Hashing,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS小拓展:什么是会话绑定?
假如客户端,第一次访问的时候是web1服务器,那么所有的信息都是在web1上。如果下次访问的是web2,那么web2要从web1上先读取缓存数据。这样就会浪费时间和资源。所以才希望客户端如果第一次访问的是web1,那么就一直访问web1,从而实现会话绑定。
4.2 动态算法:
- active 活动连接
- inactive 非活动连接
延展:
- LC 最小连接数
公式算法:活动连接*256 + 非活动链接 //得出的值越小,代表相对较闲
- WLC 加权最小连接数 第一轮不合理
Overhead=(activeconns*256+inactiveconns)/weight //weight权重越大,总值就越小,越清闲
- SED 只检查活动连接,而不考虑非活动连接 权重小的 空闲的
Overhead=(activeconns+1)*256/weight
动态算法 是根据参考值,判断服务器是忙碌还是清闲。参考值是通过算法公式,计算得到的。
5、ipvsadm工具
keepalive 会自动生成 ipvsadm工具
yum install ipvsadm -y //安装
//软件启动之前,必须要有下面文件:
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipsvadm //重启
5.1 选项
1、增删改查 选项:
选项 含义 -A 添加虚拟服务器 LVS调度器 -a 添加真实服务器,也就是节点服务器 -D 删除整个虚拟服务器策略 -d 删除某一个节点 -L 查看 LVS虚拟服务器。(默认为查看所有) -n 以数字形式显示地址、端口等信息2、调度算法 选项:
选项 含义 -s 指定 调度算法。默认是 wlc 加权最小链接⭐ -w 设置权重。权重为0时,表示暂停节点3、地址 端口 选项:
选项 含义 -t 指定VIP地址及TCP端口 tcp协议 -r 指定RIP地址及TCP端口4、工作模式 选项:
选项 含义 -m 工作模式。表示使用NAT群集模式 -g 表示使用DR模式 -i 表示使用TUN 隧道模式5、基础命令:
ipvsadm -Ln //查看规则,并以数字形式显示。注意:n必须放在L的后面
ipvsadm -d //删除单个策略
ipvsadm -D //删除所有策略
ipvsadm -C //清空策略
小拓展:
iptables-save //打印防火墙规则
6、LVS-NAT模式 负载均衡实验
实验环境:
7-1 LVS调度服务器
ens36 12.0.0.1
ens33 192.168.125.100
7-4 客户端 12.0.0.100
7-2 真实服务器 192.168.125.120 httpd
7-3 真实服务器 192.168.125.130 httpd
实验目的:客户机访问LVS调度服务器,LVS按照轮询的算法,分配给真实服务器7-2和7-3
7-4:
[root@7-4 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
//修改ip和网关
[root@7-4 ~]# systemctl restart network
7-1:
[root@7-1 ~]# systemctl stop firewalld
[root@7-1 ~]# setenforce 0
******添加ens36网卡*******
[root@7-1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
//修改ens33网关
[root@7-1 ~]# cd /etc/sysconfig/network-scripts/
[root@7-1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@7-1 network-scripts]# vim ifcfg-ens36
//修改ens36的ip、网关、网卡名,uuid删掉
[root@7-1 network-scripts]# systemctl restart network
[root@7-1 network-scripts]# yum install ipvsadm -y
`开启路由转发功能:`
[root@7-1 network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@7-1 network-scripts]# sysctl -p
[root@7-1 network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@7-1 network-scripts]# systemctl start ipvsadm.service
`设置ipvsadm策略:`
[root@7-1 network-scripts]# ipvsadm -A -t 12.0.0.1:80 -s rr //添加LVS虚拟服务器,tcp协议,vip地址为12.0.0.1:80,调度算法是轮询
[root@7-1 network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.125.120:80 -m //添加真实服务器,vip为12.0.0.1:80,RIP为192.168.125.120:80,工作模式是lvs-nat模式
[root@7-1 network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.125.130:80 -m //添加真实服务器,vip为12.0.0.1:80,RIP为192.168.125.130:80,工作模式是lvs-nat模式
[root@7-1 network-scripts]# ipvsadm -Ln //查看ipvsadm策略
7-2:
[root@7-2 ~]# systemctl stop firewalld
[root@7-2 ~]# setenforce 0
[root@7-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网关
GATEWAY=192.168.125.100
[root@7-2 ~]# systemctl restart network
`创建httpd默认页面:`
[root@7-2 ~]# yum install epel-release.noarch -y
[root@7-2 ~]# yum install nginx -y
[root@7-2 ~]# systemctl start nginx
[root@7-2 ~]# echo "7-2" > /usr/share/nginx/html/index.html
[root@7-2 ~]# systemctl restart nginx
7-3:
[root@7-3 ~]# systemctl stop firewalld
[root@7-3 ~]# setenforce 0
[root@7-3 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //修改网关
GATEWAY=192.168.125.100
[root@7-3 ~]# systemctl restart network
`创建httpd默认页面:`
[root@7-3 ~]# yum install epel-release.noarch -y
[root@7-3 ~]# yum install nginx -y
[root@7-3 ~]# systemctl start nginx
[root@7-3 ~]# echo "7-3" > /usr/share/nginx/html/index.html
[root@7-3 ~]# systemctl restart nginx
7-4:验证
[root@localhost ~]# curl 12.0.0.1 //访问网关
7-3
[root@localhost ~]# curl 12.0.0.1
7-2
[root@localhost ~]# curl 12.0.0.1
7-3
[root@localhost ~]# curl 12.0.0.1
7-2
7、LVS-DR模式 实验
ARP进行广播时,会问所有人谁是12.0.0.1,此时因为有多个虚拟地址,调度器和后台真实服务器 都会进行回复。这种情况下,要使用参数,对真实服务器进行设置,使其忽略ARP广播,从而只让调度器进行回复。
实验环境:客户机、调度器、真实服务器在同一网段。
7-6 客户机 192.168.125.160
7-1 调度器 192.168.125.100
7-2 服务器1 192.168.125.120
7-3 服务器2 192.168.125.130
虚拟ip 192.168.125.123
7-1:
[root@7-1 ~]# systemctl stop firewalld
[root@7-1 ~]# setenforce 0
[root@7-1 ~]# yum install ipvsadm.x86_64 -y
[root@7-1 ~]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@7-1 ~]# systemctl start ipvsadm.service
`配置虚拟ip`
[root@7-1 ~]# cd /etc/sysconfig/network-scripts/
[root@7-1 network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@7-1 network-scripts]# vim ifcfg-ens33:0
NAME=ens33:0
DEVICE=ens33:0
IPADDR=192.168.125.123
NETMASK=255.255.255.255
[root@7-1 network-scripts]# systemctl restart network
`内核调优:`
[root@7-1 network-scripts]# 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
[root@7-1 network-scripts]# sysctl -p
`设置ipvsadm策略:`
[root@7-1 ~]# ipvsadm -C //清空策略
[root@7-1 ~]# ipvsadm -A -t 192.168.125.123:80 -s rr
[root@7-1 ~]# ipvsadm -a -t 192.168.125.123:80 -r 192.168.125.120:80 -g
[root@7-1 ~]# ipvsadm -a -t 192.168.125.123:80 -r 192.168.125.130:80 -g
[root@7-1 ~]# ipvsadm -Ln //查看策略
7-2:
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
`修改回环地址:`
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-lo
DEVICE=lo:0
IPADDR=192.168.125.123
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a //可以查看ip设置
`内核调优:关闭ARP广播`
[root@localhost network-scripts]# 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
[root@localhost network-scripts]# sysctl -p
//0是回复、ignore是忽略、announce只回复真实网卡
`新建访问页面:`
[root@localhost network-scripts]# cd /var/www/html
[root@localhost html]# echo "7-2 2-7" > index.html
7-3:
前面都同7-2一样!
`新建访问页面:`
[root@localhost network-scripts]# cd /var/www/html
[root@localhost html]# echo "7-3 3-7" > index.html
7-6:验证访问
[root@localhost ~]# curl 192.168.125.123
7-2 2-7
[root@localhost ~]# curl 192.168.125.123
7-3 3-7
[root@localhost ~]# curl 192.168.125.123
7-2 2-7
[root@localhost ~]# curl 192.168.125.123
7-3 3-7
注意:这个实验,不能用本机访问自己,不然会死循环,出不来效果。
因为,LVS是在INPUT链前设置规则,所以不会进入INPUT里,而访问自己又没办法进行转发。所以就陷入了死循环。