搭建Heartbeat服务器

Heartbeat名词解析:

所谓Heartbeat,顾名思义就是心跳同步的意思。在现在的网络中,是很重要稳定高效的时代。在很多的服务上都是通过搭建服务集群来提高效率;并且保持冗余。这样能够给更好的提高效率,降低损失。通过Heartbeat软件搭建一个简单的高可用性,冗余保护的web服务器。提供一个增强linux可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。Heartbeat提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等。

Heartbeat之中的重点词汇:

Node(节点):每个单独运行一个heartbeat进程的服务器,成为节点。

Resource(资源):资源就是节点能够控制的实体。

Event(事件):就是在运行heartb进程过程当中出现的错误事件。

Action(动作):当出现错误的时候,能够进行解决问题。

实验的环境:

1、搭建heartbeat服务器所需要的软件如下:

ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz

Heartbeat-3-0-7e3a82377fa8.tar.bz2

Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

由于heartbeat的rpm包不是很好找,所以我们使用源码包。如果一定要使用源码包也可以在pkgs.org网站下载。

2、我们在安装heartbeat源码包的时候会出现问题,在安装ClusterLabs-resource源码包的时候系统会提安装不成功;系统会提示autoconf、automake版本过低。所以我们需要进行软件升级。

autoconf-2.68.tar.gz

automake-1.11.2.tar.gz

3、在安装源码之前我们先要搭建好实验环境。首先我们需要把系统的名字进行修改好。并且修改hosts文件。

[root@realserver2 tmp]# cat /etc/sysconfig/network

HOSTNAME=realserver2

[root@realserver2 tmp]# cat /etc/hosts

192.168.10.12 realserver2

192.168.10.222 director2

注意(在两个节点上的配置要保持一致,不能不一致。)

4、完成之后我们还需要创建一组和一个用户。

[root@realserver2]#roupadd haclient

[root@realserver2]#useradd -g haclient hacluster

这样子实验环境,搭建完成。接下来就正式开始进行安装heartbeat源码包。

搭建Heartbeat服务器流程如下:

搭建Heartbeat服务器是在Red Hat 5.8

1、Heartbeat服务器的主要源码包:Heartbeat-3-0-7e3a82377fa8.tar.bz2。

在安装源码包之前,我们首先要确认是否安装包已经存在。

[root@realserver2 tmp]# ll

-rw-r--r--  1 root root 1860672 Mar  9 21:05 autoconf-2.68.tar.gz

-rw-r--r--  1 root root 1569171 Mar  9 21:08 automake-1.11.2.tar.gz

-rw-r--r--  1 root root  452498 Mar  6 23:32 ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz

-rw-r--r--  1 root root  538802 Mar  6 23:33 Heartbeat-3-0-7e3a82377fa8.tar.bz2

-rw-r--r--  1 root root  461579 Mar  6 23:33 Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

 

2、接下来,我们现在开始进行安装源码包。首先我们现在先开始安装第一个源码包:

Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

[root@realserver2tmp]#tar -xjf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

#./autogen.sh 

#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 

#make 

#make install

3、安装完成之后,现在进行安装第二个源码包:Heartbeat-3-0-7e3a82377fa8.tar.bz2

[root@realserver2tmp]#tar -xjf Heartbeat-3-0-7e3a82377fa8.tar.bz2

#./bootstrap 

#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 

#make 

#make install

4、完成之后,我们现在安装第三个:ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz

[root@realserver2tmp]#tar -zxvf ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz

#./autogen.sh  

#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 

#make 

#make install

autoreconf: Entering directory `.'

autoreconf: configure.ac: not using Gettext

注意(我们在这安装这个软件的时候,系统会提示由于版本过低不能够安装。所以我们在安装这个5、软件的时候我么现在安装这两个软件。autoconf-2.68.tar.gz automake-1.11.2.tar.gz

 

[root@realserver2tmp]#tar -zxvf autoconf-2.68.tar.gz 

#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 

#make 

#make install

[root@realserver2tmp]#tar -zxvf automake-1.11.2.tar.gz

#./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var 

#make 

#make install

上面的安装在两个节点必须一致;不然会出现问题。)

6、在安装完成之后,先在进入Heartbeat软件包目录下,复制三个主配文件到ha.d目录下。

# cp doc/ha.cf /etc/ha.d/

# cp doc/haresources /etc/ha.d/

# cp doc/authkeys /etc/ha.d/ 

[root@director2 ha.d]# ls

authkeys  ha.cf    haresources  

7、复制完成之后,现在开始进行配文件修改。这三个文件没有先后的顺序。那么,我首先配置authkeys这个文件。在两个节点上都是配置一样的配置,保持同步。  

[root@director2 ha.d]# vim authkeys 

auth 3—————————这个默认是选择是1,这样不安全。所以我们选择3.

#1 crc————冗余

#2 sha1 HI!

md5 Hello!————————采用md5密文认证方式。

8、接下来进行配置haresource资源管理的文件。只需要在文件的末端加入下面这条命令即可。

[root@director2 ha.d]# 

[root@director2 ha.d]# cat haresources 

director2  httpd 192.168.10.200/24/eth0/192.168.10.255

注意(在这个文件下面加入上面这条命令的时候,是要根据节点本身自己要求进行添加的。不能两个节点都一致,这样会出现重名的错误。)

9、接下就进行配置ha.cf主配文件。由于文件有很多的解释代码。现在我把解释说明的出去。把ha.cf这个文件当中我我们需要注意的代码,都标记号行号,这样便于查找。

 24    #debugfile /var/log/ha-debug

 29    #logfile        /var/log/ha-log

 34    logfacility     local0

 48    keepalive 2

 56    deadtime 30

 61    warntime 10

 71    initdead 120

 76    udpport 694

 91    bcast   eth0            # Linux

157    auto_failback on

211    node  realserver2

212    node  director2

注意(在文件的213行上面我们加上标记红色的两行代码,指定两个节点。其他只需出去注释,并且修改自己想要的参数。

10、配置完成之后,现在要进行最后的检查。heartbeat管理的应用不能随机启动,修改chkconfig配置,关闭随机启动选项。

 

[root@director2 ~]# chkconfig  --list |grep heartbeat

service heartbeat supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add heartbeat')

[root@director2 ~]# 

现在去两个节点上www/html目录下。我们去编辑简单的网页。

[root@director2 html]# cat index.html 

nihao!!!!

[root@realserver2 ~]# cat /var/www/html/index.html 

Realserver2

11、置完成之后,现在进行heartbeat服务器的测试。先在两个节点上开启Heartbeat服务。

[root@realserver2 ~]# service heartbeat start

Starting High-Availability services: 

[  OK  ]

[root@realserver2 ~]# 

 

[root@director2 ~]# service heartbeat start

Starting High-Availability services: 

[  OK  ]

[root@director2 ~]# 

12、开启Heartbeat服务器之后,现在我们在PC机上进行测试。我们通过浏览器访下面这个IP192.168.10.200.

 

13、现在去查看一下ha.cf的日志文件

[root@director2 ha.d]# tail /var/log/ha-log -f

harc[8947]:     2012/12/10_07:30:43 info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp

ip-request-resp[8947]:  2012/12/10_07:30:43 received ip-request-resp httpd OK yes

Dec 10 07:30:43 director2 heartbeat: [8866]: info: remote resource transition completed.

ResourceManager[8970]:  2012/12/10_07:30:43 info: Acquiring resource group: director2 httpd 192.168.10.200/24/eth0/192.168.10.255

ResourceManager[8970]:  2012/12/10_07:30:43 info: Running /etc/init.d/httpd  start

IPaddr[9033]:   2012/12/10_07:30:56 INFO:  Resource is stopped

ResourceManager[8970]:  2012/12/10_07:30:57 info: Running /etc/ha.d/resource.d/IPaddr 192.168.10.200/24/eth0/192.168.10.255 start

IPaddr[9121]:   2012/12/10_07:30:57 INFO: Using calculated netmask for 192.168.10.200: 255.255.255.0

IPaddr[9121]:   2012/12/10_07:30:58 INFO: eval ifconfig eth0:0 192.168.10.200 netmask 255.255.255.0 broadcast 192.168.10.255

IPaddr[9095]:   2012/12/10_07:30:58 INFO:  Success

 

这里我们可以发现Heartbeat已经正常在运转。

同时也查看下httpd的日志。

[root@director2 ha.d]# tail /var/log/httpd/access_log 

192.168.10.112 - - [10/Dec/2012:07:31:05 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

192.168.10.112 - - [10/Dec/2012:07:31:54 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

[root@realserver2 log]# taol httpd/access_log

-bash: taol: command not found

14、在director2上我们可以发现httpd服务有响应,可是在realserver2上的httpd服务却没有响应。这说明主节点没有出现错误,并且能够正常运转。同时,我们在网络中也可发现会自动生成一个eth0的子接口。

[root@realserver2 log]# ifconfig 

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:CA:08:0C  

          inet addr:192.168.10.200  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000 

15、现在我们去把director2的heartbeat服务关闭,再来测试下,会出现什么情况。

[root@director2 ~]# service heartbeat stop

Stopping High-Availability services: [  OK  ]

[root@director2 ~]# 

16、在关闭Heartbeat服务器之前,我们首先在PC客户端进行PING命令测试。这个时候会发现。当主节点在挂掉的时候,PING Vip时候会出现机跳的丢包。这个是由于两个节点在相互切换的时候,会出现几秒的停顿。

 

17、这个时候,再次进行访问192.168.10.200地址。会发现依然能够正常访问,并不会出现不能访问的情况。

 

注意(在这里我们能够更好的发现,PC机现在所访问的httpd服务,已经不是原来那个服务器。)

18、现在去查看节点的日志,这个时候就会发现。在director2节点上的ha_log日志,没有变化。httpd上次所访问的日志不变;同时。在realserver2节点上,我们可以发现ha_log日志中增加新日志。在httpd日志当中增加192.168.10.112所访问的日志。

[root@realserver2 ~]# tail /var/log/ha-log 

heartbeat[7963]: 2013/03/11_01:11:12 WARN: Gmain_timeout_dispatch: Dispatch function for check for signals was delayed 3550 ms (> 1010 ms) before being called (GSource: 0x8ad1a60)

heartbeat[7963]: 2013/03/11_01:11:12 info: Gmain_timeout_dispatch: started at 430955771 should have started at 430955416

[root@realserver2 ~]# 

[root@realserver2 ~]# tail /var/log/httpd/access_log

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

192.168.10.1 - - [11/Mar/2013:01:15:26 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

同时查看director2的日志进行作对比。

[root@director2 ~]# tail /var/log/httpd/access_log 

192.168.10.112 - - [10/Dec/2012:07:31:05 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

192.168.10.112 - - [10/Dec/2012:07:31:54 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"

在这里可以发现,现在的主要节点是realserver2.而不是director2。这样就说明实验成功。

注意(在修改Heartbeat其中ha.cf文件的时候,可以对其参数进行修改。其中这个参数auto_failback on 、keepalive、 deadtime 、warntime 、initdead等比较中要。这些参数能够决定节点的反应速度。同时,还要注意,如果现实中所使用的服务器性能一样。尽量不要开枪抢占的机制。这样不会导致因为抢占而出现的断接。)

到这里实验基本完成!!!!!!!!!!!!