Heartbeat实现Lvs高可用和HA高可用

效果图如下

1heartbeat的介绍

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。下面描述了 heartbeat 模块的可靠消息通信机制,并对其实现原理做了一些介绍

heartbeat Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。[1]

高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为心跳的代码完成。在Linux-HA里这个功能由一个叫做heartbeat的程序完成。

消息通信的模型

 Heartbeat包括以下几个组件: 

heartbeat – 节点间通信校验模块   

CRM - 集群资源管理模块  

CCM - 维护集群成员的一致性  

LRM - 本地资源管理模块  

StonithDaemon - 提供节点重启服务  

logd - 非阻塞的日志记录  

apphbd - 提供应用程序级的看门狗计时器 

  Recovery Manager - 应用故障恢复 

2、实现web服务器的高可用性

1)基本的网卡配置参数略

[root@hua1 ~]# vim /etc/sysconfig/network (改主机名)

[root@hua1 ~]# hostname hua1.a.com (使主机名立即生效)

[root@hua1 ~]# vim /etc/hosts (配置dns指向)

192.168.145.99      hua1.a.com

192.168.145.100     hua2.a.com

2)实现heartbeat高可用需要一些软件实现,需要安装上去

[root@hua2 ~]# mount /dev/cdrom /mnt/cdrom/

[root@hua1 ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm libnet-1.1.4-3.el5.i386.rpm --nogpgcheck (localinstall本地安装,--nogpgcheck,无签名检测)

[root@hua1 ~]# rpm -pql heartbeat-2.1.4-9.el5.i386.rpm (查看解压后的文件夹有那些。)

[root@hua1 ~]# cd /etc/ha.d/ (这个目录是heartbeat的主配置目录)

[root@hua1 ha.d]# cd /usr/share/doc/heartbeat-2.1.4/ (安装后的配置文件)

3[root@hua1 heartbeat-2.1.4]# cp ha.cf authkeys haresources  /etc/ha.d/ (把配置文件拷贝过来)

4[root@hua1 ha.d]# vim ha.cf  (编辑这个心跳文件参数,编辑如下)

95 bcast   eth1   (心跳线的网卡用广播形式)

213 node    hua1.a.com  

214 node    hua2.a.com (两个节点的地址)

5[root@hua1 ~]# dd if=/dev/random bs=512 count=1 |openssl md5 (随机产生一个参数用md5加密)

0+1 records in

0+1 records out

128 bytes (128 B) copied, 0.000308478 seconds, 415 kB/s

9bf2f23aae3a63c16ea681295ffd7666

6[root@hua1 ha.d]# vim authkeys (编辑认证文件)

auth 3

3 md5 9bf2f23aae3a63c16ea681295ffd7666

[root@hua1 ha.d]# chmod 600 authkeys  (改变它的权限为600,不然重启不成功)

7[root@hua1 ha.d]# vim haresources (编辑资源文件)

45 hua1.a.com  192.168.145.101/24/eth0  httpd 

8[root@hua1 ha.d]# cp /etc/init.d/httpd /etc/ha.d/resource.d/ (把httpd的服务器脚本拷贝过来,因为http已经不需要自己启动了,它受heartbeat的控制)

[root@hua2 ha.d]# service httpd status (保证它是关闭的)

httpd 已停

9)编辑apache的网页,两台都要编辑

[root@hua2 ha.d]# cd /var/www/html/

[root@hua2 html]# ll

总计 4

-rw-r--r-- 1 root root 5 12-27 19:19 index.html

[root@hua2 html]# more index.html 

hua3

[root@hua1 ~]# cd /var/www/html/

[root@hua1 html]# ll

total 4

-rw-r--r-- 1 root root 4 Dec 27 20:01 index.html

[root@hua1 html]# more index.html 

123

[root@hua1 heartbeat]# service httpd stop

[root@hua1 heartbeat]# chkconfig httpd off

9)现在可以启用heartbeat的服务,观察日志

[root@hua1 ~]# tail -f /var/log/messages

[root@hua1 html]# service httpd status (这时http服务已经启动了)

httpd (pid  5021) is running...

[root@hua1 html]# ifconfig (这时查看端口发现已经把vip地址资源挣用过来了)

10)另一台启动失败,主要原因是没改权限

[root@hua2 html]# chmod 600 /etc/ha.d/authkeys 

[root@hua2 html]# service heartbeat start

logd is already running

Starting High-Availability services: 

2012/12/29_02:19:34 INFO:  Resource is stopped

                                                           [确定]

11)模式失效

[root@hua1 ha.d]# cd /usr/lib/heartbeat/     (/usr/share/heartbeat

这两个目录都可以模拟

[root@hua1 heartbeat]# ./hb_standby (模拟断掉)

[root@hua2 html]# watch -n 1 "service httpd status" (动态观察http的状态)

[root@hua2 html]# ifconfig (查看地址已经没有了,跑到另一台机器上去了)

[root@hua1 heartbeat]# ./hb_takeover  (模拟有好了,能把资源又征用过来了)

[root@hua1 heartbeat]# pwd

/usr/lib/heartbeat

3、实现director的高可用性

1)配置基本的网卡,还有一个虚拟的vip网卡地址,掩码是255.255.255.255(两台都一样)

[root@mail ~]# route -n

2)root@mail ~]# route add -host 192.168.145.101 dev lo:0 (添加一条特殊路由,指向vip的地址)

3)原来做的基础上把所做过的服务停掉

[root@hua1 ~]# service heartbeat stop

                                                           [确定]

[root@mail html]# chkconfig --list httpd

httpd           0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

[root@mail html]# service httpd stop

停止 httpd:                                               [确定]

4)现在是控制ipvsadm的服务了

[root@hua2 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo 

[root@hua2 ~]# cd /mnt/cdrom/Cluster

[root@hua2 Cluster]# yum install ipvsadm-1.24-10.i386.rpm 

[root@hua1 ~]# cp /etc/init.d/ipvsadm /etc/ha.d/resource.d/

[root@hua1 ~]# ipvsadm -C

[root@hua1 ~]# ipvsadm -A -t 192.168.145.101 -s rr

Zero port specified for non-persistent service

[root@hua1 ~]# ipvsadm -A -t 192.168.145.101:80 -s rr

[root@hua1 ~]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.200 -g

[root@hua1 ~]# ipvsadm -a -t 192.168.145.101:80 -r 192.168.145.201 -g

[root@hua1 ~]# ipvsadm -ln

[root@hua1 ~]# service ipvsadm save

scp hua1.a.com:/etc/sysconfig/ipvsadm /etc/sysconfig/ipvsadm (把一台的配置拷贝到另一个服务器上了)

4、实现动态的转发规则表

意义:就是当后方的所管理的服务器有异常时,就能被前方的管理集群所察觉到,并作出相应的改变。

1)需要一个软件包,安装上去。

[root@hua1 ~]# yum localinstall heartbeat-ldirectord-2.1.4-9.el5.i386.rpm --nogpgcheck

[root@hua1 ~]# rpm -pql heartbeat-ldirectord-2.1.4-9.el5.i386.rpm 

2[root@hua1 ~]# cp /etc/init.d/ldirectord /etc/ha.d/resource.d/ (把要管理的服务器脚本拷贝过去)

3[root@hua1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/

4[root@hua1 ~]# vim /etc/ha.d/ldirectord.cf  

5[root@hua1 ~]# vim /etc/ha.d/haresources

hua1.a.com 192.168.145.101/24/eth0 ldirectord::ldirectord.cf

6)两台的web服务器要根据ldirector上的东西编写测试页面。

[root@hua1 ~]# cd /var/www/html/

[root@hua1 html]# echo "yes" >.hua.htm

7)做完后不用重启,能够自动加载,这时查看规则已经能查看到了,因为这时检测不到后方的web工作

8)然后开启一个web的服务就能发现权值变成了1.

[root@mail html]# service httpd start

9)如何在编辑/etc/ha.d/ldirectord.cf   这个文件时,把quiescent (静默模式)改为了no,如何发现后方的检测页面不能检测到则会把规则直接删掉

[root@mail html]# service httpd stop (把一台的服务停掉,然后就发现,规则没有了)