设为首页 收藏本站

运维网

查看: 257|回复: 0

[经验分享] lvs(DR)+keepalived做一个小的负载均衡+高可用

[复制链接]

尚未签到

发表于 2017-11-27 09:41:58 | 显示全部楼层 |阅读模式
我用前端两台服务器做一个lvs+keepalived访问到后端的两台nginx服务器,做一个简单的小测试,这里就不用ipvsadm,直接在keepalived里面配置lvs;首先简单介绍一下lvs-DR模式的工作情况吧,客户端访问到lvs,lvs会根据后端的负载情况,更改目标mac,然后直接发给一台后端服务器,后端服务器接到后会根据本地的route表将包发出去,直接以vip为source发送给客户端,而不经过lvs,所以DR要在本地配置一个vip并将该vip作为广播地址,然后将出口指向这个vip所在接口。
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=.jpg
lvs01: 192.168.40.10
lvs02: 192.168.40.11
nginx01:192.168.40.12
nginx02:192.168.40.13
vip: 192.168.40.100

首先所有的服务器都开启路由转发功能:

[iyunv@lvs01 ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1

把前端两台安装keepalived。

[iyunv@lvs01 ~]# yum install -y keepalived
[iyunv@lvs02 ~]# yum install -y keepalived

后端的两台nginx服务器做一个简单的处理,就把nginx服务开起来,确保网页能被访问到。
接下来直接配置keepalived文件。
1、备份keepalived配置文件:

[iyunv@lvs01 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[iyunv@lvs02 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

2、修改keepalived配置文件:

[iyunv@lvs01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     sysadmin@firewall.loc
   }
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.40.100
    }
}

virtual_server 192.168.40.100 80 {
    delay_loop 3
    lb_algo rr                  ##使用rr算法
    lb_kind DR               ##使用DR模式
    protocol TCP

    real_server 192.168.40.12 80 {
            weight 1
        HTTP_GET {                  ##设置后端服务器的健康检查
            url {
              path /
          status_code 200            ##检查返回值  
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
    real_server 192.168.40.13 80 {
            weight 1
        HTTP_GET {
            url {
              path /
          status_code 200
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

这里要注意的就是健康检查的方式,有多种检查方式,其中我用的是检查网页返回状态码,相应的健康检查要对应检查的内容,否则会容易出错。
3、做好配置文件后将它scp到另一台lvs,也就是备份,然后要把备份的配置文件内容改一下:

state BACKUP             ##状态设置为backup
    interface ens33
    virtual_router_id 51
    priority 90                ##优先等级比master低

4、启动keepalived,查看vip。

[iyunv@lvs01 ~]# ip addr sh ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:49:e5:44 brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.10/24 brd 192.168.40.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.40.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe49:e544/64 scope link
       valid_lft forever preferred_lft forever

现在第一台lvs也就是master拥有了vip。
5、把后端的两台web服务器配置一下,可以直接写一个快速配置的脚本:

[iyunv@nginx02 ~]# cat 2.sh
#!/bin/bash
Vip1=192.168.40.100
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "config vip route arp" > /tmp/lvs1.txt
        /sbin/ifconfig lo:0 $Vip1 broadcast $Vip1 netmask 255.255.255.255 up

        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
       route add -host $Vip1 dev lo:0
;;
stop)
        echo "deletevip route arp" > /tmp/lvs2.txt
       /sbin/ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
       route del -host $Vip1 dev lo:0

;;
*)
        echo"Usage: $0 (start | stop)"
exit 1
esac

两台后端服务器运行这个脚本:
[iyunv@nginx02 ~]# bash 2.sh start
这里执行start会给本地lo添加一个vip,将禁止arp广播回应,添加一个路由出口指向lo口。

[iyunv@nginx02 ~]# ip addr sh lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.40.100/32 brd 192.168.40.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
[iyunv@nginx02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.40.2    0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens37
192.168.40.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.40.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo

然后直接开另一台访问一下:

[iyunv@centos ~]# curl http://192.168.40.100
nginx01
[iyunv@centos ~]# curl http://192.168.40.100
nginx02
[iyunv@centos ~]# curl http://192.168.40.100
nginx01
[iyunv@centos ~]# curl http://192.168.40.100
nginx02

6、如果停止主的keepalived,那么vip会飘到备份上面。

[iyunv@lvs01 ~]# systemctl stop keepalived

[iyunv@lvs02 ~]# ip addr sh ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:38:e6:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.11/24 brd 192.168.40.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.40.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe38:e64e/64 scope link
       valid_lft forever preferred_lft forever

这时候我将主的服务再次开启那么他会抢占vip,这样可能会导致数据的丢失:

[iyunv@lvs01 ~]# systemctl start keepalived
[iyunv@lvs01 ~]# ip addr sh ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:49:e5:44 brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.10/24 brd 192.168.40.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.40.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe49:e544/64 scope link
       valid_lft forever preferred_lft foreve

7、设置不抢占模式:

vrrp_instance VI_1 {
    state BACKUP              ##设置两台keepalived都为backup或者是master
    nopreempt                     ##只需要在主备的配置文件都添加,就不会抢占资源。
    interface ens33
    virtual_router_id 51
    priority 100

然后重启keepalived。这样就可以了。


运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

关注运维网官方微信X

关注运维网官方微信

扫描二维码关注运维网官方微信,最新一手资源尽在官方微信!快快关注我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


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


独家合作伙伴: 青云cloud

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