lvs集群
概念
linux virtual server-----章文嵩发起的开源项目
作用:在linux的内核层面,实现负载均衡的软件
主要作用:将多个后端服务器,组成一个高可用、高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。
阿里的SLB:server load balance,是通过lvs+keepalive实现的
一、集群和分布式
1.1 系统的拓展方式
1.1.1 垂直拓展:向上拓展,起到增强的作用(针对性能更强的计算机),瓶颈:计算机本身设备的限制,硬件本身的性能瓶颈
1.1.2 水平拓展:向外扩展,增加设备。可以并行的运行多个服务,依靠网络解决内部通信的问题,cluster集群。
集群:为了解决某个特定的问题,将多台计算机组合起来形成的单个系统
1.2 集群的类型
LB
:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求
HA
:high availablity 高可用集群,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然可以正常运行,为了维护整个系统的可用性、可靠性、容错性。
HPC
:high-performance computing 高性能集群,对响应时间,处理能力要求更高。
共LB
、HA
、HPC
三种类型
1.3 系统可靠性指标
MTBF
:Mean time Between Failure 平均无故障时间
MTTR
:Mean TimeTo Repair 平均故障恢复时间
A=MTBF/(MTBF+MTTR)
A指标要在0~1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可用,A指标要无限接近于1,
90~95% 不合格
98~98% 合格
都是以小时为单位,一年365天=8760小时
1.4 停机时间
1.4.1 计划内时间:可以忽略不计,但是现在也计算在内
1.4.2 计划外时间:就是故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须要关注的指标
dy------当天事必须当天解决-----没有解决之前,人是不可以离开的-----解决完成之后必须生成报告,备案-----日报、周报、月报、年报
运维精神:7*24小时待命(及时响应、及时处理、及时总结)
1.5 lvs适用场景
小集群不需要使用lvs,大集群使用lvs
1.6 lvs集群中的术语
VS
:virtual server,是lvs的逻辑名称,也就是我们在外部访问lvs集群时使用的ip地址和端口
DS
:director server,是lvs当中的主服务器,也是调度器(nginx的代理服务器),是集群的核心,调度器就是用来接收客户端的请求转发到后端的服务器
RS
:real server,是lvs集群中的真实服务器(后端服务器),用来接收调度器转发过来的请求,并且响应结果。
CIP
:client ip,即客户端的地址,也就是发起请求的客户端的IP地址
VIP
:virtual ip,是lvs集群使用的ip地址,是对外提供集群访问的虚拟ip地址
DIP
:director ip,即调度器在集群当中的地址,用于和RS进行通信
RIP
:real ip,即后端服务器在集群当中的ip地址
1.7 lvs的工作方式
NAT模式
:要由调度器响应给客户端
DR模式
:直接路由模式,由真实路由器直接响应给客户端
TUN模式
:隧道模式
常用的模式:NAT
和DR
NAT模式
nat模式是常用lvs的模式之一,在nat模式下,lvs会将来自客户端的请求报文的目的ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器
响应结果返回客户端的过程中,响应报文也要经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口
好处:对于客户端来说请求的目标地址始终不变,因此客户端的配置不需要做特殊修改,只是调度器在对ip地址和端口进行转换,后端的服务器也不需要修改任何配置
缺点:性能损失,请求和响应每次都经过调度器进行地址转换,影响性能。nat模式只能有一个调度器,调度器故障,整个集群就不能正常工作了
1.8 地址转换
内网-------外网 转换的是源ip地址 snat
外网-------内网 转换的是目的地址 dnat
1.8.1 客户端发起请求,访问vip地址,到达调度器
1.8.2 调度器接收请求之后,根据负载均衡算法选一个后端服务器
1.8.3 请求地址,转化成可以直接和内部RS通信的ip地址
1.8.4 后端服务器处理请求
1.8.5 目的地址转换,转换成vip地址
1.8.6 调度器的vip响应给客户端
1.9 lvs的工具
ipvsadm工具:用来配置和管理lvs集群的工具
-A
:添加虚拟服务器(vip)
-D
:删除虚拟服务器地址
-s
:指定负载均衡的调度算法
1.10 lvs算法
rr默认,轮询
wrr,加权轮询
lc,最小连接
wlc,加权最小连接
-a
:添加真实服务器
-d
:删除真实服务器
-t
:指定vip的地址和端口
-r
:指定rip的地址和端口
-m
:使用nat模式
-g
:使用DR模式
-i
:使用隧道模式
-w
:设置权重
-p
:设置连接的保持时间
-l
:列表查看
-n
:数字化展示
二、地址转换实验
nginx1 RS1 192.168.100.11
nginx2 RS2 192.168.100.12
test1:调度器 ens33 192.168.100.13 ens36 12.0.0.1
test2:客户端 12.0.0.10
bash
#test1#
添加虚拟网卡,ifconfig查看后为ens36
#test1和2#
systemctl stop firewalld
setenforce 0
#nginx1和2#
systemctl stop firewalld
setenforce 0
systemctl restart nginx
#test1#
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm* -y
#test1#
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens33
# 注释网关和dns,直接用本机的ip地址做网关
vim ifcfg-ens33
# 注释网关和dns,修改ens=36,ip=12.0.0.1(vip地址)
systemctl restart network
ifconfig # 查看一下
#nginx1和nginx2#
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33
# 修改网关指向内网网关即test1的ip地址(test1 192.168.100.13)
systemctl restart network
# 修改访问内容
#nginx1#
vim /usr/local/nginx/html/index.html
this is nginx1
wq!
#nginx2#
vim /usr/local/nginx/html/index.html
this is nginx2
wq!
#test1#
iptables -t nat -vnL
# 查看nat表是否有策略,没有直接往里面加就可以了
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens36 -j SNAT --to 12.0.0.1
iptables -t nat -vnL
# 查看nat表策略,新增一条含义为,从ens36设备出的所有网段,将其转化为12.0.0.1(内---->外,源地址转化)
cd /opt
systemctl restart ipvsadm.service
# 会出现报错 tail -f /var/log/message
# 原因:没有配置,即/etc/sysconfig/ipvsadm里面的配置是空的,空的就会报错
# 处理方法:先设置,设置完把配置保存在这个目录里面,生成这个文件就可以了
# 设置:先添加,如果之前有就先清空后再添加
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.100.11:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.12:80 -m
ipvsadm -ln
# 出现vip为12.0.0.1:80,指定算法为rr(这个需要自己指定,一定要写),192.168.100.11:80和192.168.100.12:80表示指向的后端服务器,其中Masq代表的意思就是nat模式,不设置权重的话,默认权重就是1
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm
ipvsadm -ln
# 可能会出现bug,地址错误(vip为12.0.0.1:80发生变化),解决办法:只能删除重改
#下面是删除策略操作
ipvsadm -D -t 错误地址 #删除策略
ipvsadm -ln
# 删除策略操作完毕
重新操作上面步骤
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.11:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.12:80 -m
systemctl restart ipvsadm
ipvsadm -ln
# 此时为正确vip地址(12.0.0.1:80)
ipvsadm -save > /etc/sysconfig/ipvsadm
ipvsadm -ln
vim /etc/sysctl.conf
# 在最后一行添加
net.ipv4.ip_forward=1
wq!
sysctl -p
#test2客户端#
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改网关指向vip地址(12.0.0.1)
# ip地址修改为和外网一个网段,随便改12.0.0.20
systemctl restart network
此时打开nginx1和nginx2
tail -f /usr/local/nginx/logs/access.log
进入客户端(test2)虚拟机访问12.0.0.1
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.11:80 -m
-a
:添加真实服务器
-t
:指定vip地址
-r
:指定真实服务器的地址和端口
-m
:指定模式为nat模式
bash
## 如何删除节点服务器
## ipvsadm -d -r 192.168.100.11:80 -t 12.0.0.1:80
添加节点服务器和删除节点服务器的区别?
添加:vip在前,真实服务器在后
删除:真实服务器在前,vip在后
#添加节点和删除顺序反过来,前面是-d,-D表示删除策略
算法和加权演示
bash
#test1#
ipvsadm -D -t 12.0.0.1:80
# 没有办法修改,只能推到重来,删除策略
ipvsadm -A -t 12.0.0.1:80 -s wrr
# wrr加权轮询
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.11:80 -m -w 2
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.12:80 -m -w 3
ipvsadm -ln
# 查看 不需要重启直接生效
此时打开nginx1和nginx2
tail -f /usr/local/nginx/logs/access.log
进入客户端(test2)虚拟机访问12.0.0.1,nginx2的权重高,访问页面出现次数多
# 加权最小连接操作
# ipvsadm -A -t 12.0.0.1:80 -s wlc
# 把加权轮询wrr,修改为wlc,其余不变
创建vip地址的时候才能指定负载均衡的算法,不是在真实服务器添加算法,没有办法修改,只能推到重来