首页 > 代码库 > (heartbeat与KeepAlived)

(heartbeat与KeepAlived)

技术分享

总拓扑图

两种实现方式:

实验一、

LVS+heartbeat+ldirectord实现集群负载:

1.在主Director Server上和备用Director Server上分别安装heartbeatlibnethttpd

[root@LW1 ~]# yum -y install heartbeat libnet httpd heartbeat-ldirectord ipvsadm

2.获得heartbeat的相关默认配置文件:

[root@LW1 ~]# cd /usr/share/doc/heartbeat-2.1.3/

[root@LW1 heartbeat-2.1.3]# cp ha.cf authkeys haresources /etc/ha.d/

[root@LW1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/

3.使用Ldirectord在主、备Director Server上配置LVS

[root@LW1 ~]# vi /etc/ha.d/ldirectord.cf

配置文件说明如下:

全局设置:

# Global Directives

checktimeout=10 #判定Real Server出错的时间间隔

checkinterval=5 #指定Ldirectord在两次检查之间的间隔时间

fallback=127.0.0.1:80 #当所有的Real Server节点不能工作时,Web服务重定向的地址

autoreload=yes #是否自动重载配置文件,选yes时,配置文件发生变化,自动载 入配置信息

logfile="/var/log/ldirectord.log" #设定Ldirectord日志输出文件路径

quiescent=yes #当选择no时,如果一个节点在checktimeout设置的时间周期内没 有响应,ldirectord将会从LVS丢掉所有的连接跟踪记录和持续连 接模版;如果选择yes,当某个Real Server 失效时,Ldirectord 失效节点的权值设置为0,新的连接将不能到达,但是并不会从LVS 路由表中清除此节点,同时,连接跟踪记录和程序连接模版仍然保 留在Director上。

虚拟主机配置:

# Sample for an http virtual service

virtual=10.0.0.31:80 #指定虚拟的IP地址和端口号,注意,在Virtual这行后面的行必 须缩进3个空格或以一个tab字符进行标记

        real=10.0.0.29 gate #指定Real Server服务器地址和端口,同时设定LVS工作模式

        real=10.0.0.30:80 gate

        fallback=127.0.0.1:80 gate #Real Server全部失效后监听的地址及端口

        service=http #指定服务的类型,这里是对HTTP服务进行负载均衡

        request="test.html" #Ldirectord将根据指定的Real Server地址,结合该选项给出的请 求页面,发送访问请求,检查Real Server上的服务是否正常运行, 必须确保这里给出的页面地址是可访问的,不然Ldirectord会误认 为此节点已经失效,发生错误监控现象

        receive="Test Page" #指定请求和应答字串,也就是test.html的内容

        virtualhost=www.liwei.com #虚拟服务器的名称,可任意指定

        scheduler=rr #指定调度算法,这里是rr(轮询)算法

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp #指定协议的类型,LVS支持TCPUDP协议

        checktype=negotiate #指定Ldirectord的检测类型,checktype可以是connnectexternal negotiateoffonpingchecktimeout这几个,默认为negotiate 通过页面交互来判断服务器节点是否正常

        checkport=80 #指定监控的端口号

注:虚拟主机可以设置多个,比如监控Mysql3306端口,邮件SMTP25端口等等

4.配置备用Director ServerLdirectord

[root@LW2 ~]# scp root@10.0.0.27:/etc/ha.d/ldirectord.cf /etc/ha.d/

5.在主、备Director Server上配置heartbeat

(1).配置heartbeat的主配置文件(/etc/ha.d/ha.cf

[root@LW1 ~]# vi /etc/ha.d/ha.cf

配置文件如下:

#debugfile /var/log/ha-debug

logfile /var/log/ha-log #指定heartbeat的日志存放位置

logfacility     local0

bcast   eth1 #指定心跳使用以太网广播方式,并且在eth1接口上进行广播

keepalive 2 #指定心跳间隔时间为2秒(即2秒在eth1上发送一次广播)

deadtime 30 #如果指定的备用节点在30秒内没有收到主节点的心跳信号,则立 即接管主节点的服务资源

warntime 10 #指定心跳延迟的时间为10秒,当10秒内备用机不能收到主节点 的心跳信号时,就会在日志中写入一个警告信息,但此时不会切换 服务

initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能 正常工作,该选项用于设置这种情况产生的时间间隔,取值至少为 deadtime的两倍

udpport 694 #设置广播通信使用的端口,694为默认使用的端口号

 

baud    19200 #设置串行通信的比特率

#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况,如果双机 通过以太网连接,则应该关闭该选项

#mcast eth1 225.0.0.1 694 1 0 #采用网卡eth1UDP多播来组织心跳,一般在备用机不止一台 时使用,bcastucastmcast分别代表广播、单播和多播,是组 织心跳的3种方式,任选其一即可

ucast eth1 192.168.1.111 #采用网卡eth1UDP单播来组织心跳,后面跟的IP地址应为双 机中对方的IP地址

auto_failback on #用来定义当主节点恢复后,是否将服务自动切回。

node    LW1

node    LW2

ping 10.0.0.1 #选择ping的节点,ping节点选择的越好,HA集群就越强壮。可 以选择固定的路由器作为ping节点,但是最好不要选择集群中的 成员作为ping节点,ping节点仅用来测试网络连接

(2).配置heartbeat的资源文件(/etc/ha.d/haresources

Haresource文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源。文件每一行可以包含一个或多个资源脚本名,资源脚本名之间用空格隔开,参数之间使用两个冒号隔开。

[root@LW1 ~]# vi /etc/ha.d/haresources

 

LW1 IPaddr::10.0.0.31/24/eth0:0 httpd #设置LW1为主节点,集群服务器的IP地址为10.0.0.31netmask255.255.255.0,同时指定此IP使用的网络接口为eth0:0heartbeat 托管的服务为httpd(此文件为系统自动检测,自动启动)

(3).配置heartbeart的认证文件(/etc/ha.d/authkeys

Authkeys文件用于设定heartbeat的认证方式,该文件中有3种可用的认证方式:crcsha1md5,以下使用crc认证方式,设置如下:

[root@LW1 ~]# vi /etc/ha.d/authkeys

auth 1

1 crc

#2 sha1 HI!

#3 md5 Hello!

注意:无论“auth”后面指定的是什么数字,在下一行必须作为关键字再次出现,最后确保这个文件的权限是600

6.配置Real Server

LVSDRTUN模式下,用户的访问请求到达Real Server后,是直接返回给用户的,不再经过前端的Director Server,因此,需要在每个Real Server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。增加VIP地址的操作可以通过创建脚本的方式来实现,创建文件/etc/init.d/lvsrs,脚本内容如下:

[root@LW2 ~]# vi /etc/init.d/lvsrs

#!/bin/bash

#description: Start Real Server

VIP=10.0.0.31

VPn./etc/init.d/functions

case "$1" in

        start)

        echo " Start LVS of Real Server "

        /sbin/ifconfig lo:0 $VIP broadcast $VIP 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

        ;;

        stop)

        /sbin/ifconfig lo:0 down

         echo " Close LVS of Real Server "

        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 "Usage: $0 {start|stop}"

exit 1

esac

[root@LW3 ~]# chmod 755 /etc/init.d/lvsrs

[root@LW3 ~]# service lvsrs start

Real Server1上执行相同的操作,可以将此文件直接拷贝到LW4上面,给予其执行权限。

LW1LW2上执行:

[root@LW1 ~]# /etc/init.d/ldirectord start 

[root@LW1 ~]# /etc/init.d/heartbeat start

[root@LW2 ~]# /etc/init.d/ldirectord start 

[root@LW2 ~]# /etc/init.d/heartbeat start

[root@LW3 ~]# echo "Real Server 1" > /var/www/html/index.html

[root@LW4 ~]# echo "Real Server 2" > /var/www/html/index.html

[root@LW3 ~]# echo "Test Page" > /var/www/html/test.html

[root@LW4 ~]# echo "Test Page" > /var/www/html/test.html

7.测试:

在浏览器中输入http://10.0.0.31访问,正常状态应该是Real Server 1 Real Server 2更换。在LW1上执行ifconfig命令后会看到如下选项:

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:DC:79:5D

          inet addr:10.0.0.31  Bcast:10.0.0.31  Mask:255.255.255.255

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

然后查看httpd服务是处于启动状态,/etc/ha.d/haresources此文件会检查eth0:0httpd的状态。

LW1上执行如下操作:

[root@LW1 ~]# /etc/init.d/network stop

然后在浏览器中访问:http://10.0.0.31,发现过几秒后还是可以正常访问,说明备用Director Server LW2已经成功接替了主Direcotr 的工作,在LW2上执行如下操作:

[root@LW2 ~]# ifconfig 

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:53:F0:93

          inet addr:10.0.0.31  Bcast:10.0.0.31  Mask:255.255.255.255

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

此时,LW2上的httpd服务同样也是开启的。当LW1恢复正常时,LW2会把调度权交回LW1手里,继续监控LW1的状态,做为备用调度主机。

实验二、

LVS+KeepAlived集群负载

KeepAlived的配置非常简单,只需要一个配置文件就可以搞定,以下为KeepAlived的安装及配置,需要一、在主、备Director Server安装KeepAlived

1.下载软件包keepalived-1.2.7.tar.gz,并安装:

[root@LW1 ~]# tar vzxf keepalived-1.2.7.tar.gz

[root@LW1 ~]# cd keepalived-1.2.7

[root@LW1 keepalived-1.2.7]# ./configure --sysconf=/etc --with-kernel-dir /usr/src/kernels/2.6.18-274.el5-xen-x86_64

[root@LW1 keepalived-1.2.7]# make 

[root@LW1 keepalived-1.2.7]# make install

[root@LW1 keepalived-1.2.7]# ln -s /usr/local/sbin/keepalived /sbin/

2.在备Director Server LW2上执行相同的操作

二、配置KeepAlived

1.keepalived的配置文件为/etc/keepalived/keepalived.conf,内容如下:

! Configuration File for keepalived

#全局定义部分

global_defs {

   notification_email {

     Liwei1990@moxiu.net #设置报警邮件地址,可以设置多个,每行一个,如果要开启邮件 报警,则需要开启本机的sendmail服务

   }

   #notification_email_from Alexandre.Cassen@firewall.loc  #设置邮件的发送地址

   #smtp_server 192.168.200.1 #设置smtp server的地址

   #smtp_connect_timeout 30 #设置连接smtp server的超时时间

   #router_id LVS_DEVEL #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主 题中的信息

}

 

#Vrrp实例定义部分

vrrp_instance VI_1 {

    state MASTER #指定Keepalived的角色,MASTER表示此主机为主服务器, BACKUP表示此主机为备用服务器

    interface eth1 #指定HA监测网络的接口

    virtual_router_id 51 #虚拟路由标识,MASTERBACKUP的标识必须相同

    priority 100 #定义优先级,数字越大,优先级越高,在vrrp_instance下,MASTER 的优先级必须要比BACKUP的优先级大

    advert_int 1 #设定MASTERBACKUP负载均衡之间同步检查的时间间隔, 单位是秒

    authentication { #设定验证类型和密码

        auth_type PASS #设置验证类型,主要有PASSAH两种

        auth_pass 1111 #设置验证密码,在一个vrrp_instance下,MASTERBACKUP 必须使用相同的密码才可正常通信

    }

    virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个

        10.0.0.31

    }

}

 

#虚拟服务器定义部分

virtual_server 10.0.0.31 80 { #设置虚拟服务器IP地址及其端口,两者间用空格隔开

    delay_loop 6 #设置运行情况检查时间,单位为秒

    lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法

    lb_kind DR #设置LVS实现负载均衡机制,有NATTUNDR三种模式

    nat_mask 255.255.255.0

    persistence_timeout 50 #会话保存时间,单位为秒。

    protocol TCP #指定转发协议类型,有TCPUDP两种

 

    real_server 10.0.0.29 80 { #配置Real Server,需要指定真实IP与其端口号,两者用空格隔开

        weight 3 #配置服务节点的权值,权值大小用数字表示,数字越在,权值越 高,要根据服务器的性能来进行调节,服务器性能越高,权值可以 相对应调大一点,合理利用和分配系统资源。

         TCP_CHECK { #RealServer的状态检测设置部分,单位为秒。

            connect_timeout 3 #表示3秒无响应时超时

            nb_get_retry 3 #表示重试次数

            delay_before_retry 3 #表示重试间隔

        }

        }

    real_server 10.0.0.30 80 { #配置RealServer2

     weight 1

        TCP_CHECK {

          connect_timeout 3

          nb_get_retry 3

          delay_before_retry 3

        }

    }

}

2.备用DirectorServer配置Keepalived,将上面配置好的主DirectorServerkeepalived.conf拷贝到LW2上然后修改如下字段:

(1)."state MASTER"更改为“state BACKUP”。

(2)将“priority 100”更改为一个较小的值,这里更改为“priority 80

3.Real Server的配置不变,只需要执行/etc/init.d/lvsrs start则可。

三、启动keepalived服务

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

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

四、测试

将第一个实验中的ldirectordheartbeat服务在LW1LW2上全部关闭,然后进行测试:

1.访问http://10.0.0.31,可以显示“Real Server1”或“Real Server2”。

2.关闭LW1 keepalived服务,再次访问“http://10.0.0.31”,显示“Real Server1”或“Real Server2”。

3.当关闭LW1 keepalived服务时,LW2日志显示如下:

Sep 14 12:16:23 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Transition to MASTER STATE

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering MASTER STATE

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) setting protocol VIPs.

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31

Sep 14 12:16:24 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 added

Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 added

Sep 14 12:16:29 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31

状态显示,LW2BACKUP状态变为了MASTER状态。

当启动LW1keepalived服务时,LW2的日志内容如下:

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Received higher prio advert

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering BACKUP STATE

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) removing protocol VIPs.

Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 removed

Sep 14 12:17:53 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 removed

状态显示,当LW1keepalived服务恢复时,备用Director Server LW2的状态由MASTER又变回了BACKUP

 

以上就是LVS集群负载的两种实现方式。

(heartbeat与KeepAlived)