lvs和keepalived的结合配置

一、lvs介绍

        lvs是一款负载均衡服务器软件,它可以将客户端的请求根据分发服务器(directory,以下简称dir)的算法,分配到后端真实的资源服务器。资源服务器收到请求后通过不同的模式机制再返回到客户端。这里我们需要了解lvs的三种实现模式和八种调度算法。

      lvs和keepalived的结合配置_第1张图片

   上面这个图就是公司架构的一部分,有lvs的负载均衡、nginx/apache服务、mysql等后端服务、cacti\nagio监控服务等,这样组成了一个客户访问架构。绿色的线就是用户访问请求的数据流向。用户-->LVS负载均衡服务器--->apahce服务器--->mysql服务器&memcache服务器&共享存储服务器。并且我们的mysql、共享存储也能够使用LVS再进行负载均衡。

LVS更深层理解:  lvs原理:http://www.it165.net/admin/html/201401/2248.html

                             lvs的模式:http://blog.csdn.net/pi9nc/article/details/23380589

常用的负载均衡软件很多,lvs只是一种,常见的还有nginx、hadproxy等。硬件设备也有很多,如F5,netscale

负载均衡软件对比、HA高可用集群软件对比:http://zhengdl126.iteye.com/blog/1738012


二、keepalived简介

      keepalived即可以用做HA集群功能,同时又有负载均衡的功能。比如我们使用的后端的真实服务器(realserver,以下简称rs)宕机后,如果没有keepalived支持,那么dir服务器仍然会根据算法将客户的请求发送到这台宕机的rs上,那么返回给客户端的就是不能访问资源。当使用keepalived支持的时候,它不但可以监测rs的状态(即监测rs不正常工作后,会将客户请求不在发往这个rs),还可以监测dir的状态(监测分发服务器状态,可以将dir服务器分成主从高可用,监测到主挂后可以有从dir分发),保证dir服务器不间断向后端rs服务器发送请求,rs服务器也会不间断向用户响应,持续高效的工作。

     常用的HA集群的软件还有heartbeat等。keepalived配置文件简单,只有一个配置文件,不像heartbeat有三个配置文件需要配置三个地方。

     这里我们说的是lvs和keepalived的结合使用。


三、lvs和keepalived安装配置

     由于要做HA集群,还要做LB集群,HA要搭建主从需要2台服务器,LB集群rs服务器也至少需要2台.由于我是在虚拟机上操作的,资源不够用,所以只准备了三台服务器。

第一台服务器用作主dir服务器,用于主分发。(eth0:192.168.2.234)

第二台服务器用作从dir服务器和其中一台rs1服务器,用于从分发并提供访问资源. (eth1:192.168.2.223)

第三台服务器用于rs2服务器,用于提供访问资源.(eth0:192.168.2.222)

另外还需要一个VIP:设置在dir上,192.168.2.19

我们只是为了显示效果可以实现

1.安装HA集群

(1)在第一台主dir服务器上安装keepalived

         yum install -y keepalived   (需要提前安装epel)

(2)配置

        vim /etc/keepalived/keepalived.conf

      

vrrp_instance VI_1 {
    state MASTER              #配置主,若是从改成BACKUP
    interface eth0            #注意网卡,须是本机的网卡
    virtual_router_id 51      #id号
    priority 100              #优先级,100最高,若是从改成100以下
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.19        #VIP,即对外的IP,用户访问的IP。可以添加多个VIP
    }
}
                              #下面是配置VIP对应的真实服务器,也可以添加多个VIP配置
virtual_server 192.168.2.19 80 {
    delay_loop 6              #每隔多少秒keepalived监测rs的状态
    lb_algo rr               #设置分发的算法
    lb_kind DR               #设置分发的模式,这里使用DR模式演示
    persistence_timeout 0     #同一个IP连接访问在多少秒内被分发到同一个rs上,这里改成0,如果是60,那么会在60秒内一直被连接到同一个rs上。
    protocol TCP
                               #真实服务器的配置,注意IP和端口
    real_server 192.168.2.222 80 {
        weight 100            #权重
        TCP_CHECK {
        connect_timeout 10    #10秒无响应超时
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
 }
                              #第二台rs服务器
    real_server 192.168.2.223 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
    }
 }

}

     (3)在第二台从dir安装keepalived

            yum install -y keepalived

          配置将上面的第一台的keepalived.conf文件可以覆盖第二台的文件,然后只需要修改

       vrrp里面的

vrrp_instance VI_1 {
    state BACKUP              #配置主,若是从改成BACKUP
    interface eth1            #注意网卡,须是本机的网卡
    virtual_router_id 51      #id号,不修改
    priority 90           #优先级,100最高,若是从改成100以下

2. 安装LB集群

    因为在keepalived里面的算法设置的是DR模式,所以需要根据DR模式设置。

(1)在第一台主dir上配置DR模式(192.168.2.234)

       开启路由转发: echo 1 > /proc/sys/net/ipv4/ip_forward

 (2)在第二台从dir上配置,也做nginx服务(192.168.2.223)

        1) 开启路由转发: echo 1 > /proc/sys/net/ipv4/ip_forward

        2) 安装nginx : yum install -y nginx

          输入echo "11111111111master" > /usr/share/nginx/html/index.html  做测试区别使用

       3)配置DR模式脚本

           vim /usr/local/sbin/lvs_dr.sh

        加入以下内容:

#!/bin/bash
vip=192.168.2.19              #虚拟IP
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
  

 (3)在第三台配置nginx(192.168.2.222)

          1)   yum install -y nginx

           输入:echo "2222222slave" >/usr/share/nginx/html/index.html     做测试区别使用

         2)配置DR模式脚本

               vim /usr/local/sbin/lvs_dr.sh

   加入以下内容:

#!/bin/bash
vip=192.168.2.19              虚拟IP
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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

  

3. 启动服务

  (1)启动第一台上的服务

           dir主上keepalived:/etc/init.d/keepalived start

           启动路由转发:echo 1 >/proc/sys/net/ipv4/ip_forward

   (2)启动第二台上的服务

           dir从的keepalived : /etc/init.d/keepalived start

           keepalived LB路由转发:echo 1 >/proc/sys/net/ipv4/ip_forward

           启动nginx: /etc/init.d/nginx start

           启动DR脚本:sh /usr/local/sbin/lvs_dr.sh

   (3)启动第三台服务

         启动nginx: /etc/init.d/nginx start

           启动DR脚本:sh /usr/local/sbin/lvs_dr.sh

     (4)检测

             可在第一台主dir上看到

            1)ipvsadm -ln 看到规则

        

[root@zq ~]# 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.2.19:80 rr persistent 60
  -> 192.168.2.222:80             Route   100    0          0         
  -> 192.168.2.223:80             Route   100    0          0    
            2)ip addr看到vip

     

2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:72:c1:f3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.234/24 brd 192.168.2.255 scope global eth0
    inet 192.168.2.19/32 scope global eth0
    inet6 fe80::20c:29ff:fe72:c1f3/64 scope link 
       valid_lft forever preferred_lft forever

四、测试

1.所有服务开启

  (1)在网页访问VIP:192.168.2.19

         正常会输出11111111master,在刷新会显示222222222222slave,再刷新又变成11111111111master

   (2)另开一个虚拟机,使用curl 192.168.2.19也会显示和网页一样的情况

2.停掉第三台的nginx(192.168.2.222)

   /etc/init.d/nginx stop

  可以在第一台主dir上,使用ipvsadm -ln 看到没有了192.168.2.222这个规则了

   (1)在网页访问VIP:192.168.2.19

         正常会一直输出11111111master,不会输出222222slave

   (2)另开一个虚拟机,使用curl 192.168.2.19也会显示和网页一样的情况

3.开启第三台nginx,停掉第一台主dir

  在第三台机器上: /etc/init.d/nginx start

  在第一台dir主上:/etc/init.d/keepalived stop

  可以看到第二台dir从上,启动了eth1的VIP:

[root@master sbin]# ip addr
1: lo:  mtu 65536 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.2.19/32 brd 192.168.2.19 scope global lo:0
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:58:71:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.223/32 scope global eth1
    inet 192.168.2.19/32 scope global eth1
    inet6 fe80::20c:29ff:fe58:7174/64 scope link 
       valid_lft forever preferred_lft forever

   (1)访问网页192.168.2.19会正常输出

   (2)在另外虚拟机上使用curl 也会正常输出

4. 开启停掉的第一台主dir

  /etc/init.d/keepalived

 使用ip addr 会看到它的eth0网卡上又成功加载了192.168.2.19VIP

 从上的eth1网卡的VIP消失了

   

   

你可能感兴趣的:(keepalived,lvs)