码迷,mamicode.com
首页 > 其他好文 > 详细

LVS+Keepalived实现高可用集群

时间:2016-07-29 19:14:23      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:配置文件   数据库   master   操作系统   拓扑图   

Keepalived + LVS

LVS+Keepalived实现高可用集群   

1.操作环境

操作系统平台:CentOS6.5    

软件:keepalived-1.2.12.tar.gz 

      Ipvsadm使用yum自带的安装

 

2.原理技术

LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件即可。Keepalived在这里主要用作RealServer的健康状态检查以及master主机和backup主机之间failover(故障转移)的实现

  单点故障:在公司整个业务流程中,某一点出现故障就会导致整个系统架构不可用,单点故障常发生在数据库、核心业务系统等。对此我们的解决办法是对核心业务系统进行高可用负载均衡。

 

3.架构图:

技术分享


拓扑图介绍
  keepalived--master和keepalived--backup两者之间通过vrrp协议利用虚拟IP进行通信,master主机对外接受请求并将请求转发至后方的realserver,backup主机只接受请求而不转发请求。某时刻当backup主机没有接受到master主机发送的信息时,于是发送vrrp通告信息并广播arp信息,宣称自己是master,如果收到其他主机发送的通告信息的优先级比自己的高,那么自己将继续转为backup,优先级别高的机器,此时就是新master主机,并接替原master主机的工作。

每个keepalived机器都对后方的realserver进行监控,只不过master负责将外部请求转发至后方的realserver,backup则不作该处理。

 

4.软件的安装

软件的下载

#wget http://www.keepalived.org/software/keepalived-1.2.12.tar.g


1>、keepalived的安装配置

# tar xf keepalived-1.2.12.tar.gz

# cd keepalived-1.2.12

# ./configure --sysconf=/etc--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64

# make && make install

# ln -s /usr/local/sbin/keepalived /sbin/

# chkconfig --add keepalived

# chkconfig --level 2345 keepalived on


 注: --sysconf   指定Keepalived配置文件的安装路径。即路径为 
         /etc/keepalived/keepalived.conf
    --with-kernel-dir  指定使用源码中的头文件,即include目录。只有在使用LVS时,才使用到 --with-kernel-dir 参数,其他时候是不需要的。


2>、配置文件的更改

# vim keepalived.conf

 

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {   #定义一个vrrp组,组名唯一  
    state MASTER    #定义改主机为keepalived的master主机
    interface eth0      #监控eth0号端口  
    virtual_router_id 58  #虚拟路由id号为58,id号唯一,这个id决定了多播的MAC地址
    priority 150         #设置本节点的优先级,master的优先级 要比backup的优先级别高,数值要大
    advert_int 1         #检查间隔,默认为1秒
    authentication {
        auth_type PASS    #认证方式,密码认证
        auth_pass 1111    #认证的密码,这个密码必须和backup上的一致
    }
    virtual_ipaddress {    #设置虚拟的ip, 这个ip是以后对外提供服务的ip。
        192.168.2.100
    }
}

virtual_server 192.168.2.100 80 {   #虚拟主机设置,ip同上。
    delay_loop 2          #服务器轮询的时间间隔
    lb_algo rr           #lvs的调度算法
    lb_kind DR            #lvs的集群模式
    nat_mask 255.255.255.0
    persistence_timeout 50      #会话超时50s
    protocol TCP           #健康检查是用tcp还是udp

    real_server 10.68.2.200 80 {    #后端真实主机1
        weight 100                #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {         #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }

    real_server 10.68.2.201 80 {       #后端真实主机2
        weight 100        #每台机器的权重,0表示不给该机器转发请求,知道它恢复正常。
        TCP_CHECK {       #健康检查项目,以下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }
}

 

backup主机的配置基本同上,只有以下地方需要修改。
state BACKUP  #定义改主机为keepalived的backup主机,监控主master
priority 100  #设置本节点的优先级,数值要比master主机上的小      

 

3>、master和backup安装ipvsadm软件

# yum -y install ipvsadm

 

 

5.测试keepalived的故障漂移

首先,在192.168.2.10和192.168.2.11上同时启动keepalived,此时观察master主机和backup主机   

 # service keepalived restart

2.10

技术分享

2.11

技术分享

 

可以看出虚拟ip此时绑定在2.10--master上,然后停止2.10上keepalived服务

# service keepalived stop

2.10

技术分享

2.11

技术分享

 

通过查看2.11上的日志,可以看到2.11已经宣告自己是master了。并且虚拟ip也漂移到新的mater机器上。

# tail -fn 100 /var/log/messages

技术分享

 以上的配置,keepalived的高可用功能已经实现。

 

 

6.realserver服务器配置

本例中,我在2.200和2.201上,分别安装了httpd,模拟两台web服务器。然后要在两台服务器上配置虚拟vip,使用以下脚本。

# service httpd restart

添加测试页面:

# cd /var/www/html/

[root@ser html]# ls

[root@ser html]# echo WEB1111 > index.html

 

# cd /var/www/html/

[root@ser2 html]# ls

[root@ser2 html]# echo WEB2222 > index.html

 

 

# vim realserver.sh

#!/bin/bash

#description: config realserver lo  and apply noarp

 

WEB_VIP=192.168.2.100  #虚拟vip,也就是虚拟ip

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

 

case "$1" in

 

start)

   ifconfiglo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP

  /sbin/route add -host $WEB_VIP dev 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

   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/default/arp_ignore

   echo"2" > /proc/sys/net/ipv4/conf/default/arp_announce

   sysctl -p>/dev/null 2>&1

   echo"RealServer Start OK"

   ;;

stop)

   ifconfiglo:0 down

   route del$WEB_VIP >/dev/null 2>&1

   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

   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/default/arp_ignore

   echo"0" > /proc/sys/net/ipv4/conf/default/arp_announce

   echo"RealServer Stoped"

   ;;

status)

       #Status of LVS-DR real server.

      islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`

      isrothere=`netstat -rn | grep "lo:0" | grep $WEB_VIP`

       if [ !"$islothere" -o ! "isrothere" ];then

         #Either the route or the lo:0 device

         #not found.

         echo"LVS-DR real server Stopped."

       else

         echo"LVS-DR Running."

       fi

;;

*)

       #Invalid entry.

       echo"$0: Usage: $0 {start|status|stop}"

       exit 1

;;

esac

exit 0

 

 # chmod +x realserver.sh


   将此脚本分别在2.200和2.201上执行下。此时,我们在两台keepalived的主机上可以查看到如下相同信息。

# ./realserver.sh start

RealServer Start OK

 

# scp  root@192.168.2.200:/root/Desktop/realserver.sh .


查看信息:

   技术分享

 

7.测试

   此时,通过网页访问102.168.2.100,时,根据ipvsadm查询到的realserver主机的顺序,可以看出此时优先访问2.200

   技术分享

      而当我们将2.200这台机器的httpd的服务停掉,首先可以看到两台keepalived主机都会将2.200这台机器剔除,此时我们再次查询时ipvsadm,只可以看到一台web服务器,再次页面访问,这时就是在访问2.2018这台机器了。

# tail -fn 100 /var/log/messages

   技术分享

   技术分享

   技术分享

 

启动2.200机器后,keepalived又会自动将改服务器添加进来。

# tail -fn 100 /var/log/messages

技术分享

 

从上面的测试可知,lvs的负载均衡功能已经实现

 

遇到的问题:

    技术分享

问题原因:

      keepalived.conf配置文件real_server的IP地址有问题。

 

 

 

 


本文出自 “愿与您分享” 博客,请务必保留此出处http://9265463.blog.51cto.com/9255463/1831850

LVS+Keepalived实现高可用集群

标签:配置文件   数据库   master   操作系统   拓扑图   

原文地址:http://9265463.blog.51cto.com/9255463/1831850

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!