VMware下实验基于heartbeat的Debian Linux高可用性集群服务
-----用你心中的温暖烛光,点燃你周围的另一支烛光,这个世界就亮了。
Qintel cdut qintel#163.com (欢迎指出错误的地方)
日期(版本历史) | 版本号 | 相关描述 | 作者 |
2007-7-30 | 1.0 | 正式稿. | qintel |
2007-08-26 | 1.02 | 指定主节点的说明,格式调整 | qintel |
说明:本文没有关于heartbeat的详细配置说明,只是就较关键的,新手易出错的,几个地文写了一点心得,实验及成文历时约3天,20多个小时。
关键词:Heartbeat debain 认证key生成,主、次节点,顺序,指定,Cluster IP与Cluster IP+服务
1、什么是集群?
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改 集群系统的节点。
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。集群系统主要分为高可用(High Availability)集群,简称 HA 集群,负载均衡群集(Load Balance Cluster)和高性能计算(High Perfermance Computing)集群,简称 HPC 集群。
高可用性群集的出现是为了使群集的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点 代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。
常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机"。
负载均衡群集使负载可以在计算机群集中尽可能平均地分摊处理。这种负载可以一个程序、一项服务,一个设备,也可以是网络流量负载。这样的系统非常适合于运行 同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也是如此。通常,网络服务器应用程 序接受了太多入网流量,以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可以根据每个节点上不同的可用资源或网络的特殊环境 来进行优化。
这种群集用来解决复杂的科学问题。这是并行计算的基础,尽管它不使用专门的由十至上万个独立处理器组成的并行超级计算机,但它却使用商业系统,如通过高速连接来链接的一组单处理器或双处理器 PC,并且在公共消息传递层上进行通信以运行并行应用程序。因此,您会常常听说又有一种便宜的 Linux 超级计算机问世了。但它实际是一个计算机群集,其处理能力与真的超级计算机相等,通常一套象样的群集配置开销要超过 $100,000。这对一般人来说似乎是太贵了,但与价值上百万美元的专用超级计算机相比还算是便宜的。
2、Linux-HA 项目(The High Availability Linux Project)
高可用性 Linux 项目,根据其目标声明,旨在为 Linux 提供高可用性解决方案,现在,SUSE Linux, Mandriva Linux, Debian GNU/Linux, Ubuntu Linux, Red Flag Linux, and Gentoo Linux.都带有Heartbeat软件,一些嵌入式的系统也使用了Heartbeat。同时Heartbeat也可以用在FreeBSD和Solaris,甚至是MacOS/X and OpenBSD上。
Heartbeat可以和DRBD实时磁盘复制软件,LVS(Linux Virtual Server)项目很好的集成,工作在一起。Heartbeat正在引领着OCF(Open Cluster Framework)标准的实现。
项目中有可以维护节点间心跳并接管失败节点的 IP 地址的软件。如果一个节点失败,它使用“伪造冗余 IP”软件包将失败节点的地址添加到工作节点以承担它的职责。于是,可以在几毫秒时间内自动替换失败的节点。实际使用中,心跳通常在几秒范围内,除非在节点之间有专用网络链接。因此,失败系统中的用户应用程序仍需要在新的节点上重新启动。
3、我的实验环境:
一台接入LAN的PC,CPU:P4 3.0, 内存:512MB,一块普通以太网卡。主操作系统: winxp professional
VMware WorkStation,在VMware WorkStation上安装两个虚拟主机(也可安装并配置好一台后用VM→Clone功能复制一台出来,这样更快捷,clone后的主机要注意网卡mac问题,不行的话就删掉网卡,重新添加),操作系统为Debian linux 4.0,主机硬件配置如图:
其它硬件如软驱,声卡可删去不要。装好Linux操作系统后,光驱也可删去。其中Ethernet为“桥接”模式,Ethernet2为自定义模式,接在VMNET2上。
其中,VMware,Debian的安装设置本文不涉及,本文重点介绍的是hearbeat的配置。
下图是本次实验的逻辑拓朴图:其中集群IP不能和LAN(包括本机)的IP冲突,并且不能在除/etc/ha.d/haresources文件以外的任何地方配置。
#说明:在VMware上的Guest OS(debian)虚拟了2块网卡,一块和Host OS(winxp)在同一交换机,用于对外提供高可用性服务,另一块用于和其它节点发送心跳信息(通告彼此的运行信息),连接在VMware的虚拟交换机VMNET2上,此交换机可以认为是独立的。
4、HeartBeat的配置
安装heartbeat除必要的编译器之外,需要其它一些软件的开发包支持:如e2fsprogs和libnet。所以手动通过源码安装有些不方便,本实验采取通过Debian下apt-get方式安装,可以自动解决包依赖关系。
本实验环境下安装命令为
# apt-get install heartbeat
安装后要配置三个文件(如没有可手动建立):ha.cf、haresources、authkeys。这三个配置文件需要在/etc/ha.d目录下面,但是默认是没有这三个文件的,可以到官网上下这三个文件,也可以在源码包里找这三个文件,在源码目录下的DOC子目录里。
4.1Authkeys文件的配置
配置文件的值如下:
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello! ##其中Hello!为密钥
这个配置文件非常简单,就是在auth选择一个值。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的。这个配置文件权限必须是0600。
root@debian:/# chmod 0600 authkeys
对安全性高的,可以用命令自动生成随机密钥
root@debian:/# dd if=/dev/urandom count=4 2>/dev/null | openssl dgst -sha1
结果如下:
f9c85a048681dcbf47457065bbff62e32cec186d
4.2haresources文件的配置
此文件用于配置集群的IP和使用集群的服务。有以下几种配置方式:
#配置方式一 ----------------------------------------------------------
#debian 202.115.138.65
#指定主机debian为主节点,把此地址用于集群IP,只要HA服务启动则此IP就将被自动配置到主节点上。
#配置方式二 -------------------------------------------------------
debian 202.115.138.65 apache
#让apache服务和此集群地址绑定,如apache或HA服务没有启动,刚此IP也不启用。
#配置方式三 ---------------------------------------------------------
just.linux-ha.org 135.9.216.110 135.9.215.111 135.9.216.112 httpd
#把httpd服务和这三个集群地址绑定
#-------------------------------------------------------------------
还有一种共享文件系统集群的配置方法见参考文献[5]。
此配置文件中只要配置了上面的任意一种方式即可工作,本实验中采取配置方式二,即把apache服务集群。配置文件中其它选项不配也可工作。
4.3ha.cf文件的配置
auto_failback off
#说明:可选on或off,主节点恢复正常后,资源是自动回滚(takeover)到主节点还是等到副节点down后回滚。
node debian
node bebian2
#说明:节点名称,与uname –n保持一致。是否主节点与此位置的先后顺序无关。而是在haresources里指定。
#bcast eth0
#说明:采用eth0的udp广播用来发送心跳信息,建议在副节点不只一台时使用
ucast eth0 10.0.11.2
#说明:采用网卡eth0的udp单播来通知心跳,ip应为对方IP(未验证)
#mcast eth0 225.0.0.1 694 1 0
#说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
#注:广播,单播,多播,以上三种任选其一即可。
heartbeat的三个配置文件中还有一些其它可配置项,但是比较关键的,比较容易弄错的就是上面提到的这几项,有了上面这几项,可保证在heartbeat 1.2系列的版本上正常运行。如果想要自己弄懂所有配置选项,那么自己参考:http://www.linux-ha.org/ConfiguringHeartbeat中的文档,特别是《Getting Started with Linux-HA(heartbeat)》文档,不熟悉的情况下看官方参考文档永远是个明智的选择。
5、实验结果测试
在Host OS winxp上通过浏览器,访问Cluster IP:http://202.115.138.65/,服务正常。同时在主节点OS上,查看
# ifconfig -a | less
可发现Cluster IP被HA自动配置到了eth0:0上。
此时,关掉HA服务,或者关掉主节点,立即访问Cluster IP:http://202.115.138.65/,发现服务中断,过大约30秒(时间可在/etc/ha.d/ha.cf)中配置,再次访问Cluster IP:http://202.115.138.65/,发现服务又正常了。而此时在备用节点2上,
# ifconfig -a | less
可发现Cluster IP被HA自动配置到了节点2的eth0:0上。
通过查看节点2上的日志,日志里记录了heartbeat接受到的心跳信息,还有依据信息采取的措施。
# vim /var/log/syslog
摘录关键的几条日志如下:
可看到,节点2发现节点1异常,然后自动将集群IP配置给自己,并向全网发送arp广播,通知集群IP与本机Mac的对应起来,最后启动apache服务。
6、结论
通过自己实验,发现heartbeat集群存在一些不完善的地方,比如:
#配置方式一-------------------------------------------------------
debian 202.115.138.65
#把此地址用于集群,只要HA服务启动则此IP就将被自动配置到主节点上。
#配置方式二 -------------------------------------------------------
debian 202.115.138.65 apache
#让apache服务和此集群地址绑定,如apache或HA服务没有启动,刚此IP也不启用。
一定要保证IP后面的服务名在以下2个目录有,而且可用。如果没有同名,那整个集群将不能正常工作,culster ip将不被配置到任何一个节点上。
以下摘录heartbeat官方对此的说明:
linuxha1.linux-ha.org 192.168.85.3 httpd smb # haresources配置文件
#Note: httpd and smb are the name of startup scripts for Apache and Samba, respectively. #Heartbeat will look for startup scripts of the same name in the following paths:
#/etc/ha.d/resource.d
#/etc/init.d
在除了观察到的这2种情况以外,hearbeat都能正常工作,当然这是实验环境中得出的结论,在商业环境中的大规模应用据向经验人土打听说会有更多问题。
参考文献:
http://linux.chinaunix.net/bbs/thread-817188-1-1.html