Linux集群入门之:正明的lvs

一、集群

1. HA:高可用性,衡量标准,平均无故障时间

平均无故障时间/(平均无故障时间+平均修复时间)---à 95%, 99%, 99.9%, 99.99%, 99.999%

四层交换,工作在tcp/ip的第四层。无法根据应用层转发。

七层转发,七层负载均衡。可以使用应用层来控制。

2. 集群类型

Linux集群入门之:正明的lvs

3. LB

硬件解决方案:F5 BIG-IP / Citrix Netscaler / A10 A10 / Array / Redware

软件解决方法之lvs

类型

NAT

1、 RS应该使用私用地址

2、 RS网关必须指向DIP

3、 RIP和DIP必须要在同一网段内

4、 请求和响应的报文都要经过Director。在负载场景中,Driector很可能成为性能瓶颈

5、 支持端口映射

6、 RS可以使用任意支持几乎服务的OS

10个RS情况下使用

小知识:cip请求到达vip,vip将报文经过DNAT (服务器发布)转发给RS,RS进行处理,然后RS将网关指向DIP,这样,再经过目标地址转换,将处理的请求发送给cip。Director处理达大量的数据,因此负压较大

DR

直接路由(Direct Routing)。DR是为了解决NAT模式下Driector负载了接受请求,返回请求的双重任务。将返回请求的工作解放出来,由RS自己来处理,自己来返回。

让前端路由将请求发往VIP时,只能是Director上的VIP。禁止RS响应对VIP的ARP的广播请求。解决方案:

1)静态地址绑定:未必有路由器的配置权限;故障转移时,无法更新绑定

2)在RS上安装arptables,自写规则

3)RS必须是Linux,修改Linux内核参数,将RS上的VIP配置为lo接口别名,限制Linux仅对对应的ARP请求响应

1、 RS可以使用私有地址,也可以使用公网地址,此时可以直接通过互联网连入RS实现监控、配置等

2、 RS的网关不能指向DIP

3、 RS需跟Director在同一物理网络内(不能由路由器分隔)

4、 请求报文经过Director,但响应报文一定不经过Director

5、 不支持端口映射

6、 RS可以使用大多数的操作系统(可以配置VIP等)

一些小知识点:有两种情况A,vip dip rip不在同一网络内,dip rip在同一个局域网内,vip为i外网IP。在Director中通过广播维护有RS的mac:ip地址对应表,当请求报文到来之后,更改了目标vip的mac地址,在物理网络内由于是通过mac地址通信,因此可以正确找到对应的RS服务器。在对应的RS服务器内,配置有vip,这样,通过vip处理,得到响应数据包源地址vip,目标地址cip。这个时候,只能通过RS的网卡进行通信(虽然在RS中有vip,但是这个只能修改响应报文的源IP,不能与外部主机进行通信),这样,RS就不能接入与vip相同的路由器,因为他们不在同一个网段。这个时候就需要给RS提供一个单独的路由器,然后与cip进行通信

B,vip dip rip在同一个网段内,都是互联网IP,这样,vip接受报文请求,转发至RS,RS处理后直接通过相同的路由器设备就可以与cip通信

TUN

IP隧道

1、 RIP DIP VIP 都需要为公网地址

2、 RS网关不会指向也不可能指向DIP

3、 请求报文经过Director,但响应报文一定不经过Director

4、 不支持端口映射

5、 RS的os必须支持隧道功能

FULLNAT

需给内核打补丁

lvs调度方法(scheduling method)

Linux集群入门之:正明的lvs

session管理

1、 session绑定:始终将同一个请求这的连接定向至同一个RS(第一此请求时仍由调度方法选择),没有容错能力

2、 session复制:在RS之间同步session,因此,每个RS持有集中中所有的session,对与大规模的集群环境不使用,反集群

3、 session服务器:利用单独部署的服务器统一存储管理session,需要使用高可用的方法实现。

 

4. 什么是lvs集群服务

Linux集群入门之:正明的lvs

LVS :Linux Virtual Server

基本概念:lvs无法监控后台服务器的健康状况。工作在内核,数据不用进入用户空间,已经脱离了套接字的限制,效率高,使用于大型网站。IPVS与iptables不能同时使用

四层交换:四层路由

ipvs根据请求目标套接字(包括端口的协议类型tcp,udp)来实现转发。

ipvs依靠ipvsadm书写规则实现功能

系统默认支持ipvs,但默认的管理工具ipvsadm需要安装。

Linux集群入门之:正明的lvs

Linux集群入门之:正明的lvs

5、NAT模式

Linux集群入门之:正明的lvs


Linux集群入门之:正明的lvs
Linux集群入门之:正明的lvs

在NAT模式中,请求从CIP发出,vip接受到请求报文时,源IP为cip,目标IP为vip。经过lvps,使用目标地址转换,报文头发生改变,源IP为cip,目标IP为rip。在RS处理之后,再封装成报文,此时报文rip为源地址,vip为目标地址,指定RS的默认网关为dip。

经过Director的DNAT功能,出去之后的源IP地址为vip,目标地址cip。这样cip就可以得到自己想要要的响应。

因此,主要的配置如下:

基本的配置思路:在Director上设定vip(这里vip是一个浮动的IP地址,设置成eth0的别名)。设置dip(dip作为rip的默认网关)。在RS上设置好各自的ip地址即可。这些设置好后,在Driector上打开转发(不同的IP之间的数据转发),然后设置ipvs的规则即可。设置完成后可以测试。

 

Linux集群入门之:正明的lvs

6、DR模式

Linux集群入门之:正明的lvs

 

Linux集群入门之:正明的lvs

在DR模式下,Director有两个IP,vip和dip。RS也有两个IP,vip和rip。

为什么要给RS vip?

为了分摊Director的负担,将响应的工作给了RS。这样出去的报文要由DR来承担发送。不考虑别的问题,RS处理了Director发过来的请求,如果不做任何改变,仍然以自己的IP地址作为源IP,那么报文将不能正确响应cip。因此,需要给RS分配vip地址,数据报的格式包装成源IP为vip,目标Ip为cip。

怎样实现Driector转发给RS,并且目标IP是vip?

当用户请求的报文到达网络后,用arp协议请求vip的物理位置,这个时候一定要认为屏蔽掉RS的vip响应请求报文,确保请求报文能正确找到Director,到达Director之后,经过调度将请求转发给RS,根据上述问题,如果将整个时候的目标地址更改为rip,最后报文将不能正确响应客户端。因此在上图3位置,不能使用rip作为目标地址,仍然使用vip。为了能够找到RS,Director维护了一张RS的IP与mac地址对应表,此处处理后,将vip的mac地址更换为rip的mac地址,就可以正确找到RS了。

具体的流程是什么?

如上图所示,解析之:当客户端的请求过来,源IP为cip,目标ip为vip。到达内部的物理网络后,广播请求知道vip所在的物理位置,这个时候一定要屏蔽掉RS上的vip对此请求的回应(此处包含两层含义:在广播请求IP的时候,设置RS上的vip广播地址为自己,不响应这个广播;在arp层面上,设置不响应不通告arp(由于Linux特性,会主动通报接受主机上所有的网卡信息)),请求报文正确到达Director,经过处理,替换vip的mac地址为RS的mac地址,找到RS。在RS上处理之后,封装为源IP是vip,目标IP是cip的报文响应客户端。在从RS出去之后,有两种情况需要考虑。如果RS同vip一样,在同一个网段,都是公网IP,那么可以直接连接同一个路由器直接转发出去;如果RS仅仅是内部的IP地址,这个时候,由于不和ip在同一个网段不能使用同一个路由器,必须使用另外的路由器做转发。

关联知识

Linux集群入门之:正明的lvs

当rip、dip、vip在同一网段中时:

Linux集群入门之:正明的lvs

配置过程:

1、 配置Director上IP信息

1) 配置vip为eth0:0 172.16.37.10

2) 设置主机路由

# route add -host 172.16.37.11 dev eth0:0 ?这一步有必要吗?

打开转发功能

echo "1" > /proc/sys/net/ipv4/ip_forward

2、 配置RS上IP

1) 设置rip:设置ip为 172.16.37.2 172.16.37.3

2) 设置arp规则

# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

3) 设置vip在lo上:

# ifconfig lo:0 172.16.37.10 netmask 255.255.255.255 broadcast 172.16.37.11 up

4) 设置lo的主机路由

# route add -host 172.16.37.10 dev lo:0

3、 配置Director上规则

# ipvsadm -A -t 172.16.37.10:80 -s rr

# ipvsadm -a -t 172.16.37.10:80 -r 172.16.37.2 -g

# ipvsadm -a -t 172.16.37.10:80 -r 172.16.37.2 –g

 

vip与dip、rip不在同一网段时

 

 

Linux集群入门之:正明的lvs

这里,使用的客户端是172.16.37.100。192.168.0.1与172.16.0.1之间能互相转发。这里还有一个dip 192.168.37.100,但是似乎没有使用上使用

1、 配置各IP地址

1) 配置Director上的vip:

ifconfig eth0:0 172.16.37.10 netmask 255.255.255.255 broadcast 172.16.37.10 ?

route add –host 172.16.37.10 dev eth0:0

2) 配置RS上的IP

ipconfig eth0 192.168.0.2/24

ipconfig eth0 192.168.0.3/24

确认他们的网关是192.168.0.254

route add default gw 172.168.0.254

2、 配置RS上的内核参数

# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

3、 配置RS上的lo:0及主机路由:

ifconfig lo:0 172.16.37.10 netmask 255.255.255.255 broadcast 172.16.37.10

route add –host 172.16.37.10 dev lo:0

4、 配置RS上规则

# ipvsadm -A -t 172.16.37.10:80 -s rr

# ipvsadm -a -t 172.16.37.10:80 -r 192.168.0.2 -g

# ipvsadm -a -t 172.16.37.10:80 -r 192.168.0.3 –g

转发功能打开echo "1" > /proc/sys/net/ipv4/ip_forward

(这个不是持久有效的)

 

7、LVS持久性

连接模板:ipvsadm –L –C

在Director中的连接模板,记录了连接信息,包括timeout。根据用户模版,追踪用户请求,设置请求时间。

持久连接类型

PCC

将来自于同一个客户端发往VIP的所有请求同一定向至同一个RS

定义规则时 ipvsadm –A –t 172.16.37.10:80 –p 120

ipvsadm –A –t 172.16.37.10:0

PPC

将来自同一个客户端发往某VIP的某端口的所有请求同一定向至同一个RS

定义规则时

ipvsadm –A –t 172.16.37.10:22

PFMC

端口绑定:port affinity。能够实现基于防火墙标记,将两个或以上的端口绑定为同一个服务。

 

若超时,则默认续订2分钟

主要介绍:PFMC,这里使用iptables给防火墙打标记。然后再编写规则

Linux集群入门之:正明的lvs

RS设置同DR。主要是在Director上设置有所不同。

设置防火墙标记:# iptables -t mangle -A PREROUTING -d VIP -p tcp --dport CS_Port -j MARK --set-mark # (0-99)

定义集群规则:# ipvsadm -A -f #

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 172.16.37.10 -p tcp --dport 80 -j MARK --set-mark 10

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 172.16.37.10 -p tcp --dport 443 -j MARK --set-mark 10

[root@localhost ~]# service iptables save

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

[root@localhost ~]# ipvsadm -A -f 10 -s rr

[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.0.2 –g

[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.0.3 –g

 

 

小结:lvs是淘宝正名研发的集群开源软件,作为国人开发的软件,由是开源软件中的佼佼者,应多学习使用。但,这里不禁要思考一个问题,马云真的是个好鸟吗?呵呵

Linux集群入门之:正明的lvs,布布扣,bubuko.com

Linux集群入门之:正明的lvs

上一篇:全面了解linux服务器的常用命令总结


下一篇:【linux驱动分析】ioctl函数的使用