集群
概念
linux的内核层面实现负责均衡的软件
主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上。来实现高可用和负载均衡。
阿里的SLB(server loab balance),是用lvs+keepalive实现的
系统的扩展方式:
垂直扩展:向上扩展,增强,性能更强的计算机。瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈
水平扩展:向外扩展,增加设备。并行的运行多个服务,依靠网络解决内部通信的问题,cluster 集群
集群:为了解决某个特定的问题将多台计算机组合起来形成的单个系统
集群的三种类型:
LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求
HA:high availablity 高可用,在涉及系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行。为了维护系统的可用性,可靠性,容错性
HPC:high-performance computing 高性能集群,对响应时间,处理能力要求更高
系统可靠性指标:
MTBF:Mean time Between Failure 平均无故障时间
MTTR:Mean Time Resotration repair 平均故障恢复时间
A=MTBF/(MTBF+MTTR)
0-1
A指标要在0-1之间,A指标就是系统可用性的度量,越接近0表示系统越不可用,接近1表示系统越可用
A指标要无限接近于1
都是以小时为单位
停机时间:
计划内时间:计划内的时间可用忽略不计,但是现在也算在内
计划外时间:故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标
lvs集群
lvs适用场景:
小集群不需要适用lvs,用nginx即可;大集群适用lvs。
lvs集群中的术语:
vs :vittual server,lvs服务的逻辑名称,也就是我们外部访问vs集群时使用的ip地址和端口
ds :director server,lvs集群中的主服务器,也就是调度器(nginx的代理服务器),是集群的核心
调度器就是用来接收客户端的请求转发到后端的服务器
RS :real server,lvs集群中的真实服务器,后端服务器,用来接收DS调度器转发来的请求,并且响应结果
CIP :client ip,客户端的ip地址,发起请求的客户端地址
VIP :virtual ip,lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址
DIP :director ip,调度器在集群当中的地址,用于和RS通信
RIP :real ip,后端服务器在集群当中的ip地址
lvs的工作方式:
NAT模式:由调度器响应给客户端
DR模式:直接路由模式,真实服务器直接响应给客户端
TUN隧道模式
NAT模式
在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器
响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口
优点:
对于客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊修改,只是调度器在对ip和端口进行转换,后端的服务器也不需要更改任何配置
缺点:
性能损失,请求和响应都需要调度器做地址转换,影响性能,
nat模式只能有一个调度器,调度器故障,整个集群就不能正常工作
地址转换:
内网------外网:转换的源ip地址 snat
外网------内网:转换目的地址 dnat
lvs的工具
ipvsadm工具,用来配置和管理lvs集群的工具
-A 添加虚拟服务器
-D 删除虚拟服务器
-s 指定负载均衡的调度算法
算法:
默认轮询:rr
加权轮询:wrr
最小连接:lc
加权最小连接:wlc
-a 添加真实服务器
-d 删除真实服务器
-t 指定vip的地址和端口
-r 指定rip的地址和端口
-m 使用nat模式
-g 使用DR模式
-i 使用隧道模式
-w 设置权重
-p 设置连接保持时间,如:-p 60 表示连接保持60秒
-l 列表查看
-n 数字化展示
-C 清空原有的策略
实验:
数据流向:
nginx 1 RS1 192.168.233.20
nginx2 RS2 192.168.233.30
test1 调度器 ens33 192.168.233.10 ens36 12.0.0.1
test2 客户端 12.0.0.10
步骤:
1、调度器配置(test1 192.168.233.10)
添加一个网卡
配置网卡ens33
配置网卡ens36(具体网卡ifconfig查看)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
systemctl restart network 重启网卡
ifconfig查看是否生效
2、RS配置(nginx1和nginx2)
配置nginx1 192.168.233.20 修改网关
配置nginx2 192.168.233.30 修改网关
systemctl restart network 重启网卡
vim /usr/local/nginx/html/index.html
修改访问页面的内容
查看访问是否连接
3、地址转换(test1 192.168.233.10)
iptables -t nat -vnL 查看nat表是否有策略
如果有,iptables -D删除
iptables -t nat -A POSTROUTING -s 192.168.233.0/24 -o ens36 -j SNAT --to 12.0.0.1
从192.168.233.0/24出的设备地址转换成12.0.0
ipvsadm -C 清空原有的策略
ipvsadm -A -t 12.0.0.1:80 -s rr 指定好vip的地址和端口
先添加vip,虚拟服务器的ip和端口,然后再添加真实服务器
ipvsadm -a -t 12.0.0.1:80 -r 192.168.233.20:80 -m
-a 添加真实服务器
-t 指定vip地址
-r 指定真实服务器的地址和端口
-m 指定模式为nat模式
ipvsadm -ln 查看
开启路由转发功能:
vim /etc/sysctl.conf
4、客户端(test2 12.0.0.10 )
修改客户端的ip地址和网关
systemctl restart network 重启网卡
实验结果:
DR模式:
直接路由模式
特点:
调度器在整个lvs集群中是最重要的,在nat模式下,既负责接收请求,同时根据负载均衡的算法转发流量,响应发生给客户端。
DR模式下的调度器依然负责接收请求,同时也根据负责均衡算法转发流量到RS,响应直接由RS响应给客户端
直接路由(Direct Routing)是一种二层转发模式,二层转发的是数据帧。根据源mac地址和目的mac地址进行转发。
不会修改数据包源ip和目的ip,根据数据包mac地址进行转发。
DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然是走二层转发,当客户端的请求到达调度之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器了
数据流向:
可能出现的问题:
1、调度器配置了vip,RS上也配置了vip地址
vip地址冲突,调度器和RS都在同一网段,ARP通信的紊乱。因为是整个局域网广播,所有的设备都收到了
怎么把lo这个回环的响应把他屏蔽掉,只要本机的物理ip地址响应。
修改内核参数:
arp_ignore=1:系统的物理ip地址才会响应ARP请求,lo不会响应ARP请求
2、返回报文时,vip地址还在,怎么样能让客户端来接收到响应
修改内核参数:
arp_announce=2:系统不使用ip数据包的源地址来响应ARP请求,直接发送物理接口的ip地址
实验:
nginx1 RS(真实ip) 192.168.233.20
nginx2 RS 192.168.233.30
vip 192.168.233.100
调度器 192.168.233.10
客户端 192.168.233.40
步骤:
1、调度器配置(test1 192.168.233.10)
添加虚拟网卡ens33:0
修改调度器的响应参数
vim /etc/sysctl.conf
sysctl -p 添加策略
2、RS配置(nginx1和nginx2)[两边都要修改]
修改静态页面的展示内容
vim /usr/local/nginx/html/index.html
systemctl restart nginx 启动nginx
添加回环地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
nginx1:
nginx2:
ifup lo:0,开启虚拟网卡lo:0
ifconfig 查看网卡
添加lo:0接口做为vip
route add -host 192.168.233.100 dev lo:0
设置ip地址为192.168.233.100的地址添加到回环接口,做为lvs的vip,通过路由的模式转发到RS,能让vip识别到真实的服务器
修改RS真实服务器的内核响应
vim /etc/sysctl.conf
实验结果: