CentOS 6.5 下HeartBeat的安装与配置教程,centosheartbeat


CentOS 6.5 下HeartBeat的安装与配置

CentOS 6.5 下HeartBeat的安装与配置

两台linux服务器,双网卡。

xldwhj(主):eth0:192.168.42.2 (心跳线) eth1:192.168.184.128

xldroot(从):eth0:192.168.42.3(心跳线) eth1:192.168.184.130

虚拟IP:192.168.184.200

1 HeartBeat基本介绍

Heartbeat是High-Availability Linux Project (Linux下的高可用性项目)的产物,是一套提供防止业务主机因不可避免的意外性或计划性宕机问题的高可用性软件。Heartbeat可以从Linux-HA 项目Web 站点免费获得,它提供了所有HA (高可用性)系统所需要的基本功能,如启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享IP 地址的所有者等。它通过串行线、以太网接口或同时使用两者来监测特定服务(或多个服务)的运行状况。

Heartbeat实现了HA 功能中的核心功能——心跳,将Heartbeat软件同时安装在两台服务器上,用于监视系统的状态,协调主从服务器的工作,维护系统的可用性。它能侦测服务器应用级系统软件、硬件发生的故障,及时地进行错误隔绝、恢复;通过系统监控、服务监控、IP自动迁移等技术实现在整个应用中无单点故障,简单、经济地确保重要的服务持续高可用性。

Heartbeat采用虚拟IP地址映射技术实现主从服务器的切换对客户端透明的功能。

1.1 HeartBeat的工作原理

通过修改Heartbeat的软件的配置文件,可以制定那一台Heartbeat服务器作为主服务器,则另一台将自动成为热备服务器。然后在热备服务器上配置Heartbeat

守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定时间内为监听到来自主服务器的心跳,就会启动故障转义程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。

以上的描述为heartbeat的主备模式,heartbeat还支持主主模式,即两台服务器互为主备,这是他们之间还会互相发送报文来告诉对方自己的当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者是已经宕机了,这时运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者是服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务能够不间断的持续的提供服务。注意:所谓的业务不间断,在故障转移期间也是需要切换时间的,heartbeat的切换时间是5-20秒。

切换的常见条件:

1)服务器宕机

2)Heartbeat服务本故障

3)中间的连接线路故障

1.2 HeartBeat的心跳连接

讲过上面的描述,要部署heartbeat服务,至少需要两台主机才能完成。那么,要实现高可用服务,这两台主机之间,是如何做到互相通信互相监控的呢/

下面是两台heartbeat主机之间通信的一些常用的可行的方法:

1)串行电缆,即所谓的串口(首选,缺点是距离不能太远)

2)一根以太网电缆两网卡直连(生产环境中常用的方式)

3)以太网电缆,通过交换机等网络设备连接(次选,原因是增加了故障点,不好排查故障,同时,线路不是专用的心跳线,容易受其他数据传输的影响,导致心跳报文发送问题)

2 HeartBeat的安装与配置

2.1 HeartBeat的安装

因为Centos默认的yum源里没有heartbeat的资源,所以首先需要将fedora的源添加到centos系统中

[root@xldwhj ~]#

Wget https://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@xldwhj ~]# rpm –ivfepel-release-6-8.noarch.rpm

yum安装HeartBeat

[root@xldwhj ~]# yum –y install heartbeat

安装完成后,需要三个配置文件: ha.cf,haresources,authkeys

[root@xldwhj ~]# cat /etc/ha.d/README.config

You need three configuration files to make heartbeat happy,

and they all go in this directory.

They are:

ha.cf Main configuration file

haresources Resource configuration file

authkeys Authentication information

These first two may be readable by everyone, but the authkeys file

must not be.

The good news is that sample versions of these files may be found in

the documentation directory (providing you installed the documentation).

If you installed heartbeat using rpm packages then

this command will show you where they are on your system:

rpm -q heartbeat -d

If you installed heartbeat using Debian packages then

the documentation should be located in /usr/share/doc/heartbeat

执行上面的命令可以看到相关的目录

[root@xldwhj ~]# rpm -q heartbeat -d

/usr/share/doc/heartbeat-3.0.4/AUTHORS

/usr/share/doc/heartbeat-3.0.4/COPYING

/usr/share/doc/heartbeat-3.0.4/COPYING.LGPL

/usr/share/doc/heartbeat-3.0.4/ChangeLog

/usr/share/doc/heartbeat-3.0.4/README

/usr/share/doc/heartbeat-3.0.4/apphbd.cf

/usr/share/doc/heartbeat-3.0.4/authkeys

/usr/share/doc/heartbeat-3.0.4/ha.cf

/usr/share/doc/heartbeat-3.0.4/haresources

/usr/share/man/man1/cl_status.1.gz

/usr/share/man/man1/hb_addnode.1.gz

/usr/share/man/man1/hb_delnode.1.gz

/usr/share/man/man1/hb_standby.1.gz

/usr/share/man/man1/hb_takeover.1.gz

/usr/share/man/man5/authkeys.5.gz

/usr/share/man/man5/ha.cf.5.gz

/usr/share/man/man8/apphbd.8.gz

/usr/share/man/man8/heartbeat.8.gz

查找到3个配置文件ha.cf,haresources,authkeys的位置在/usr/share/doc/heartbeat-3.0.4/下,将其拷贝到/etc/ha.d目录下

保留原有的权限 cd //usr/share/doc/heartbeat-3.0.4/

cp -p ha.cfharesourcesauthkeys /etc/ha.d

ll/etc/ha.d/authkeys 是不是600的权限,不是就修改

vi/etc/ha.d/authkeys

修改保密方式

auth 1

1 md5 XXX(用dd if=/dev/random count=1 bs=512 | md5sum生产的一段随机数)

2.2 HeartBeat的配置

ha.cf定义心跳信息层,用于实现心跳信息传输。

xldwhj上ha.cf的配置如下:

[root@xldwhj ~]# vim /etc/ha.d/ha.cf

logfile /var/log/ha-log #ha的日志文件记录位置。如没有该目录,则需要手动添加

logfacility local0

keepalive 2 #设定心跳(监测)时间时间为2秒

deadtime 30 #超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡

warntime 10 #超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中

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

udpport 694 #使用udp端口694进行心跳监测(bcast和ucast通信),这是默认的,并且在IANA官方注册的端口号。

ucast eth0 192.168.42.3 #采用网卡eth0的udp单播来通知心跳,ip为对方ip

auto_failback on #heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取所有资源。

watchdog /dev/watchdog

node xldwhj #节点1,必须要与uname -n指令得到的结果一致。

node xldroot #节点2

ping 192.168.184.1 #通过ping网关来监测网络是否正常。

hopfudge 1

deadping 30

xldroot上ha.cf的配置如下:

logfile /var/log/ha-log

logfacility local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport 694

ucast eth0 192.168.42.2

auto_failback on

node xldwhj

node xldroot

ping 192.168.184.1

hopfudge 1

deadping 30

xldwhj与xldroot上的haresources,authkeys配置相同。

authkeys的配置如下:

[root@xldwhj ~]# vim /etc/ha.d/authkeys

auth 1 #指定的认证方式,数字是后面所列的方法的一种,最简单的是crc,最复杂的是sha1,下面的列表必须按顺序来,不能只有2,没有1,而且这里指定的方法必须是下面列表有的

1 crc

在haresources的配置文件中加入如下内容:

[root@xldwhj ~]# vim /etc/ha.d/haresources //决定那一个服务器是主节点

xldwhj IPaddr::192.168.184.200/24/eth1 httpd

xldwhj IPaddr::192.168.184.200/24/eth1 mysqld

3 HeartBeat测试

在启动heartbeat之前,在xldwhj与xldroot上首先查看httpd的状态:

[root@xldwhj ~]# netstat -nlp | grep httpd

[root@xldwhj ~]#

可知httpd未启动。

启动两台服务器上的heartbeat:

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

或者

[root@xldwhj ~]#service heartbeat start

xldwhj(主)上的命令操作:

[root@xldwhj ~]# ip a

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

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:ef:76:a8 brd ff:ff:ff:ff:ff:ff

inet 192.168.42.2/24 brd 192.168.42.255 scope global eth0

inet6 fe80::20c:29ff:feef:76a8/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:ef:76:b2 brd ff:ff:ff:ff:ff:ff

inet 192.168.184.128/24 brd 192.168.184.255 scope global eth1

inet 192.168.184.200/24 brd 192.168.184.255 scope global secondary eth1

inet6 fe80::20c:29ff:feef:76b2/64 scope link

valid_lft forever preferred_lft forever

虚拟IP已存在。

[root@xldwhj ~]# netstat -nlp | grep httpd

tcp 0 0 :::80 :::* LISTEN 3121/httpd

httpd已启动。

xldroot(从)上的命令操作:

[root@xldroot ~]# ip a

1: lo: 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

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:85 brd ff:ff:ff:ff:ff:ff

inet 192.168.42.3/24 brd 192.168.42.255 scope global eth0

inet6 fe80::20c:29ff:fe53:7485/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:8f brd ff:ff:ff:ff:ff:ff

inet 192.168.184.130/24 brd 192.168.184.255 scope global eth1

inet6 fe80::20c:29ff:fe53:748f/64 scope link

valid_lft forever preferred_lft forever

未发现虚拟IP存在

[root@xldroot ~]# netstat -nlp | grep httpd

[root@xldroot ~]#

httpd未启动

打开网页,输入虚拟IP地址:192.168.184.200,出现如下内容:

\

关闭xidwhj虚拟机:

[root@xldwhj html]# shutdown now

在xldroot上的操作如下:

[root@xldroot html]# ip a

1: lo: 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

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:85 brd ff:ff:ff:ff:ff:ff

inet 192.168.42.3/24 brd 192.168.42.255 scope global eth0

inet6 fe80::20c:29ff:fe53:7485/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:8f brd ff:ff:ff:ff:ff:ff

inet 192.168.184.130/24 brd 192.168.184.255 scope global eth1

inet 192.168.184.200/24 brd 192.168.184.255 scope global secondary eth1

inet6 fe80::20c:29ff:fe53:748f/64 scope link

valid_lft forever preferred_lft forever

可以看到虚拟IP悬浮于xldroot虚拟机的网卡下:

[root@xldroot html]# netstat -nlp | grep httpd

tcp 0 0 :::80 :::* LISTEN 2330/httpd

打开网页,输入虚拟IP地址,出现如下内容:

\

此时重启xldwhj服务:

[root@xldwhj ~]# ip a

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

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:ef:76:a8 brd ff:ff:ff:ff:ff:ff

inet 192.168.42.2/24 brd 192.168.42.255 scope global eth0

inet6 fe80::20c:29ff:feef:76a8/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:ef:76:b2 brd ff:ff:ff:ff:ff:ff

inet 192.168.184.128/24 brd 192.168.184.255 scope global eth1

inet 192.168.184.200/24 brd 192.168.184.255 scope global secondary eth1

inet6 fe80::20c:29ff:feef:76b2/64 scope link

valid_lft forever preferred_lft forever

可以看出,自动抢占虚拟IP地址。

而xldroot上

[root@xldroot html]# ip a

1: lo: 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

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:85 brd ff:ff:ff:ff:ff:ff

inet 192.168.42.3/24 brd 192.168.42.255 scope global eth0

inet6 fe80::20c:29ff:fe53:7485/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:53:74:8f brd ff:ff:ff:ff:ff:ff

inet 192.168.184.130/24 brd 192.168.184.255 scope global eth1

inet6 fe80::20c:29ff:fe53:748f/64 scope link

valid_lft forever preferred_lft forever

虚拟IP地址已不见。

测试完成,HeartBeat安装与配置成功

相关内容