您的位置:首页 > 其它

四层负载均衡LVS DR模式配置

2018-07-20 21:18 369 查看

一、LVS 简介

LVS(Linux Virtual Server 虚拟服务器):是一个虚拟的四层路由交换器集群系统,根据目标地址和目标端口实现用户请求转发。

LVS工作原理:
1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2、PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3、IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4、POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

 

二、LVS组成

lvs有两段代码组成,ipvsadm和ipvs

ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。

 

三、LVS的术语

Direstor Server(DS)

Real Server(RS)

VIP:virtual IP 向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP,主要用于和内部主机通讯的IP地址

RIP:Real Server IP

CIP:Client IP,客户端IP

 

四、LVS的类型

根据架构有4种不同的模型
1、LVS-NAT (Network Address Translation)

    后端服务器支持数量10-20台

    使用最少两个网段

    可以说是3层负载均衡

2、LVS-DR (Direct Routing 直接路由)

      后端服务器支持数量100+台

      使用一个网段

      可以说是2层负载均衡
3、LVS-TUN(Tunneling 隧道)

     后端服务器支持数量100左右

     异地负载均衡  realserver必须使用公网Ip,还得需要服务器支持ip隧道协议

4、FULL-NAT

 

五、LVS-DR 配置

1、基础环境:

关闭所有机器防火墙,selinux

两台RS服务器安装nginx并启动

所有IP同一网段

DR服务器安装 ipvsadm

2、在DR上添加新网卡获得IP为 192.168.122.164

查看路由条目,排在下方的网卡IP设置为VIP,另外一个为DIP

[code][root@nginx ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.122.1   0.0.0.0         UG    100    0        0 eth1
0.0.0.0         192.168.122.1   0.0.0.0         UG    101    0        0 ens8
192.168.122.0   0.0.0.0         255.255.255.0   U     100    0        0 eth1
192.168.122.0   0.0.0.0         255.255.255.0   U     101    0        0 ens8

3、RS设置:

# ip addr add dev lo 192.168.122.164/32           两台RS的网卡lo上添加子网掩码为32位的IP即为VIP    

给两台RS服务器设置内核参数:
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce         设置arp_announce文件的内容为2, 效果是使用本机最好的本地IP地址发送回应包(子网掩码较长即VIP)
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore                设置arp_ignore文件内容为1,效果是拒绝VIP作出ARG广播响应,以免与DR产生冲突

4、DR设置:

 在DR上设置LVS路由条目
# yum install ipvsadm  -y
 # ipvsadm   -A  -t 192.168.122.164:80  -s  rr
# ipvsadm   -a   -t 192.168.122.164:80  -r 192.168.122.119:80  -g
 # ipvsadm   -a   -t 192.168.122.164:80  -r 192.168.122.175:80  -g

# ipvsadm  -l  查看配置结果

-A 添加virtual server
-t  指定使用tcp协议
-s 指定调度策略为rr    轮询
-a 添加realserver
-r 指定realserver

让配置永久生效
# ip  vsadm-save > /etc/sysconfig/ipvsadm

# systemctl enable ipvsadm                              

5、验证:

在CLIENT上   #  curl   http://192.168.122.164          指定VIP进行访问

                         #  elinks   - - dump  http://192.168.122.164     

 

六、理论补充

1. 客户端要找vip访问80端口,因为是在同一个网段,所以发arp广播找vip的mac地址通信,而RS上也存在同样的vip,所以要拒绝掉rs上vip的arg广播回应(设置文件arp_ignore的内容为1)

1的意思是如果发来的广播包里面目标地址不是我的“进口地址”-->也就是“eth0”(对应的是非进口地址本地回环接口lo),那我就不回应这个arp广播。

2. 当dr的vip收到这个广播之后,回应mac地址,然后得到客户端发来的80端口请求,再通过lvs分发到一个rs

3. 那么dr如何分发到一个rs?
    dip发出arp广播询问rs的ip地址所对应的mac地址,然后发出一个目标ip为rs_vip,目标mac为rs_eth0_mac的包到rs(VIP+SIP的mac地址)

4. 这个rs必须要使用lo设置的vip把回应包发出去(这样client收到之后一看源地址是vip,他就会相信这是正确的地址发来的包)

5. 那么怎样让rs使用lo的vip而不使用eht0的sip?
   设置arp_announce文件的内容为2, 2的意思是使用本机最好的本地IP地址把回应包发出去
 

6. 最后怎么算是最好的本地IP地址?
       同一个网段下,使用可变长度子网掩码最长的IP地址被认为是好IP,因为他更精确

7. arp_announce :定义不同级别:当ARP请求通过某个端口进来是否利用这个接口来回应。 
    0:利用本地的任何地址,不管配置在哪个接口上去响应ARP请求; 
    1:避免使用另外一个接口上的mac地址去响应ARP请求; 
    2: 尽可能使用能够匹配到ARP请求的最佳地址。

    arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应; 
    0 :利用本地的任何地址,不管配置在哪个接口上去响应ARP请求; 
    1 :哪个接口上接受ARP请求,就从哪个端口上回应

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: