lvs集群
linux virtual server 开源项目,linux的内核层面实现负载均衡的软件
主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器以上来实现高可用和负载均衡
阿里的SLB
serverloab balance lvs+keepalive实现的。
集群和分布式:
垂直扩展:向上扩展,增强,性能更强的计算机。瓶颈:计算机本身设备的限制,硬件本身的性能瓶颈。
水平扩展:向外扩展,增加设备。并行地运行多个服务,倚靠网络解决内部通信的问题,cluster 集群。
集群:为了解决某个特定的问题将多台计算机组合起来形成的单个系统。
集群的类型 三种类型:
1、LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求
2、HA:high availablity 高可用集群,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行。为了维护系统的可用性,可靠性,容错性。
3、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
99.99%
都是以小时为单位:
1年365天=8760小时
停机时间:
计划内时间,计划内的时间可以忽略不计。但是现在也算在内
计划外时间,故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标
运维精神:7*24小时待命(及时响应,及时处理,及时总结)
lvs使用场景:
小集群不需要使用lvs,大集群使用lvs
lvs集群中的术语:
VS virtual server lvs服务的逻辑名称,也就是我们外部访问Ivs集群时使用的ip地址和端口
DS director server lvs集群中的主服务器,也就是调度器(nginx的代理服务器),是集群的核心。
调度器就是用来接受客户端的请求转发到后端的服务器
RS Real server lvs集群中的真实服务器,后端服务器,用来接受DS调度器转发来的请求,并且响应
CIP:Clinet ip 客户端的地址,发起请求的客户端地址
VIP:virtual IP lvs集群使用的ip地址,对外提供集群访问的虚拟IP地址
DIP:Director IP 调度器在集群当中的地址,用于和RS通信
RIP:Real ip 后端服务器在集群当中的ip地址
lvs的工作方式
NAT模式 响应要由调度器响应给客户端
DR模块,直接路由模式 真实服务器直接响应给客户端
TUN 隧道模式
常用的模式:NAT和DR
NAT模式
nat模式是常用的lvs模式之一
在nat模式下,lvs会将来及客户端的请求报文中的目的ip地址和端口,修改为lvs内部的ip地址和端口。然后把请求转发到后端服务器。
响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口
好处在于,对于客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊修改,只是调度器在对ip和端口端口进行转换,后端的服务器也不需要更改任何配置
缺点:性能损失,请求和响应都需要调度器做地址转换,影响性能
nat模式只用有一个调度,调度器故障,整个集群就不能正常工作。
地址转换:
内网-----外网 转换的源ip snat
外网------内网 转换目的地址 dnat
lvs的工具
ipvsadm工具,用来配置和管理lvs集群的工具
-A 添加虚拟服务器 vip
-D 删除虚拟服务器
-S 指定负载均衡的调度算法
-C 清空原有的策略
算法:
rr 默认,轮询
加权轮询:wrr
最小连接:lc
加权最小连接:wlc
-a 添加真实服务器
-d 删除真实服务器
-t 指定vip的地址和端口
-r 指定rip的地址和端口
-m 使用nat模式
-g 使用DR模式
-i 使用隧道模式
-w 设置权重
-p 60:连接保持60,设置连接保持时间
-l 列表查看
-n 数字化展示
创建vip地址的时候才能指定负载均衡算法。不是在真实服务器添加算法,没有办法修改,只能推倒重来
nginx1 RS1 192.168.39.30
nginx2 RS2 192.168.39.40
test1 调度器
ens33 192.168.39.50
ens36 12.0.0.1
test2 客户端 12.0.0.10。
将test1调度器中的添加一个新的网卡ens36
将test1调度器里的ens33更改
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.39.50
#这里将他的IP地址作为网关使用
NETMASK=255.255.255.0
#GATEWAY=192.168.39.2
#DNS1=218.2.135.1
将test1调度器里的ens36更改
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
#这里将IP地址改为外网地址
NETMASK=255.255.255.0
#GATEWAY=12.0.0.2
#DNS1=218.2.135.1
systemctl restart network
将nginx1和nginx2中的网卡更改
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.39.30
NETMASK=255.255.255.0
GATEWAY=192.168.39.50
#这里将网关更改为我们指向的网关地址
DNS1=218.2.135.1
将nginx1和nginx2,/usr/local/nginx/html中的index.html更改
回到test1中,我们需要把test1的地址转换做好
iptables -t nat -vnL
#查看nat上是否有策略
iptables -t nat -A POSTROUTING -s 192.168.39.0/24 -o ens36 -j SNAT --to 12.0.0.1
#指定nat表中,添加指定网段192.168.39.0 从ens36这个网卡出去,控制类型为SNAT,转换成12.0.0.1
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.39.40:80 -m
#添加真实的服务器地址和端口,-m使用nat模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.39.50:80 -m
ipvsadm-save >/etc/sysconfig/ipvsadm
#保存到/etc/sysconfig/ipvsadm,使其永久添加,注意这里重启会有bug,必须ipvsadm -ln检查
#遇到bug,只能推倒重做
#开启路由转发的功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p