lvs集群

时间:2024-07-10 09:02:49

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、结果