Linux集群入门之:正明的lvs

  • 一、集群

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

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

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

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

    2. 集群类型

    image

    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)

    image

    session管理

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

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

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

     

    4. 什么是lvs集群服务

    image

    LVS :Linux Virtual Server

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

    四层交换:四层路由

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

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

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

    image

    image

    5、NAT模式

    image

    image image

    在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的规则即可。设置完成后可以测试。

     

    image

    6、DR模式

    image

     

    image

    在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在同一个网段不能使用同一个路由器,必须使用另外的路由器做转发。

    关联知识

    image

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

    image

    配置过程:

    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不在同一网段时

     

     

     

    image

    这里,使用的客户端是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给防火墙打标记。然后再编写规则

    image

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值