设为首页 收藏本站
查看: 673|回复: 0

[经验分享] LVS_DR 实验

[复制链接]

尚未签到

发表于 2019-1-2 13:37:58 | 显示全部楼层 |阅读模式
实验拓扑


IP分配
client      192.168.30.1
Router     e0/0       10.0.0.123
           e0/1       192.168.30.200 (网关)

Director    eth0:    192.168.30.105
           eth0:1    192.168.30.254 (VIP)

Real 1      lo:1      192.168.30.254 (VIP)
           eth0      192.168.30.113

Real 2      lo:1      192.168.30.254 (VIP)
           eth0      192.168.30.114



注意:由于是用DR方式做负载均衡的,所以Real server 都要配置vip,并且指向路由器e0/1作为网关


一、路由器配置
路由器配置比较简单,只需要配置两个接口地址即可。
Router>en
Router#conf t
Router(config)#int e0/1
Router(config-if)#ip addr 10.0.0.123 255.255.255.0
Router(config-if)#no shutdown
Router(config)#int e0/0
Router(config-if)#ip address 192.168.30.200 255.255.255.0
Router(config-if)#no shutdown



二、配置Real 服务器
1、主页服务
由于前面的实验中已经配置好,这里就不再重复


2、配置VIP 地址
这里以第一台Real server 为例:
配置RIP
[root@node1 ~]# ifconfig eth0 192.168.30.113/24
配置VIP
[root@node1 ~]# ifconfig lo:1 192.168.30.254 netmask 255.255.255.255 broadcast 192.168.30.254



3、配置网关
[root@node1 ~]# route add -host 192.168.30.254 dev lo:1
[root@node1 ~]# route add default gw 192.168.30.200
[root@node2 ~]# route add -host 192.168.30.254 dev lo:1
[root@node2 ~]# route add default gw 192.168.30.200


[root@node1 ~]# route
Kernel IP routing table
Destination      Gateway        Genmask     Flags Metric Ref  Use Iface
192.168.30.254      *          255.255.255.255  UH   0    0    0 lo
192.168.30.0        *          255.255.255.0    U    0    0    0 eth0
link-local          *            255.255.0.0     U   1002  0    0 eth0
default       192.168.30.200       0.0.0.0       UG   0    0    0 eth0


三、配置Director 服务器
1、配置IP
[root@server ~]# ifconfig eth0 192.168.30.105/24
[root@server ~]# ifconfig eth0:1 192.168.30.254 netmask 255.255.255.255 broadcast 192.168.30.254



2、配置网关
[root@server ~]# route add default gw 192.168.30.200
[root@server ~]# route add -host 192.168.30.254 dev eth0:1


[root@server ~]# route
Kernel IP routing table
Destination   Gateway           Genmask       Flags Metric Ref  Use Iface
192.168.30.254   *            255.255.255.255     UH  0   0    0 eth0
192.168.30.0     *            255.255.255.0        U   0   0    0 eth0
link-local       *            255.255.0.0          U   1002  0    0 eth0
default     192.168.30.200       0.0.0.0           UG  0   0    0 eth0



3、配置lvs
[root@server ~]# ipvsadm -A -t 192.168.30.254:80 -s rr
[root@server ~]# ipvsadm -a -t 192.168.30.254:80 -r 192.168.30.113 -g
[root@server ~]# ipvsadm -a -t 192.168.30.254:80 -r 192.168.30.114 -g



4、设置不允许ARP包发送
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


[root@node1 ~]#sysctl -p


[root@node2 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@node2 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

[root@node2 ~]#sysctl -p
// arp_ignore=1  系统只回答目的IP 为本地IP 的包(也就是对广播包不做响应)
// arp_announce=2  系统忽略IP 包的源地址,而根据目标主机,选择本地地址


arp_ignore : INTEGER  定义对目标地址为本地IP的ARP询问不同的应答模式,默认为0
0 : 回应任何网络接口上对任何本地IP地址的arp 查询请求
比如eth0=192.168.0.1/24,eth1=10.1.1.1/24 那么即使eth0 收到来自10.1.1.2 这样地址发起的对10.1.1.1 的arp查询也会回应,而原本这个请求该是出现在eth1上,也该由eth1 回应的。


1: 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1 收到来自10.1.1.2 这样地址发起的对192.168.0.1的查询不会回答,而对192.168.0.2 发起的对192.168.0.1 的ARP 查询会回应。


2 : 不回应该网络接口的ARP请求,而只对设置的唯一和连接地址做出回应


注意:
如果是通过路由器连接的,那么对于每个Real Server 服务器改变后,客户端的浏览器里可能还会只显示其中一台Real 服务器的主页,原因是router 还保存着旧的ARP对应关系,所以要清除一下router 的缓存,执行如下命令:
Router# clear arp-cache


经过客户端几次访问后,在router上便看不到同一个MAC即对应Director 又对应Real Server




[root@server ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port      Forward Weight ActiveConn InActConn
TCP 192.168.30.254:80 rr
-> 192.168.30.113:80         Route      1       0     22
-> 192.168.30.114:80         Route      1       1     22  





Real Server 还有Director 的配置也可以写成shell脚本
===========Director=========
#!/bin/bash
# description: start LVS of Director Server
GW=192.168.30.1
# website director vip
VIP=192.168.30.254
DIP=192.168.30.105
RIP1=192.168.30.111
RIP2=192.168.30.112
RIP3=192.168.30.113
RIP4=192.168.30.114


/etc/rc.d/init.d/functions


logger $0 called with $1


case "$1" in
    start)
        /sbin/ipvsadm --set 30 5 60
        /sbin/ip addr add dev eth1 $DIP
        /sbin/ip link set dev eth1 up
        /sbin/ip addr add dev eth0 $VIP brd $VIP
        /sbin/ip link set dev eth0 up
        /sbin/ip route add default via $GW


        /sbin/ipvsadm -A -t $VIP:80 -S wrr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g -w 2
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP4:80 -g -w 2


        touch /var/locak/subsys/ipvsadm > /dev/null 2>&1
        /sbin/arping -I eth0 -c 5 -s $VIPO $GW > /dev/null 2>&1
        ;;


    stop)
        /sbin/ipvsadm -C
        /sbin/ipvsadm -Z
        /sbin/ip link set dev eth0 down
        /sbin/ip link set dev eth1 down
        rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
        echo "ipvsadm stoped"
        ;;


    status)
        if[ ! -e /var/lock/subsys/ipvsadm ];then
            echo "ipvsadm stoppd"
            exit 1
        /sbin/ip route add default via $GW


        /sbin/ipvsadm -A -t $VIP:80 -S wrr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g -w 2
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP4:80 -g -w 2


        touch /var/locak/subsys/ipvsadm > /dev/null 2>&1
        /sbin/arping -I eth0 -c 5 -s $VIPO $GW > /dev/null 2>&1
        ;;


    stop)
        /sbin/ipvsadm -C
        /sbin/ipvsadm -Z
        /sbin/ip link set dev eth0 down
        /sbin/ip link set dev eth1 down
        rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
        echo "ipvsadm stoped"
        ;;


    status)
        if[ ! -e /var/lock/subsys/ipvsadm ];then
            echo "ipvsadm stoppd"
            exit 1
        else
            echo "ipvsadm ok"
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|stauts}"
        exit 1
    esac
exit 0



===========Real Server=========
#!/bin/bash
# description:Config real server lo and apply noarp
VIP=192.168.30.254


case "$1" in
    start)
        /sbin/ip addr add dev lo $VIP brd $VIP


        echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    stop)
        /sbin/ip link set dev lo down
        echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_announce
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    *)
        echo "Usage:$0 {start|stop}"
        exit 1
esac
exit 0



小结:

  •   配置比较复杂,原理不太好理解
  •   工作环境中用的最多
  •   在DR调试模式下,最好在搭建完Real 上的服务后,就把ARP广播限制住
  •   由于Director本身不处理请求,而是后端Real Server直接处理,并通过路由表直接回应客户端,所以Director本身并不会成为瓶颈

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658689-1-1.html 上篇帖子: 我的lvs方案实现 下篇帖子: LVS的简单应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表