集群:nginx四层和七层+动静分离
为解决某
集群的目的就是为了解决系统的性能瓶颈。
早期是垂直扩展:向上扩展,增强单个机器的性能。简单来说就是升级硬件。但是升级硬件是有瓶颈的。(业务方向,垂直扩展已经不提及了)
水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题。
1、 负载均衡集群:LB (loab blance) 多个主机组成,每个主机只承担一部分请求。靠负载均衡的算法来实现。
2、 高可用集群:HA (high availiablity)避免 SPOF (single point of failuer 也就是单点故障) 系统当中有一部分组件出现故障,可以保证整个系统继续运行。 主从---同步(某些特定服务需要这个概念)---负载均衡
3、 HPC(high-performance conputing) 快速转发,快速响应。
MTBF(mean time between failure) :系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF的值越高系统的可靠性就越高,出现故障的概率也越小
MTTR:系统从发生故障到恢复正常运行的平均时间,一般也是用小时或者天数表示。MTTR值越小,说明系统恢复故障的能力越强。
A:系统的可靠性指标。A值约高约好
A = MTBF /(MTBF+MTTR)
99.9% 1年=365天=8760小时 99.9=8760*0.1%=8.76小时
计划内停机:预定时间内的维护或者检修时间。时间是自定义的。
计划外停机:运维人员主要关注的就是计划外。7*24小时
发版期
1、 可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容
2、 可靠性:集群中如果有节点发生故障。可以快速检测并自动切换。
3、 负载均衡:合理的分配每台服务器的负载。避免单个节点过载。影响整体的性能。
4、 可维护性:能够方便的进行配置,部署、维护、监控。降低成本
5、 安全性(可能用不上):防止恶意的攻击,以及数据泄密。数据丢失。
6、 易用性:相关的工作人员,可以方便进入集群,能够快速的开发,部署,测试等等。
LVS(LINUX virtual server):是一个部署在Linux系统通过内核层面实现负载均衡的软件。
开发者:章文嵩 发起的开源项目
主要作用:多个后端服务器组成的一个高可用,高性能,负载均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器。
阿里的SLB(server load balance):基于LVS+keepalived实现的。
vs(virtual server):LVS服务的逻辑名称,外部访问LVS集群时提供的一个虚拟ip和端口。
DS(Director server):LVS集群当中的主服务器,也叫调度器,是整个LVS集群的核心。接受客户端的请求转发到后端RS
RS(Real server):LVS集群后端真实服务器的ip,接收到了DS的请求之后,返回响应结果。
CIP(client ip):客户端的ip地址
VIP(virtual ip):对外提供访问的统一虚拟IP地址。
DIP(Director ip):调度器在LVS内部使用的IP地址。用于和真实服务器进行通信。
RIP:后端真实服务器的IP地址。
1、 客户端访问都是访问VIP
2、 DS调度器接收到请求,根据算法选择好后端服务器(RS)把请求发送给RS
3、 RS处理请求后并将响应发送到DS调度器
4、 DS把RS的响应包装成自己的响应,发送到客户端
个特定的问题将多个计算机组合起来形成一个单系统
客户端既不知道请求的真实服务器,也不知道响应的服务器是谁
NAT
DR
TUN
其中NAT和DR是最常用的方式
NAT模式是最常用的LVS负载方式之一
NAT的作用是地址转换
1、 在调度器上配置双网卡,一个指内,一个指外
2、 配置一个可以和公网进行通信的VIP
3、 配置转发策略,如果访问公网的VIP就会把请求的数据转发到后台的RS。请求的格式是报文。调度器会修改请求的目标IP地址和端口(12.0.0.1:80 20.0.0.20:80)
4、 RS处理完请求之后响应客户端,先到调度器,调度器进行地址转换,把内网地址转换成公网地址。最后响应调度器给用户。 20.0.0.20:80 ---- 调度器 ---- nat地址转换 ----- 12.0.0.1:80 ---- 客户端
数据请求进入调度器做的请求报文中ip地址的修改
数据响应进入调度器,根据NAT配置进行地址转换
进入是改请求报文。出去是地址转换
调度器的内网IP地址和真实服务器的IP地址要在同一网段。
nat对于客户端来说请求地址始终不变,客户端不需要修改任何配置。转发由调度器通过算法来完成,后端服务器只管接受响应。也不需要修改任何配置。
缺点:可能会出现性能损失和单点故障
DR:也是最常用的lvs负载方式,DR DIRECT ROUTING 直接路由模式。负载均衡器lvs调度器,只负责请求和转发到后端的真实服务器,但是响应结果,由后端服务器直接转发给客户端,不需要进行调度器处理。
可以减轻lvs调度器的负担,提高了系统的性能和稳定性。
好处是:性能高。而且可以配置VIP地址的高可用。不存在单点故障。
1、 客户端发送请求到vip
2、 LVS的调度器接受请求后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求报文的目的MAC地址。修改成后端真实服务器的MAC地址。然后转发。
3、 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改。直接把响应报文转发到客户端。
4、 调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。
工作流程图:
总结:MAC地址转发
1、 调度器的IP和真实服务器的ip必须在同一个物理网络中
2、 真实服务器的ip地址可以是私有地址,也可以是公网地址。
如果配置的是公网,那就可以通过互联网可以直接访问RIP。(一般不配置为公网)
3、 调度器只作为入口,但是不做网关。(不涉及转发数据包)要把服务器的转发功能关闭
4、 后端真实服务器的网关也不能指向调度器。真实服务器的数据包不允许经过调度器。
5、 后端真实服务器上,基于LO接口配置vip的ip地址
ARP协议:网络层协议,将IP地址解析为物理MAC地址。 ARP请求:主机A 主机B
ARP请求的核心:解决局域网内部的通信。ip地址和MAC地址映射。
DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现局域网内部通信
VIP:表示后端的真实服务器保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器实现高可用和故障转移。
问题1:由于调度器和后端真实服务器都有相同的VIP地址,导致响应冲突,ARP通信紊乱。
答:对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求。
VIP地址使用LO的虚拟地址:arp_ignore=1 (在节点服务器上配置)
后端的真实服务器只响应目的ip为本地ip,也就是RIP。后端服务器的真正IP地址。ens33网卡提供的地址
问题2:返回报文使用的源地址还是VIP地址,调度器也是VIP怎么把响应返回到客户端不经过调度器呢
答:对后端真实服务器做一个内核参数的优化:arp_announce=2 系统不使用ip数据包的源地址,来设置ARP的请求。真实的物理网卡地址。
20为调度器
25web集群1
26web集群2
30 nfs
VIP地址20.0.0.100
客户端随机
实验流程:
关闭四台机器的防火墙和安全机制
配置20调度器主机
modprobe ip_vs
yum -y install ipvsadm
ifconfig ens33:0 20.0.0.100/24
#配置调度器vip地址
vim /etc/sysctl.conf
#调度器的内核优化
net.ipv4.ip_forward = 0
#关闭服务器作为网关的转发功能
net.ipv4.conf.all.send_redirects = 0
#控制是否发送ICMP的重定向消息,禁止重定向
net.ipv4.conf.default.send_redirects = 0
#静止默认网络接口,就是调度器的网卡,发送ICMP的重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#指明网卡设备,ens33不发送重定向消息
sysctl -p
#立即生效
ipvsadm -A -t 20.0.0.100:80 -s rr
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.25:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.26:80 -g
#设置配置策略
ipvsadm-save > /etc/sysconfig/ipvsadm
#保存
systemctl restart ipvsadm
配置30nfs主机
mkdir /opt/kgc
mkdir /opt/benet
vim /etc/exports
/opt/kgc 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)
chmod 777 kgc benet
echo "this is kgc" > kgc/index.html
echo "this is benet" > benet/index.html
#页面创建完毕
到25和26设置访问页面
配置25 web1主机
#启动nginx和rpcbind和nfs
showmont -e 20.0.0.30
mount 20.0.0.30:/opt/kgc /usr/local/nginx/html/
#挂载
curl 20.0.0.25 查看一下
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo
route add -host 20.0.0.100 dev lo:0
#把vip的地址绑定到lo:0 作为lvs的vip地址。标识。告诉调度器,进行转发请求的ip地址寻址。
vim ets/sysctl.conf
#内核优化
net.ipv4.conf.lo.arp_ignore = 1
#设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略
net.ipv4.conf.all.arp_ignore = 1
#所有接口忽略来自任务接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略
sysctl -p
配置26
配置相同
重启nginx服务
mount 20.0.0.40:/opt/benet /usr/local/nginx/html 挂载
内核优化
net.ipv4.conf.lo.arp_ignore = 1
#设置lo接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#设置lo接口仅会响应本地的IP地址,其他的接口ARP请求,全部忽略
net.ipv4.conf.all.arp_ignore = 1
#所有接口忽略来自任务接口的ARP请求
net.ipv4.conf.all.arp_announce = 2
#所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略
sysctl -p
#立即生效
使用客户机40访问
curl 20.0.0.100
DR模式的核心:响应客户端由后端的真实服务器完成。不需要经过调度器完成。
vip地址:调度器和后端服务器都要有vip地址
vip地址的作用: 1、 暴露访问地址 2、 调度器转发请求的标识 3、 调度器和后端服务器之间进行vip地址进行通信 4、 高可用(DR模式)
其他所有的请求和响应都被禁用。
TUN:隧道模式。使用隧道协议把请求转发到后端服务器。需要在后端服务器配置隧道协议。
请求VPN的IP地址需要单独购买所以用的比较少
ipvsadm工具:管理ipvs内核模块的命令行工具,配置和管理LVS集群
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度算法
静态调度(固定调度)
rr 轮询
wrr加权轮询
dh目的地址hash
sh源地址hash
dh和sh都是根据ip地址查找静态hash表,获取需要真实的RS地址
动态调度: lc:最小连接数调度
wlc:加权最小连接数 权重高的转发的就多,为了避免性能的瓶颈,在跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发。
lblc:基于地址的最小连接数调度。将来自同一个目的地址的请求分配给RS,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的RS,而且在下一次转发时会优先考虑这台RS
-a:添加真实服务器
-d:删除真实服务器
-t:指定VIP地址的端口号
-r:指定RIP的端口号
-m:表示使用net模式
-g:表示使用DR模式
-i:表示使用TUN隧道模式
-w:设置真实服务器的权重
-p 60:设置连接保持的时间是60秒(默认不带需要指定)
-ln:以数字和列表的形式查看LVS的配置信息
modprobe ip_vs
集群的扩展方式:水平扩展
集群的类型:负载均衡和高可用
集群的可靠性指标:MTBF MTTR 最低也是99%
设计集群的原则:可靠性 可拓展性 负载均衡
非计划外停机时间:主要的工作职责排障和解决问题
LVS集群中的术语:vs -- VIP DS --- DIP RS --- RIP
访问流程
LVS负载均衡的方式:NAT模式 DR模式
1、 LVS的负载均衡的工作方式
三种:NAT DR TUN 最常用的就是DR模式
NAT模式优点:配置简单。 缺点:性能瓶颈。 真实服务器:ANY。 支持网络模式:私网。 后端真实服务器数量:low(最多10-20台)
DR模式的优点:性能最好。 缺点:调度服务器和后端真实服务器不能跨网段的得在一个网段之间。 真实服务器:NOARP(请求只能到真实服务器) 支持网络模式:后端服务器既可以是私网也可以是公网 后端真实服务器数量:100台
TUN 公司不用
2、 LVS调度器中常用的算法
负载均衡策略:rr wrr dh sh
动态调度:wlc lc lb lc
工作原理:NAT和DR的工作原理
NAT的工作原理总结:
1、 在调度器上配置双网卡,一个指内,一个指外
2、 配置一个可以和公网进行通信的VIP
3、 通过配置转发策略,访问公网的VIP会把请求转发到后台的RS。请求的格式是报文。调度器会修改请求的目标IP地址和端口(12.0.0.1:80 20.0.0.20:80)
4、 RS处理完请求后响应客户端,先到调度器,调度器进行地址转换,把内网地址转换成公网地址。最后响应调度器给用户。 20.0.0.20:80 ---- 调度器 ---- nat地址转换 ----- 12.0.0.1:80 ---- 客户端
客户端进入是改请求报文。出去是地址转换 转发由调度器通过算法来完成,后端服务器只管接受响应。也不需要修改任何配置。
DR的工作原理总结:
1、 客户端发送请求到vip
2、 LVS的调度器接受请求后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求报文的目的MAC地址。修改成后端真实服务器的MAC地址。然后转发。
3、 后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改。直接把响应报文转发到客户端。
4、 调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段。
客户端进入时请求调度器的VIP地址,通过LVS交换器配置的算法把请求的目的MAC地址,修改为后台的真实服务器的MAC地址。实现转发。后端服务器处理完成后,会修改响应报文中的目的MAC地址,之间转发到客户端。