LVS/DR

VS/DR模式拓扑:

                              ++++++++++++++++   
         +----------->  +	     Client         +
         |                   ++++++++++++   down eth1 1.1.1.250/24
         |                                  |
                                        router
         |                                  |
         |                   ++++++++++++   VIP eth0:1  1.1.1.1/24
         |                   +      Director         +
         |                   ++++++++++++   DIP eth0     1.1.1.100/24
         |                                  |
         +___________________ | __________________
                    |                                                        | 
                    |                                                        |
       ++++++++++++++++                  ++++++++++++++++
       +  Real Server A   +                 +  Real Server B    +
       ++++++++++++++++                  ++++++++++++++++
        eth0 1.1.1.10/24                      eth0 1.1.1.20/24
        lo  1.1.1.1/32                          lo 1.1.1.1/32
  1. 客户端要找vip访问80端口,因为是在同一个网段,所以发arp广播找vip的mac地址通信
  2. 因为有rs上也有vip,我们不能直接让rs上的vip回应客户端的广播,所以设置文件arp_ignore的内容为1
    1的意思是如果发来的广播包里面目标地址不是我的“进口地址”–>也就是“eth0”(对应的是非进口地址本地回环接口lo),那我就不回应这个arp广播)。
  3. 当dr的vip收到这个广播之后,回应mac地址,然后得到客户端发来的80端口请求,再通过lvs分发到一个rs
  4. 那么dr如何分发到一个rs?
    dip发出arp广播询问rs的ip地址所对应的mac地址,然后发出一个目标ip为rs_vip,目标mac为rs_eth0_mac的包到rs
  5. 这个rs必须要使用他lo设置的vip把回应包发出去(这样client收到之后一看源地址是vip,他就会相信这是正确的地址发来的包)
  6. 那么怎样让rs使用lo的vip而不使用eth0?
    设置arp_announce文件的内容为2, 2的意思是使用本机最好的本地IP地址把回应包发出去
  7. 最后怎么算是最好的本地IP地址?
    同一个网段下,使用可变长度子网掩码最长的IP地址被认为是好IP,因为他更精确

VS/DR模式数据包走向:
1.Client-------------------------->Director
sip: CIP dip: VIP
smac: Client_mac dmac: VIP_mac

2.Director---------------------->Real Server


  • Director在给Real Server发包前要广播找Real Server mac *
  • sip: DIP dip: RIP *
  • smac: DIP_mac dmac: broadcast *
  •   												                              *	
    
  • sip: RIP dip: DIP *
  • smac: RealServer_mac dmac: DIP_mac *

sip: CIP dip: VIP
smac: DIP_mac dmac: RealServer_mac

3.Real Server------------------>Client
sip: VIP dip: CIP //这里的VIP是realserver的lo额外添加的那个VIP地址
smac: RealServer_mac dmac: Client_mac

=VS/DR模式配置========
Client:
[root@localhost ~]# route add default gw 1.1.1.1 dev eth0

Real Server A & Real Server B:
[root@localhost ~]# yum install httpd
[root@localhost ~]# ifconfig lo:0 1.1.1.1/32
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore eth0可以换成all
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

Director: route -n 上面的一条路由做dip 下面一条做vip
[root@localhost ~]# yum install ipvsadm
[root@localhost ~]# ipvsadm -A -t 1.1.1.1:80 -s rr
[root@localhost ~]# ipvsadm -a -t 1.1.1.1:80 -r 1.1.1.10:80 -g
[root@localhost ~]# ipvsadm -a -t 1.1.1.1:80 -r 1.1.1.20:80 -g

保存:
# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
清空:
# ipvsadm -C
查看
# ipvsadm -Ln
# ipvsadm -Ln --stats
# ipvsadm -Ln --rate
实时查看:
# watch -n.5 ‘ipvsadm -Ln -c’
-n.5 是0.5秒刷新一次
-n 5 5秒刷新一次
要解决三个问题:
1 .两个http服务器除了有自己的rip以外还要拥有vip
因为:数据包需从realServer返回 ,realServer返回的数据需要源IP为VIP
解决:添加 lo接口(本地环路接口) ,lo:1 vip/32.

2 .当GW向下广播vip的时候 要分发器的vip响应 而两个http的vip不要响应
因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的

3 .当分发器向下找两个http服务器时,必须从dip发包
因为:Director 发送数据包给realServer , 要走dip的网卡,否则ip流向就是vip–>vip 发送不成功.
解决:调整vip和dip网卡在路由表中的顺序,dip在上,vip在下即可解决。

假如:192.168.1.1 是vip ,网卡eth0
         192.168.1.2 是dip,网卡eth1
        在添加这两个ip的时候,路由表会出现如下条目:
        192.168.1.0  0.0.0.0  255.255.255.0  u   0    0   0   eth0
        192.168.1.0  0.0.0.0  255.255.255.0  u   0    0   0   eth1
        这样的路由顺序会由eth0也就是vip发包,是不行的
        解决:直接删除eth0所在的网络
        #ip route del 192.168.1.0/24 dev eth0

==========================================
注:LO接口本身的作用:
假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的’lo’接口,然后返回进入链的’lo’接口.
另一个人版本实验:

VS/DR
实验说明:

  1. 网络使用桥椄模式
  2. 调度器、Real Server都使用虚拟机或使用真实服务器
  3. DR模式要求所有节点必须在同一个网段及广播域
  4. 所有节点网关均指定真实网关

网络拓朴:
Director: DIP:30.30.30.2
VIP:30.30.30.100

Real Server: 30.30.30.10 30.30.30.20 30.30.30.30

DNS Server: www.tianyun.com ===> 30.30.30.100

一、VS/DR实施

  1. 准备工作(集群中所有主机)
    IP, hostname, hosts, iptables, SELinux, ssh trust, ntp
    #cat /etc/hosts
    127.0.0.1 localhost
    30.30.30.2 director1.tianyun.com director1
    30.30.30.10 node1.tianyun.com node1
    30.30.30.20 node2.tianyun.com node2
    30.30.30.30 node3.tianyun.com node3

  2. RS配置
    配置好网站服务器,测试所有RS //为了测试效果,提供不同的页面
    #ip addr add dev lo 30.30.30.100/32 //在lo接口上绑定VIP
    #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore //non-arp
    #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

  3. Director分发器配置
    配置VIP
    [root@tianyun ~]# ip addr add dev eth0 30.30.30.100/32 //配置VIP
    [root@tianyun ~]# yum -y install ipvsadm //确保LoadBalancer仓库可用

定义LVS的分发策略
#ipvsadm -C
#ipvsadm -A -t 30.30.30.100:80 -s rr
#ipvsadm -a -t 30.30.30.100:80 -r 30.30.30.10 -g //gatewaying (direct routing)
#ipvsadm -a -t 30.30.30.100:80 -r 30.30.30.20 -g
#ipvsadm -a -t 30.30.30.100:80 -r 30.30.30.30 -g
#service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 30.30.30.100:80 rr
-> 30.30.30.10:80 Route 1 0 0
-> 30.30.30.20:80 Route 1 0 0
-> 30.30.30.30:80 Route 1 0 0

#ipvsadm -L -n
#ipvsadm -L -n --stats
#ipvsadm -L -n --rate
#ipvsadm -Ln -c
#watch -n.5 ‘ipvsadm -Ln -c’

  1. 测试
    [root@client ~]# elinks -dump http://192.168.2.220/
    [root@client ~]# ab -c 1000 -n 1000 http://192.168.2.220/

  2. 小结
    VS/DR模式的原理是: 当一个client发送一个请求到VIP,Director根据VIP选择对应的real-server的Pool,
    根据算法,在Pool中选择一台Real-server,然后将client的请求包发给选择的Real-server,最后选择的Real-server
    把应答包直接传给client
    =================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值