lvs集群:
linux virtual server
章文嵩发起的开源项目,阿里。Linux的内核层面实现负载均衡的软件。
主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求,分发到后端服务器上。
来实现高可用和负载均衡。
阿里的SLB
server loab balance lvs+keepalive 实现的。
集群和分布式:
系统的拓展方式:
垂直扩展:向上扩展,增强,性能更强的计算机。计算机本身设备的限制,硬件本身的性能瓶颈。
水平扩展:向外扩展,增加设备。并行的运行多个服务,依靠网络解决内部通信的问题,cluster 集群。
集群:为了解决某个特定的问题将多台计算机组合起来形成的单个系统。
集群的类型,三种类型:
LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求。
HA:high availiablity 高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行。为了维护系统的可用性,可靠性,容错性。
HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。
系统可靠性指标:
MTBF:Mean Time Between Failure 平均无故障时间
MTTR:Mean Time Resotration Reoair 平均故障恢复时间
A=MTBF/(MTBF+MTTR) 范围在0~1之间,A指标就是系统可用性的度量,0表示系统越不可用,1表示系统越可用。
A指标要无线接近于1。
99.99%
都是以小时为单位:
365天=8760小时
停机时间:
计划内时间,计划内的时间可以不计。但是现在也算在内
计划外时间,故障时间,从故障方式到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标。(当天事必须当天解决,没有解决之前,人是不可以离开的,解决完之后必须生成报告,备案。)
运维精神:7*24小时待命(出了问题,及时响应,及时处理,及时总结。)
lvs适用场景:
小集群不需要使用lvs,大集群使用lvs。
lvs集群中的术语:
VS Vittual Server lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的IP地址和端口
DS Driector Server lvs集群中的主服务器,也就是调度器(nginx的代理服务器),是集群的核心
调度器就是用来接收客户端的请求转发到后端的服务器。
RS Real Server lvs集群中的真实fwq,后端服务器,用来接收DS转发来的请求,并且响应结果。
CIP Client 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地址
外网--------内网 转换的目的地址
1、客户端发起请求,访问vip地址达到调度器
2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器
3、请求的地址,转成可以直接和内部RS通信的IP地址
4、后端服务器处理请求
5、目的地址转换,转换成vip地址
6、调度器的vip响应给客户端。
lvs的工具
ipvsadm工具,用来配置和管理lvs集群的工具
-A 添加虚拟服务器 vip
-D 删除虚拟服务器地址
-s 指定负载均衡的调度算法
算法:
rr 默认轮询
加权轮询 wrr
最小连接 lc
加权最小连接 wlc
-a 添加真实服务器
-t 指定vip的地址和端口
-r 指定rip(真实)的地址和端口
-m 使用nat模式
-g 使用DR模式
-i 使用隧道模式
-w 设置权重
-p 设置连接保持时间 -p 60
-l 列表查看
-n 数字化展示
nat集群实验:
操作:
1、在test7中安装ipvsadm配置文件
[root@test7 ~]# yum -y install ipvsadm
2、配置网卡
[root@test7 ~]# cd /etc/sysconfig/network-scripts/
[root@test7 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
ens33
[root@test7 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.60.70
NETMASK=255.255.255.0
#GATEWAY=192.168.60.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
ens36
[root@test7 network-scripts]# vim ifcfg-ens36
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.60.2
#DNS1=218.2.135.1
#DNS2=221.131.143.69
3、配置nginx1和nginx2的网卡
nginx1:
[root@test3 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.60.30
NETMASK=255.255.255.0
GATEWAY=192.168.60.70
DNS1=218.2.135.1
DNS2=221.131.143.69
nginx2
[root@test4 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.60.40
NETMASK=255.255.255.0
GATEWAY=192.168.60.70
DNS1=218.2.135.1
DNS2=221.131.143.69
4、更改nginx1和nginx2的静态网页页面
nginx1
[root@test3 network-scripts]# vim /usr/local/nginx/html/index.html
this is test3
nginx2
[root@test4 network-scripts]# vim /usr/local/nginx/html/index.html
this is test4
5、在test7中指定表名创建策略
[root@test7 network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.60.0/24 -o -ens36 -j SNAT --to 12.0.0.1
[root@test7 network-scripts]# iptables -t nat -vnL
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * -ens36 192.168.60.0/24 0.0.0.0/0 to:12.0.0.1
6、指定好vip的地址和端口
[root@test7 opt]# ipvsadm -A -t 12.0.0.1:80 -s rr
7、添加真实服务器
[root@test7 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.60.30:80 -m
[root@test7 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.60.40:80 -m
[root@test7 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr
-> 192.168.60.30:80 Masq 1 0 0
-> 192.168.60.40:80 Masq 1 0 0
8、保存并重启策略
[root@test7 opt]# systemctl restart ipvsadm
[root@test7 opt]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@test7 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr
-> 192.168.60.30:80 Masq 1 0 0
-> 192.168.60.40:80 Masq 1 0 0
9、开启路由转发的功能
[root@test7 opt]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
10、更改客户端test8的网关配置
[root@test8 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.10
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
DNS1=218.2.135.1
DNS2=221.131.143.69
11、结果
设置权重:
1、创建权重策略
[root@test7 opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr
[root@test7 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.60.30:80 -m -w 2
[root@test7 opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.60.40:80 -m -w 1
[root@test7 opt]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 wrr
-> 192.168.60.30:80 Masq 2 0 0
-> 192.168.60.40:80 Masq 1 0 0
2、结果