Linux集群入门之:正明的lvs
一、集群
1. HA:高可用性,衡量标准,平均无故障时间
平均无故障时间/(平均无故障时间+平均修复时间)---à 95%, 99%, 99.9%, 99.99%, 99.999%
四层交换,工作在tcp/ip的第四层。无法根据应用层转发。
七层转发,七层负载均衡。可以使用应用层来控制。
2. 集群类型
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)
session管理
1、 session绑定:始终将同一个请求这的连接定向至同一个RS(第一此请求时仍由调度方法选择),没有容错能力
2、 session复制:在RS之间同步session,因此,每个RS持有集中中所有的session,对与大规模的集群环境不使用,反集群
3、 session服务器:利用单独部署的服务器统一存储管理session,需要使用高可用的方法实现。
4. 什么是lvs集群服务
LVS :Linux Virtual Server
基本概念:lvs无法监控后台服务器的健康状况。工作在内核,数据不用进入用户空间,已经脱离了套接字的限制,效率高,使用于大型网站。IPVS与iptables不能同时使用
四层交换:四层路由
ipvs根据请求目标套接字(包括端口的协议类型tcp,udp)来实现转发。
ipvs依靠ipvsadm书写规则实现功能
系统默认支持ipvs,但默认的管理工具ipvsadm需要安装。
5、NAT模式
|
在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的规则即可。设置完成后可以测试。
6、DR模式
在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在同一个网段不能使用同一个路由器,必须使用另外的路由器做转发。
关联知识
当rip、dip、vip在同一网段中时:
配置过程:
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不在同一网段时
这里,使用的客户端是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给防火墙打标记。然后再编写规则
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是淘宝正名研发的集群开源软件,作为国人开发的软件,由是开源软件中的佼佼者,应多学习使用。但,这里不禁要思考一个问题,马云真的是个好鸟吗?呵呵
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。