维持最长的系统正常运行时间对随需应变计算的成功来说越来越重要。不幸的是,很多现成即用(off-the-shelf)的高可用性(high availability,HA)解决方案 价格昂贵,而且需要专门技术。本系列的 5 篇文章将提供一个使用公开可用软件获得 HA 服务的廉价替代方案。
本系列中的详尽步骤将展示如何在 Linux™ 上构建一个高可用性的 Apache Web 服务器、WebSphere® MQ 队列管理器、LoadLeveler 群集、WebSphere Application Server 群集和 DB2® Universal Database。 系统管理员可以投入最少的时间来学习如何使用和维护这个系统。本系列讲述的技术也适用于 Linux 上的很多服务。
为了最有效地利用本系列,您应该对 WebSphere MQ、WebSphere Application Server、IBM LoadLeveler、 DB2 Universal Database 以及高可用性群集有基本的了解。
简介
在业务关键型或任务关键型环境中使用任何软件产品,都需要考虑 可用性,这是对系统完成其应该完成的任务(甚至是在出现崩溃、设备故障和环境 灾难的情况下)的能力的度量。随着越来越多商业关键型应用程序转移到 Internet 上,提供高可用性服务 变得日趋重要。
本文将重点介绍实现 HA 解决方案时可能会遇到的一些实现问题。我们将回顾 HA 的概念、可用的 HA 软件、要使用的硬件, 以及关于 heartbeat(用于 Linux 的开源 HA 软件)的安装和配置细节,而且我们将查看如何通过 heartbeat 使 Web 服务器变得高度可用。
硬件要求
本系列中描述的测试场景需要以下硬件:
- 4 个装有以太网网络适配器的、支持 Linux 的系统。
- 一个共享的外部 SCSI 磁盘驱动器(双硬盘)。
- 一根 IBM 串口直连线缆(serial null modem cable)。
在我的设置中,我使用的是内存为 1 GB 的 IBM eServer™ xSeries® 335 机器。至于共享磁盘,我将 这些机器中的一台用作 NFS 服务器。完成安装所需要的软件如下所示,尽管对本文来说,只需安装 Red Hat Enterprise Linux 和 heartbeat 即可:
- Red Hat Enterprise Linux 3.0(2.4.21-15.EL)
- heartbeat 1.2.2
- IBM Java 2 SDK 1.4.2
- 安装了 Fix Pack 7 的 WebSphere MQ for Linux 5.3.0.2
- LoadLeveler for Linux 3.2
- 安装了 Cumulative Fix 1 的 WebSphere Base Edition 5.1.1 for Linux
- 安装了 Fixpack 1 的 WebSphere ND 5.1 for Linux
- DB2 Universal Database Enterprise Server Edition 8.1 Linux
下载后面 下载部分中列出的代码包,就可以得到该测试场景。表 1 描述了 hahbcode.tar.gz 中的目录。
表 1. 示例代码包中有哪些内容
toptoptoptoptoptoptop
目录 | 内容 |
heartbeat | heartbeat 的示例配置文件 |
www | 测试用于 Apache Web 服务器的 HA 的 HTML 文件 |
mq | 用于 WebSphere MQ HA 的脚本和代码:
|
loadl | 将 LoadLeveler 作为一项 Linux 服务来启动和停止的脚本 |
was | 用于 WebSphere 应用服务器 HA 的脚本和文件:
|
db2 | 检查数据库可用性、创建表、向表中插入行并从表中选择 行的脚本 |
高可用性的概念
高可用性 是在系统、组件或者应用程序发生故障时快速恢复基本服务的系统管理策略。其目的是最大程度地减少服务中断,而不是容错。用来解决关键商务操作的系统执行故障的最常见解决方案是,使用另一个系统来 等待并接管出故障的系统的负载,使商务操作继续进行下去。
术语“群集(cluster)”在不同的计算领域有着不同的含义。除非另外指明,否则本文中的 群集 都是指 heartbeat 群集,它是协作提供运行于群集内的高可用性服务的节点和资源(比如磁盘和网络)的一个集合。 如果这些机器中的一台出了故障,那么保持商业操作所需要的资源会转移到群集中另一台可用机器上。
两种主要的群集配置是:
- 备份(standby)配置:最基本的群集配置,在这种配置中,由一个节点执行任务,另一个节点只是作为备份。备份 节点不执行任务,被认为是 空闲的(idle);这种配置有时被称为 冷备份(cold standby)。 这样的配置需要高度的硬件冗余。 本系列文章关注的重点是冷备份配置。
- 接管(Takeover)配置:一种更高级的配置,在这种配置中,所有节点都执行同类任务,在某个节点出现故障时, 关键任务可以被接管。在 单边(one-sided)接管 配置中,备份节点执行一些附加的、不关键的、不可移动的任务。 在 相互接管(mutual takeover) 配置中,所有节点都执行高可用性(可移动的)任务。本系列文章没有介绍接管配置。
在建立一个高可用性群集时,必须为一些关键条目制定计划:
- 用于存储数据的硬盘必须通过私有互联结构(串行线缆)或者 LAN 连接到构成群集的服务器。
- 必须有自动检测出故障的资源的方法。这项任务由称为 心跳监控器(heartbeat monitor) 的软件组件来完成。
- 在出故障时,资源所有者必须能被自动转换为一个或更多正在工作的群集成员。
可用的 HA 软件
很多当前可用的软件都具备心跳监测和资源接管的功能。这里是可以用于不同操作系统的构建高可用性群集的软件列表 (请参阅 参考资料中的链接):
- heartbeat(Linux)
- High Availability Cluster Multiprocessing - HACMP(AIX)
- IBM Tivoli System Automation for Multiplatforms(AIX、Linux)
- Legato AAM 5.1(AIX、HP-UX、Solaris、Linux 和 Windows)
- SteelEye LifeKeeper(Linux、Windows)
- Veritas Cluster Server(AIX、HP-UX、Solaris、Linux 和 Windows)
本系列介绍的是开源 HA 软件 heartbeat。不过,您可以将在这学到的概念应用于上面的任意软件系统。
High-Availability Linux 项目和 heartbeat
名为 High-Availability Linux 的开源项目的目标是,通过社区开发努力提供一个提升 Linux 可靠性(reliability)、 可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案。Linux-HA 项目得到了广泛的应用,是很多有 趣的高可用性解决方案的重要组成部分。
heartbeat 是可以从 Linux-HA 项目 Web 站点公开获得的软件包之一。它提供了所有 HA 系统所需要的基本功能,比如 启动和停止资源、监测群集中系统的可用性、在群集中的节点间转移共享 IP 地址的所有者等。它通过串行线、以太网接口 或者同时使用二者来监测特定服务(或多个服务)的健康状况。当前版本支持两节点配置,使用专门的 heartbeat“pings”来检查 服务的状态和可用性。heartbeat 为比本文中所描述的更复杂的情形提供了基础,比如 active/active 配置,该配置中 两个节点是并行工作的,负责完成负载平衡。
要获得更多关于将 heartbeat 和项目应用在什么地方的资料,请访问 Linux-HA 项目的 Web 站点 (请参阅 参考资料中的链接)。
群集配置
这些文章中测试使用的群集配置如图 1 所示。该设置包括一对构成群集服务器(ha1 和 ha2),两者都可以访问包含多个物理 磁盘的磁盘盒;服务器处于冷备份模式。应用程序数据需要位于两个节点都可访问的共享设备上。该设备可以是一个共享磁盘,或者网络 文件系统。为了防止数据被破坏,设备本身应该被镜像或者具有数据保护。这种配置经常被称作 共享磁盘群集,不过,实际 上,这是一个什么都不共享的体系结构,因为在同一时刻任何磁盘都只能被一个节点访问。
图 1. 产品环境中的 heartbeat 群集配置
在测试设置中,我使用的共享磁盘机制是 NFS,如图 2 所示,不过,我建议使用如图 1 所示的选项,尤其是在产品环境中时。 两个系统的串口之间的直连线缆用来在两个节点间传输 heartbeat。
图 2. 使用 NFS 作为共享文件系统的 heartbeat 群集配置
表 2 给出的是我所使用的两个节点的配置。在本例中,可以通过 DNS 或者两个节点上的 /etc/hosts 文件 得到主机名和 IP 地址。
表 2. 测试群集配置
toptoptoptoptoptop
角色 | 主机名 | IP 地址 |
共享(群集) | ha.haw2.ibm.com | 9.22.7.46 |
Node1(主) | ha1.haw2.ibm.com | 9.22.7.48 |
Node2(备份) | ha2.haw2.ibm.com | 9.22.7.49 |
Node 3(未知) | ha3.haw2.ibm.com | 9.23.7.50 |
NFS 服务器 | hanfs.haw2.ibm.com | 9.2.14.175 |
建立串行连接
通过两个节点的串口,使用一根直连线缆将它们连接起来。现在测试串行连接,如下所示:
在 ha1(接收者)上输入以下内容:
cat < /dev/ttyS0
在 ha2(发送者)上输入以下内容:
echo "Serial Connection test" > /dev/ttyS0
您应该会在接收者节点(ha1)上看到这些文本。如果成功,那么互换它们的角色,重新再试一次。
建立用作共享文件系统的 NFS
如前所述,在测试设置中,我使用 NFS 在节点间共享数据。
- 节点 nfsha.haw2.ibm.com 用作 NFS 服务器。
- 文件系统 /ha 是共享的。
要设置并运行 NFS,需要执行以下操作:
- 在 nfsha 节点上创建 /ha 目录。
- 编辑 /etc/exports 文件。文件包含一个条目列表;每一个条目都指明一个卷是否是共享的,以及它是如何共享的。 清单 1 展示了我的设置中 exports 文件的相关部分。
清单 1. exports 文件
... /ha 9.22.7.48(rw,no_root_squash) /ha 9.22.7.46(rw,no_root_squash) /ha 9.22.7.35(rw,no_root_squash) /ha 9.22.7.49(rw,no_root_squash) /ha 9.22.7.50(rw,no_root_squash) ...
- 启动 NFS 服务。如果 NFS 已经在运行,那么您应该运行
/usr/sbin/exportfs -ra
命令,让 nfsd 重新读取 /etc/exports 文件。 - 在两个 HA 节点(ha1 和 ha2)上,像添加本地文件系统那样将文件系统 /ha 添加到 /etc/fstab 文件中。清单 2 展示了在我的设置中 fstab 文件的相关部分:
清单 2. fstab 文件
... nfsha.haw2.ibm.com:/ha /ha nfs noauto,rw,hard 0 0 ...
稍后,我们将配置 heartbeat 来安装该文件系统。
- 使用清单 3 中所示的命令在该文件系统上对代码示例 hahdcode.tar.gz 进行解压缩。 (首先通过下面的 下载部分下载代码示例。)
清单 3. 解开示例代码
cd /ha tar xvfz hahbcode.tar.gz
下载并安装 heartbeat
通过 参考资料中的链接下载 heartbeat,然后输入清单 4 中的命令,在 ha1 和 ha2 这两台 机器上安装它(按照给出的顺序)。
清单 4. 安装 heartbeat 的命令
rpm -ivh heartbeat-pils-1.2.2-8.rh.el.3.0.i386.rpm rpm -ivh heartbeat-stonith-1.2.2-8.rh.el.3.0.i386.rpm rpm -ivh heartbeat-1.2.2-8.rh.el.3.0.i386.rpm
配置 heartbeat
要使用 heartbeat,必须配置三个文件:authkeys、ha.cf 和 haresources。我将给出实现中我使用的具体配置; 如果需要更多资料,请参阅 heartbeat Web 站点,并阅读它们的文档(请参阅 参考资料)。
1. 配置 /etc/ha.d/authkeys
该文件确定了为群集所使用的认证密钥;两个节点上的密钥必须相同。有三种认证模式可以选择:crc、md5 或 sha1。 如果您的 heartbeat 运行在一个安全的网络上,比如例子中的交叉线缆,那么应该使用 crc。从资源的角度看,该方法的花费最低。如果您的网络不够安全,但您不是特别多疑,或者不是很关心最小化 CPU 资源的使用,那么应该使用 md5。 最后,如果您想要得到最好的认证,而不考虑 CPU 资源的使用,那么请使用 sha1,因为它最难破解。
文件的格式如下:
auth <number>
<number> <authmethod> [<authkey>]
在测试设置中,我选择的是 crc 模式。清单 5 给出了 /etc/ha.d/authkeys 文件。要确保其许可是安全的, 比如 600。
清单 5. authkeys 文件
auth 2 2 crc
2. 配置 /etc/ha.d/ha.cf
这个文件将位于安装后创建的 /etc/ha.d 目录中。它告诉 heartbeat 使用哪些类型的媒体路径以及 如何配置它们。该文件还定义了群集中的节点,以及 heartbeat 用来确认系统是否在运行的接口。 清单 6 给出了我的设置中 /etc/ha.d/ha.cf 文件的相关部分。
清单 6. ha.cf 文件
... # File to write debug messages to debugfile /var/log/ha-debug # # # File to write other messages to # logfile /var/log/ha-log # # # Facility to use for syslog()/logger # logfacility local0 # # # keepalive: how long between heartbeats? # keepalive 2 # # deadtime: how long-to-declare-host-dead? # deadtime 60 # # warntime: how long before issuing "late heartbeat" warning? # warntime 10 # # # Very first dead time (initdead) # initdead 120 # ... # Baud rate for serial ports... # baud 19200 # # serial serialportname ... serial /dev/ttyS0 # auto_failback: determines whether a resource will # automatically fail back to its "primary" node, or remain # on whatever node is serving it until that node fails, or # an administrator intervenes. # auto_failback on # ... # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node ha1.haw2.ibm.com node ha2.haw2.ibm.com # # Less common options... # # Treats 10.10.10.254 as a pseudo-cluster-member # Used together with ipfail below... # ping 9.22.7.1 # Processes started and stopped with heartbeat. Restarted unless # they exit with rc=100 # respawn hacluster /usr/lib/heartbeat/ipfail ...
3. 配置 /etc/ha.d/haresources
该文件描述的是 heartbeat 管理的资源。这些资源本质上只是一些 start/stop 脚本,非常类似于在 /etc/rc.d/init.d 中用来启动和停止资源的那些脚本。注意,heartbeat 会在 /etc/rc.d/init.d 和 /etc/ha.d/resource.d 中去寻找脚本。脚本文件 httpd 是 heartbeat 自带的。清单 7 给出了我的 /etc/ha.d/haresources 文件:
清单 7. haresources 文件
ha1.haw2.ibm.com 9.22.7.46 Filesystem::nfsha.haw2.ibm.com:/ha::/ha::nfs::rw,hard httpd
该文件在两个节点上必须相同。
这一行指出,在启动时,要实现以下操作:
- 令 ha1 为 IP 9.22.7.46 服务。
- 安装 NFS 共享文件系统 /ha。
- 启动 Apache Web 服务器。
在后面的文章中,我将向这个文件中添加更多的资源。 在关闭时,heartbeat 将执行以下操作:
- 停止 Apache 服务器。
- 卸载共享文件系统。
- 释放 IP。
这假定 uname -n
命令会显示 ha1.haw2.ibm.com;您的配置中可能只显示 ha1, 如果是那样的话,请使用 ha1。
配置 Apache HTTP 服务器的 HA
在这个步骤中,我将对 Apache Web 服务器的设置进行一些修改,使得它可以为共享系统上的文件提供服务,并为机器 ha1 和 ha2 的本地文件系统中的文件提供服务。index.html 文件(包含于代码示例中)将从共享的磁盘获得服务,而 hostname.html 文件 将从机器 ha1 和 ha2 上的本地文件系统获得服务。要实现 Apache Web 服务器的 HA,请执行以下操作:
- 以 root 身份登录。
- 在共享磁盘(/ha)上创建以下目录:
/ha/www
/ha/www/html - 在节点 ha1 上使用下面所示的命令为共享的目录设置适当的权限:
chmod 775 /ha/www
chmod 775 /ha/www/htmlLinux 上的高可用中间件,第 1 部分: heartbeat 与 Apache Web 服务器
- 在主节点机和备份节点机上,重命名 Apache Web 服务器的 html 目录:
mv /var/www/html /var/www/htmllocal - 在两台机器上使用下面的命令创建指向共享目录的符号连接:
ln -s /ha/www/html /var/www/html - 将 index.html 文件复制到节点 ha1 上的 /ha/www/html 目录:
cp /ha/hahbcode/www/index.html /var/www/html必须修改文件中的群集名称。
- 将 hostname.html 文件复制到两台机器上的 /ha/www/htmllocal 目录:
cp /ha/hahbcode/www/hostname.html /var/www/html修改这个文件中的群集名称和节点名称。
- 在两台机器上创建指向 hostname.html 文件的符号链接:
ln -s /var/www/htmllocal/hostname.html /ha/www/html/hostname.html
现在您就已经准备好测试 HA 实现了。
测试 Apaceh HTTP 服务器的 HA
要测试 Web 服务器的高可用性,请执行以下操作:
- 使用下面的命令启动主节点上的 heartbeat 服务,然后启动备份节点上的服务:
/etc/rc.d/init.d/heartbeat start如果该命令失败,那么去查看 /var/log/messages,以确定原因并进行改正。heartbeat 成功启动后,您应该看到一个新的网络接口,其 IP 地址是您在 ha.cf 文件中配置的那个 IP 地址。启动 heartbeat 之后,查看一下 主节点上的日志文件(默认是 /var/log/ha-log),确保它正在进行 IP 接管并启动 Apache Web 服务器。使用
ps
命令来确保 Web 服务器后台进程正在主节点上运行。heartbeat 将不会在备份 节点上启动任何 Web 服务进程。只是在主节点失败时才会在备份节点上启动 Web 服务进程。 - 将浏览器指向下面的 URL,以确认正确地为两个 Web 页提供了服务(如果使用了不同的主机名,那么 URL 应该有所不同):
http://ha.haw2.ibm.com/index.html
http://ha.haw2.ibm.com/hostname.html注意,在上面我使用的是群集地址,而不是主节点的地址。
对于第一个 URL,浏览器将显示下面的文本:
Hello!!! I am being served from a High Availability Cluster ha.haw2.ibm.com对于第二个 URL,浏览器将显示下面的文本:
Hello!!! I am being served from a node ha1.haw2.ibm.com in a High Availability Cluster ha.haw2.ibm.com - 在主节点上使用下面的命令仅仅停止 heartbeat 来模拟故障转移(failover):
/etc/rc.d/init.d/heartbeat stop您应该会看到,在一分钟之内,第二个节点上的所有 Web 服务器进程都会启动。如果不是那样,那么去查看 /var/log/messages 来确定问题所在并改正它。
- 将浏览器指向下面的 URL,以确认在 ha2 上正确提供了两个 Web 页的服务:
http://ha.haw2.ibm.com/index.html
http://ha.haw2.ibm.com/hostname.html对于第一个 URL,浏览器将显示下面的文本:
Hello!!! I am being served from a High Availability Cluster ha.haw2.ibm.com对于第二个 URL,浏览器将显示下面的文本:
Hello!!! I am being served from a node ha2.haw2.ibm.com in a High Availability Cluster ha.haw2.ibm.com注意,现在正在为该页提供服务的节点是 ha2。
- 重新启动主节点上的 heartbeat 服务。这样应该会停止第二节点上的 Apache 服务器进程,并在主节点上启动它们。 主节点应该同时接管群集 IP。
这样,通过将 Web 页放置在共享磁盘上,当主节点机器发生故障时,第二节点机器就可以向客户机提供其服务。故障转移 对访问 Web 页的客户机来说是透明的。该技术同样适用于提供 CGI 脚本服务。
结束语
我希望您尝试使用该技术,用廉价的硬件和立即可用的软件建立一个可用性非常高的 Web 服务器。在本系列的 下一篇文章中,您将看到如何使用 WebSphere MQ 来构建一个高可用性的消息队列服务器。
相关推荐
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
在构建高可用性网站的过程中,DRBR(Distributed Replicated Block Device)、Heartbeat以及Apache都是关键组件。本文将深入探讨这三个技术如何协同工作,确保网站服务的连续性和稳定性。 首先,DRBR是一种分布式块...
综上所述,《构建高可用Linux服务器》第四版将引导读者深入了解和掌握上述技术,从而在实际工作中构建出稳定、可靠的Linux服务器环境,满足企业的运维需求。书中可能还会探讨备份与恢复策略、安全策略以及性能优化等...
在IT行业中,Linux高可用性方案是确保关键业务系统持续运行的关键技术,尤其是在企业级服务器环境中。RHEL5(Red Hat Enterprise Linux 5)提供了高可用集群解决方案,通过Heartbeat实现集群间的通信和故障转移,以...
### VMware实验基于heartbeat的Debian Linux高可用性集群服务 #### 高可用性集群(HA Cluster)概述 在IT行业中,高可用性集群(HA Cluster)是一种关键的技术,用于确保服务的连续性和可靠性,特别是在面临单点故障的...
Linux Web服务器集群是一种高效、可扩展的解决方案,用于处理高流量网站的需求,通过将工作负载分散到多个服务器,实现负载均衡,提高系统可用性和性能。本资料主要关注Linux环境下Web服务器集群的构建与管理,以及...
[shell]# pcs resource create WebServer ocf:heartbeat:apache httpd="/usr/sbin/httpd" configfile="/etc/httpd/conf/httpd.conf" statusurl="http://localhost/server-status" op monitor interval=1min ...
本书第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于高并发和反向代理,在不多却足够使用的模块...
2. **Heartbeat**:Heartbeat是一种高可用性解决方案,主要用于监控服务器的状态,并在主服务器发生故障时,将服务无缝地切换到备份服务器上,确保服务的连续性。 #### 三、部署环境准备 - **环境拓扑**:假设有一...
在构建高可用性和负载均衡的Web服务环境中,Linux平台上的Apache HTTP Server和Tomcat应用服务器的组合是一种常见且高效的选择。本配置手册主要涉及如何在Linux(此处为Red Hat Enterprise Linux AS4 U4 64bit)上...
《决战Nginx系统卷:高性能Web服务器详解与运维》第一部分首先讲述了Nginx服务器的功能、模块管理和进程管理,然后讲述Nginx如何处理请求,在这个基础之上再认识Nginx提供的服务器的名字,Nginx服务器最大的焦点在于...
### RHEL5上使用LVS与Heartbeat实现Squid反向代理的高可用性 #### 实验背景及目的 本实验旨在RHEL5(Red Hat Enterprise Linux 5)操作系统上构建一个基于LVS(Linux Virtual Server)和Heartbeat的高可用性Squid...
根据给定文件的信息,我们可以提炼出关于Haproxy+Heartbeat高可用集群方案的核心知识点,并对这些知识点进行详细的阐述。 ### Haproxy+Heartbeat 高可用集群方案 #### 一、Haproxy简介 Haproxy是一款免费、快速且...
利用VMware 实验基于heartbeat 的Debian Linux 高可用性集群服务
《构建高可用 Linux 服务器(第3版)》是一本专为系统管理员和技术专业人士准备的指南,旨在帮助读者掌握如何构建稳定、可靠且高效的Linux服务器环境。本书详细讲解了在Linux环境中实现高可用性的关键技术和实践策略,...
HeartBeat是一个开源项目,属于Linux-HA项目的一部分,它主要负责监控集群节点间的通信状态,并在检测到主节点失效时,将控制权转移到备份节点,实现服务的无缝切换。在CentOS 7中,HeartBeat已经演进为Pacemaker和...
### 建基于Linux具有高可用性的集群环境 #### 高可用性概念 高可用性(High Availability,简称HA)是指计算机系统能够提供不间断的服务能力,确保即使在单个组件出现故障时,整个系统仍然能够正常运行。对于企业...