基于DR模式的LVS

来源:互联网 发布:安卓版ps软件中文版 编辑:程序博客网 时间:2024/05/17 22:05


1 引入

集群是为解决某个特定问题将多台计算机组合起来形成的单个系统,有以下三种类型:

LB:Load Balancing,负载均衡集群

HA:High Availiablity,高可用集群

HPC:High-performance computing,高性能计算集群

             LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一款可实现负载均衡集群的开源软件


2   lvs集群类型中的术语


VS:Virtual Server, Director, Dispatcher(调度器)、Load Balancer

RS:Real Server(lvs), upstream server(nginx)、backend server(haproxy)

CIP:Client IP

VIP:Virtual serve IPVS外网的IP

DIP:Director IPVS内网的IP

RIP: Real server IP


3 lvs集群的类型


1)LVS-NAT
       本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某RS的RIP和PORT实现转发

2)LVS-DR

    即直接路由,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

3)LVS-TUN

    不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)

4)LVS-FULLNAT

   通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP

VIP --> RIP  RS的RIP和PORT实现转发


4 lvs调度算法

   

    根据其调度时是否考虑各RS当前的负载状态可以分为静态调度算法和动态调度算法
    静态方法:仅根据算法本身进行调度
   1)RR:roundrobin,轮询
   2)WRR:Weighted RR,加权轮询
   3)SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
   4)DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

   动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
    1)LC:least connections 适用于长连接应用
Overhead=activeconns*256+inactiveconns
    2)WLC:Weighted LC,默认调度方法
Overhead=(activeconns*256+inactiveconns)/weight
     3)SED:Shortest Expection Delay,初始连接高权重优先
Overhead=(activeconns+1)*256/weight
     4)NQ:Never Queue,第一轮均匀分配,后续SED
     5)LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
     6)LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

      本节将重点介绍LVS-DR模式:

      假设本实验中192.168.25.0/24、172.18.0.0/16网段的ip为公网ip,即vip、dip、rip、cip都是公网ip

实验环境

客户端:172.18.254.21

VS:192.168.25.107(vip)、192.168.25.7(dip)

rs路由器:172.18.100.100、192.168.25.146

RS1(Apache服务器):192.168.25.106(rip1)、192.168.25.107(vip)

RS2(Apache服务器):192.168.25.108(rip2)、192.168.25.107(vip)

实验准备:清空防火墙策略、禁用防火墙(临时禁用、开机禁用)、禁用selinux(临时禁用、开机禁用)

客户端的路由记录:

172.18.0.0   0.0.0.0 

0.0.0.0  172.18.100.100

路由器的路由记录:

172.18.0.0       0.0.0.0 

192.168.25.0       0.0.0.0

0.0.0.0         xxxx

vs的路由记录:

192.168.25.0   0.0.0.0

rs1的路由记录:

192.168.25.0   0.0.0.0

0.0.0.0            192.168.25.146

rs2的路由记录:

192.168.25.0   0.0.0.0

0.0.0.0            192.168.25.146

        首先简单介绍一下arp广播的过程:主机A要向主机B发送数据包(主机A已知主机B的ip),首先会检查本机路由表,判断目标主机是否与本机在同一网段:若目标主机与本机在同一网段,主机A会向网络中发送arp广播:谁是ipB,请告诉我你的mac地址。主机B收到后回应自己的mac地址给A,二者开始进行数据传送;若目标主机与本机不在同一网段,主机A会arp广播寻找路由器的mac地址,然后通过路由器与主机B进行数据传送。
       客户端发送请求数据包(源ip:172.18,254.21即cip,目标ip:192.168.25.107即vip)时,查询本机路由表后认为目标主机与本机不在一个网段,并由默认路由获得网关ip,就向网关发送arp广播:谁是172.18.100.100,请告诉我你的mac地址。172.18.100.100即路由器收到后就回复客户端自己的mac地址。然后客户端将请求数据包发送给路由器{源mac:客户端172.18,254.21所在网卡的mac,目标mac:路由器172.18.100.100所在网卡eth1的mac(源ip:172.18,254.21即cip,目标ip:192.168.25.107即vip)}。
        路由器收到后,查询本机路由表后认为目标主机与本机在一个网段,就向网络中发送arp广播:谁是192.168.25.107,请告诉我你的mac地址。由于vs和rs上都配置有vip,且DR模式下vs与rs在同一物理网段,所以若不进行相关设置,拥有vip:192.168.25.107的主机都会响应路由器的arp广播,就会产生地址冲突。可以通过在各RS修改内核参数arp_ignore、arp_announce来限制arp响应和通告的级别:
               限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

1:尽量避免将接口信息向非直接连接网络进行通告

2:必须避免将接口信息向非本网络进行通告

       arp_ignore为1时arp请求包的目标ip是eth0且请求包由eth0接收时,才响应该arp请求

       arp_announce为2时eth0为某ip的arp广播只通过eth0接口发送出去。

    在rs1,rs2、vs上配置vip192.168.25.107,并设置rs1,rs2的arp_ignore为1、arp_announce为2,目的是当路由器发送arp广播寻找192.168.25.107的mac地址时,只有vs响应,避免同时响应带来的地址冲突。

    因为vs的eth0上有192.168.25.107/24,且eth0可以接收arp请求,所以eth0响应路由器的arp请求(即使目标ip不在eth0,由于vs未设置arp_ignore=1,也可以进行响应),回复本机eth0的mac给路由器;

        rs1的lo上有192.168.25.107/32,由于lo无法接收arp请求,所以由eth0代为接收并转发给lo,但是设置了arp_ignore=1,因为目标ip不在接收请求的eth0上,所以虽然接收了请求,但是不进行响应。
       于是路由器将数据包{源mac:路由器 192.168.25.146所在网卡eth0的mac,目标mac:vs  192.168.25.107/24所在网卡eth0的mac(源ip:172.18,254.21即cip,目标ip:192.168.25.107即vip)}发送给vs,vs收到后将数据包发送给eth0192.168.25.107:80,即集群服务,所以vs根据集群服务定义的策略向本网段发送arp广播:谁是192.168.25.106,请告诉我你的mac地址。192.168.25.106即rs1的eth0(eth0上有arp请求的目标ip192.168.25.106,必须由eth0接收该arp请求才能响应)收到该arp请求后回复本机192.168.25.106所在网卡eth0的mac地址给vs,于是vs将数据包{源mac:vs192.168.25.7/24所在网卡eth0的mac,目标mac:rs1  192.168.25.106/24所在网卡eth0的mac(源ip:172.18,254.21即cip,目标ip:192.168.25.107即vip)}发送给rs1。

      rs1收到数据包{源mac:vs192.168.25.7/24所在网卡eth0的mac,目标mac:rs1  192.168.25.106/24所在网卡eth0的mac(源ip:192.168.25.107即vip,目标ip:172.18,254.21即cip)}后进行回复,因目标ip与本机不在同一网段,所以向网关发送arp广播:谁是192.168.25.146,请告诉我你的mac地址。路由器收到后将路由器 192.168.25.146所在网卡eth0的mac发送给rs1。rs1发送响应{源mac:rs1  192.168.25.106/24所在网卡eth0的mac,目标mac:路由器 192.168.25.146所在网卡eth0的mac(源ip:192.168.25.107即vip,目标ip:172.18,254.21即cip)}到路由器。
       路由器收到响应{源mac:rs1  192.168.25.106/24所在网卡eth0的mac,目标mac:路由器 192.168.25.146所在网卡eth0的mac(源ip:192.168.25.107即vip,目标ip:172.18,254.21即cip)}后,根据本机路由表,发送arp广播:谁是172.18,254.21,请告诉我你的mac地址。客户端回复mac后路由器即将该包发送给客户端。

    在rs1和rs2上的网页本应是相同的,但是为了观察lvs调度器的调度结果,将主页面设为不同的。

修改rs1的网页
修改rs2的网页



路由器的转发功能已开启,即ip_forward=1

修改客户端的路由策略
修改vs的路由策略
修改rs1的路由策略
修改rs2的路由策略

每个网卡有arp_ignore、arp_announce,all也有arp_ignore、arp_announce,都要进行设置
rs配置脚本

rs上的配置:

1)在lo上配置192.168.25.107/32

2)配置主机路由:

destination netmask iface

192.168.25.107 255.255.255.0 lo

3)修改内核参数:arp_ignore=1,arp_announce=2


rs2上也运行该脚本

vs配置脚本


在rs上的配置:

1)在eth0上配置192.168.25.107/24

2)定义ipvs策略:

ipvsadm -A -t 192.168.25.107:80 -s wrr

ipvsadm -a -t 192.168.25.107:80 -r 192.168.25.106 -g -w 1

ipvsadm -a -t 192.168.25.107:80 -r 192.168.25.108 -g -w 1

-A 增加集群服务

-t 指定TCP协议的端口

-s 指定集群的调度算法

-a 增加集群上的RS

-r 指定rs的地址

-g 集群类型为dr类型

-w 权重

第一条规则定义了集群服务192.168.25.107:80,调度算法为wrr加权轮询

第二条规则在集群服务192.168.25.107:80上增加rs:192.168.25.106,集群类型为dr类型,该rs所占权重为1

第三条规则在集群服务192.168.25.107:80上增加rs:192.168.25.108,集群类型为dr类型,该rs所占权重为1



调度成功

总结:

(1) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

(2) RS和Director要在同一个物理网端

(3) 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

(4) 不支持端口映射(端口不能修败)

(5) RS可使用大多数OS系统


原创粉丝点击