您的位置:首页 > 其它

lvs和keepalived的结合配置

2016-12-14 10:11 375 查看
一、lvs介绍

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

      


   上面这个图就是公司架构的一部分,有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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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消失了

   

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lvs+keepalived