集群:nginx四层和七层+动静分离
为解决某个特定问题将多个计算机组合起来形成一个单系统
集群的目的就是为了解决系统的性能瓶颈
垂直扩展:向上扩展,增加单个机器的性能,升级硬件。硬件升级是有瓶颈的
水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题
集群的类型:
负载均衡集群:(LB loab blance) 多个主机组成,每个主机只承担一部分访问请求。考负载均衡算法来实现
高可用集群:(HA high availiabity) 避免SPOF(single point of failuer)单点故障。系统当中一部分组件出现故障,可以保证整个系统继续运行
主从——同步(某些特定的服务需要)——负载均衡
HPC:high-performance computing 快速转发,快速响应
集群的可靠性指标:
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小时
停机时间(故障时间):
计划内停机:预定时间内的维护或者检修时间
计划外停机:运维人员关注的就是计划外
发版期
设计集群时需要考虑的一些原则:
1.可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容
2.可靠性:在集群中如果有节点发生故障,可以快速检测并且自动切换
3.负载均衡:合理的分配负载,避免单个节点过载,影响整体性能。
4.可维护性:能够方便的进行配置,部署,维护,监控,降低成本
5.安全性:防止恶意的攻击,以及数据泄密和数据丢失
6.易用性:相关的工作人员,可以方便的进入集群,能够快速的开发、部署、测试等等
lvs:linux virtual server 是一个部署在linux系统通过内核层面实现负载均衡的软件
开发者:章文嵩 发起的开源项目
主要作用:多个后端服务器组成一个高可用,高性能,负载均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器
阿里的SLB server load balance 基于lvs+keepalived实现
lvs集群当中的术语:
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地址
lvs访问的大致流程:
客户端既不知道请求的真实服务器,也不知道响应的服务器是谁
lvs的负载均衡方式:
NAT DR TUN
其中NAT和DR最常用的方式
NAT模式
是最常用的lvs负载方式之一
在NAT方式下,LVS会将来自客户端的请求报文的目标IP地址和端口修改为LVS的IP地址和端口,
并将报文转发至后端的服务器。
后端服务器返回的报文经过LVS后,LVS会将目标IP地址和端口修改为原始的客户端IP地址和端口,
并将报文返回给客户端。
这种方式的好处是,对客户端来说,请求的目标地址始终不变,因此无需修改客户端的配置。
而且,由于LVS会修改请求和响应的目标地址和端口,因此后端服务器无需修改任何配置。
同时,这种方式也存在一些缺点,比如性能损失和单点故障的问题。
地址转换
NAT模式:
1.在调度器上配置双网卡,一个指内,一个指外
2.配置一个可以和公网进行通信的VIP
3.配置转发策略,如果访问VIP,就会把请求的数据转发到后台的RS
请求的格式是报文,调度器会修改请求的目标ip地址和端口
4.RS处理完请求之后响应客户端,先到调度器,调度器进行地址装换,,把内网地址转换成公网地址,响应给用户
数据请求进入调度器做的请求报文中IP地址的修改
数据响应进入调度器,根据NAT配置进行地址转换
调度器的内网ip地址和真实服务器的ip地址要在同一网段
nat对于客户端来说请求地址始终不变,客户端不需要修改任何配置,转发由调度器通过算法来完成,后端服务器只管接受响应,也不需要修改任何配置
性能损失和单点故障
NAT模式的工作流程:
客户端发送请求:当客户端发送请求时,请求首先到达负载均衡器。
负载均衡器接收请求:负载均衡器接收到请求后,根据预先配置的负载均衡算法(如轮询、加权轮询、最小连接数等)
选择一个后端服务器来处理该请求。
源地址转换:负载均衡器通过NAT技术将请求的源地址更改为自己的地址,并将请求转发给被选中的后端服务器。
后端服务器处理请求:被选中的后端服务器接收到请求后进行处理,并生成响应。
目的地址转换:负载均衡器接收到后端服务器的响应后,将响应的目的地址更改为原始客户端的地址,并将响应发送回客户端。
在这个过程中,LVS服务器使用了iptables中的nat表的prerouting链来实现地址转换,
将请求报文和响应报文中的IP地址进行了改写,从而实现了负载均衡。
NAT实验:
Nat模式的部署方式:
负载调度器:
配置双网卡:192.168.233.10(内网) 12.0.0.1(ens36)
二台后端web真实服务器:192.168.233.20 192.168.233.30
一台NFS共享服务器:192.168.233.40
客户端:192.168.120.70
先安装ipvsadm*软件
创建虚拟服务器
查看策略
ipvsadm -ln
ipvsadm -A -t 12.0.0.1:80 -s rr
创建VIP地址 -s指定调度算法 rr
添加服务器节点
ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.30:80 -m
删除服务器节点
ipvsadm -d -r 192.168.120.30:80 -t 12.0.0.1:80
删除整个虚拟服务器
ipvsadm -D -t 12.0.0.1:80
以上命令操作完必须先保存才能刷新否则会报错
保存策略
ipvsadm-save >/etc/sysconfig/ipvsadm
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
客户端:192.168.120.10
NFS服务器:192.168.120.70
两台后端web真实服务器:192.168.120.30 192.168.120.40
配置NFS服务器
关闭防火墙
systemctl stop firewalld.service
setenforce 0
安装nfs软件
yum install nfs-utils rpcbind -y
在opt目录下创建两个目录
mkdir /opt/kgc /opt/benet
赋权
chmod 777 /opt/kgc/ /opt/benet/
创建站点文件
echo 'this is kgc !' > /opt/kgc/index.html
echo 'this is benet !' > /opt/benet/index.html
设置共享策略
vim /etc/exports
/opt/kgc 192.168.120.0/24(rw,sync)
/opt/benet 192.168.120.0/24(rw,sync)
发布服务
exportfs -rv
Web服务器30:
关闭防火墙
systemctl stop firewalld.service
setenforce 0
安装nfs服务
yum install nfs-utils rpcbind -y
接收服务
showmount -e 192.168.120.70
挂载
mount 192.168.120.70:/opt/kgc /usr/local/nginx/html/
刷新
systemctl restart nginx.service
修改网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
Web服务器40:
关闭防火墙
systemctl stop firewalld.service
setenforce 0
安装nfs服务
yum install nfs-utils rpcbind -y
接收服务
showmount -e 192.168.120.70
挂载
mount 192.168.120.70:/opt/benet /usr/local/nginx/html/
刷新
systemctl restart nginx.service
修改网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
调度器配置:
关闭防火墙
systemctl stop firewalld.service
setenforce 0
加载内核模块
modprobe ip_vs
cat /proc/net/ip_vs
清空策略
iptables -F
添加策略
iptables -t nat -A POSTROUTING -s 192.168.120.0/24 -o ens36 -j SNAT --to 12.0.0.1
查看策略
iptables -nL -t nat
安装软件:
yum install ipvsadm* -y
指定IP地址 外网的入口 -s rr 轮询
ipvsadm -A -t 12.0.0.1:80 -s rr
先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.30:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.120.40:80 -m
保存配置文件
ipvsadm-save >/etc/sysconfig/ipvsadm
刷新
systemctl restart ipvsadm.service
先添加一个新网卡
配置网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/sysconfig/network-scripts/ifcfg-ens36
刷新
systemctl restart network
开启服务器的转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
即刻生效
sysctl -p
结果显示:
DR:直接路由模式,请求由调度器完成,但是响应客户端由真实服务器直接响应,不需要通过调度器。
好处是:性能高,而且可以配置VIP地址的高可用,不存在单点故障
LVS-DR模式的工作原理:
1.客户端发送请求到vip
2. LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求的报文的目的MAC地址,修改成后端真实服务器的MAC地址,转发。
3.后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址,直接把响应报文转发到客户端
4.调度器,后端真实服务器都有vip地址,调度的地址和后端真实服务器在同一网段
DR模式的特点:
ARP协议:网络层协议,将IP地址解析为物理mac地址。
ARP请求:主机A和主机B
ARP解决局域网内部的通信,IP地址和MAC地址映射
DR模式的调度器和后端服务器都在一个网段中,通过ARP请求实现局域网内部通信
问题1:
由于调度器和后端真实服务器的都有相同的VIP地址,导致响应冲突,ARP通信紊乱
对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求
vip地址使用LO的虚拟地址:arp_ignore=1
后端真实服务器只响应目的ip为本地IP,也就是RIP。后端服务器的真正ip地址。ens33网卡提供的地址
问题2:
返回报文使用的源地址还是VIP地址,调度器也是VIP,怎么把响应返回到客户端不经过调度器呢
后端真实服务器的一个内核参数的优化:arp_announce=2系统不使用ip数据包的源地址,来设置ARP的请求。真实物理网卡
如何实现DR模式的负载均衡
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/
#挂载
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 #挂载
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
ifup ifcfg-lo:0
内核优化
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访问
DR模式总结
DR模式的核心:响应客户端由后端的真实服务器完成。不需要经过调度器完成。
vip地址:调度器和后端服务器都要有vip地址
vip地址的作用: 1、 暴露访问地址 2、 调度器转发请求的标识 3、 调度器和后端服务器之间进行vip地址进行通信 4、 高可用(DR模式)
其他所有的请求和响应都被禁用。
tun:隧道协议,把请求转发后端服务器,需要在后端服务器配置隧道协议
设置lvs:
ipvsadm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度的算法:rr轮询
wrr加权轮询
dh目的地址hash 根据IP地址查找静态hash表,获取需要真
实的RS的地址
sh原地址hash
动态调度:
lc:最小连接数调度
wlc:加权最小连接数调度
权重高的,转发的就多,为了避免性能瓶颈,在跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发。
Lblc:基于地址的最小连接数调度
将来自同一个目的地址的请求分配给RS,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的RS,而且在下一次转发时会优先考虑这台RS
-a:添加真实服务器
-d:删除真实服务器
-t:指定VIP地址的端口号
-r:指定RIP的端口号
-m:表示使用nat模式
-g:表示使用DR模式
-i:表示使用TUN模式
-w:设置真实服务器的权重
-p 60:设置连接保持的时间60秒(默认不带)
-ln:以数字和列表的形式查看lvs的配置信息
上述总结:
集群的扩展方式:水平扩展
集群的类型:负载均衡和高可用
集群的可靠性指标: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地址,之间转发到客户端。