首页 > 代码库 > LVS结合keepalived配置

LVS结合keepalived配置

ps:

上一节DR模式实验,可以实现两个机器负载均衡,但是有一个问题我们没有考虑过,假如其中一台机器宕掉之后,

比方把rs1的nginx停掉

[root@rs1 ~]# /etc/init.d/nginx stop

停止 nginx:                                               [确定]

[root@rs1 ~]# curl localhost

curl: (7) couldn‘t connect to host 

解释说明:

这样访问就不正常了

测试查看

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

curl: (7) couldn‘t connect to host

[root@localhost ~]# curl 192.168.10.110

222222

解释说明:

也出现这样的问题,3次不能访问,1次能访问,那这样的话,会把四分之三的请求产生这个坏点,也就是说4个人里面,有3个是不能访问的,所以说这种情况不是我们想要的结果,为了避免这种情况,我们就应该想到在lvs这一端能够有一个机制去检测,帮我们去检测当一个rs宕掉之后呢,它会把这个请求不再转发到这个坏掉的rs上去,我们直接把请求转发到好的rs上就行了,这样就会避免访问不到的情况。LVS本身没有这个功能,所以我们需要去借助一个第三方软件keepalived(它说白了是及负载均衡+HA高可用为一体)。

做这个实验呢需要四台机器,也就是说keepalived需要两台(一主一从),就像之前讲的heartbeat一样,一个提供服务,它是在线状态,另一个是备用,不提供服务,既然是做实验,为了节省资源,就用三台机器,那其中一个rs,比如说rs2,就把它当keepalived的备用机器也是可以的。

keepalived 用途

帮助LVS检测后端Real Server的存活,如果正常则将请求分发给RS;如果RS宕掉的话,就不会把这个请求发给RS,这样更加科学,这样不会产生一部分客户端的请求访问不到。

配置

1、 首先检查是否安装ipvsadm与keepalived

[root@dr ~]# rpm -qa ipvsadm keepalived

 

2、 清除DR模式实验脚本启动的VIP

[root@r1 ~]# ifconfig lo:0 down

[root@r2 ~]# ifconfig lo:0 down

[root@dr ~]# ifconfig eth0:0 down

 

3、 把之前的规则清空

[root@dr ~]# ipvsadm -C

 

4、 安装keepalived,如果之前安装过pel扩展源则可以直接安装

[root@dr ~]# yum install -y keepalived

 

[root@rs2 ~]# yum install -y ipvsadm

[root@rs2 ~]# yum install -y keepalived

5、 安装后编辑配置文件(先清空配置文件)

[root@dr ~]# > /etc/keepalived/keepalived.conf

[root@dr ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.10.110

    }

}

virtual_server 192.168.10.110 80 {       

    delay_loop 6

    lb_algo rr

    lb_kind DR

    persistence_timeout 0

    protocol TCP

 

    real_server 192.168.10.13 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.10.14 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

     }

}

解释说明:

vrrp_instance 全局配置

virtual_server 虚拟机,其实就是DS

real_server 包含与DR中

state 用于配置主MASTER/从BACKUP

priority 这里配置注册优先级,主的数值高从的数值低即可

authentication 验证,类似于HA的心跳线

virtual_ipaddress 配置vip

 

delay_loop 间隔多少秒钟检测一次RS状态

lb_algo 设置lvs算法

lb_kind 设置lvs的工作模式

persistence_timeout 保持长连接的时间(同一IP的连接设置秒内被分配到同一台RS)

protocol 使用什么协议RS状态

 

weight 权重

connect_timeout 设置时间内没有响应超时,单位为秒

6、 拷贝到从上

[root@dr ~]# scp /etc/keepalived/keepalived.conf 192.168.10.14:/etc/keepalived/keepalived.conf

 

7、 从上编辑配置文件

技术分享

8、主上启动

[root@dr ~]# /etc/init.d/keepalived start

 

9、 启动keepalived后通过addr命令查看vip是否启动

[root@dr ~]# ip addr

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:d5:eb:5e brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.12/24 brd 192.168.10.255 scope global eth0

    inet 192.168.10.110/32 scope global eth0

    inet6 fe80::20c:29ff:fed5:eb5e/64 scope link

       valid_lft forever preferred_lft forever

 

10、从上启动

[root@rs2 ~]# /etc/init.d/keepalived start

11、主上查看规则

[root@dr ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.110:80 rr

  -> 192.168.10.13:80             Route   100    0          0         

  -> 192.168.10.14:80             Route   100    0          0         

 

12、测试之前再执行一下两个rs上执行下脚本

[root@rs1 ~]# sh /usr/local/sbin/lvs_dr_rs.sh

[root@rs2 ~]# sh /usr/local/sbin/lvs_dr_rs.sh

解释说明:

      测试后没反应,所以就再执行了一下rs上的脚本

13、 测试

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

14、那这时我们停掉一台机器(看是不是会自动地把它剔除掉)

[root@rs1 ~]# /etc/init.d/nginx stop

15、 测试

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

222222

解释说明:

这时会一直讲求rs2上

16、 查看到那条规则也会去掉

[root@dr ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.110:80 rr

  -> 192.168.10.14:80             Route   100    0          12  

 

17、 再把rs1启动了

[root@rs1 ~]# /etc/init.d/nginx start

18、 再查看规则就有了

[root@dr ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.110:80 rr

  -> 192.168.10.13:80             Route   100    0          0         

  -> 192.168.10.14:80             Route   100    0          0  

 

19、 把主keepalived停掉

[root@dr ~]# /etc/init.d/keepalived stop

20、 查看从keepalived

[root@rs2 ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet 192.168.10.110/32 brd 192.168.10.110 scope global lo:0

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:e5:49:34 brd ff:ff:ff:ff:ff:ff

    inet 192.168.10.14/24 brd 192.168.10.255 scope global eth0

    inet 192.168.10.110/32 scope global eth0

    inet6 fe80::20c:29ff:fee5:4934/64 scope link

21、 查看从上规则

[root@rs2 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.110:80 rr

  -> 192.168.10.13:80             Route   100    0          1         

  -> 192.168.10.14:80             Local   100    0          1   

22、 测试

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

23、 再把主启动

[root@dr ~]# /etc/init.d/keepalived start

 

24、 测试

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

11111111

[root@localhost ~]# curl 192.168.10.110

222222


本文出自 “linux” 博客,转载请与作者联系!

LVS结合keepalived配置