Heartbeat实现Lvs高可用和HA高可用
效果图如下
1、heartbeat的介绍
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 (把一台的服务停掉,然后就发现,规则没有了)
本文出自 “于东华的博客” 博客,转载请与作者联系!