web服务器 apache
维持最大的系统正常运行时间对于按需计算的成功至关重要。 不幸的是,许多用于高可用性(HA)的现成解决方案都很昂贵,并且需要专业知识。 本系列的五篇文章为使用公开可用的软件实现HA服务提供了一种低成本的替代方法。
本系列中的分步过程显示了如何在Linux™上构建高可用性的Apache Web服务器,WebSphere®MQ队列管理器,LoadLeveler集群,WebSphere Application Server集群和DB2®通用数据库。 系统管理员可以以最少的时间投入学习使用和维护该系统。 本系列中描述的技术也适用于Linux上的任何数量的服务。
要充分利用本系列文章,您应该对WebSphere MQ,WebSphere Application Server,IBM LoadLeveler,DB2通用数据库和高可用性集群有基本的了解。
在关键业务或关键任务环境中使用任何软件产品都需要考虑可用性 ,即衡量系统完成预期功能的能力,即使存在崩溃,设备故障和环境事故的情况。 随着越来越重要的商业应用程序转移到Internet上,提供高可用性服务变得越来越重要。
本文重点介绍了在实施HA解决方案时可能遇到的实施问题。 我们将回顾HA概念,可用的HA软件,要使用的硬件以及有关心跳的安装和配置详细信息(Linux的开源HA软件),并且我们将了解如何使用心跳使Web服务器变得高度可用。
硬件要求
本系列中描述的测试方案需要以下硬件:
- 四个支持Linux并带有以太网网络适配器的系统
- 一个共享的外部SCSI硬盘驱动器(双尾磁盘)
- 一根IBM串行零调制解调器电缆
在我的设置中,我使用了具有1 GB RAM的IBM eServer™xSeries®335计算机。 对于共享磁盘,我将其中一台计算机用作NFS服务器。 完整设置的软件要求如下,尽管对于本文而言,您仅需要Red Hat Enterprise Linux和检测信号:
- 红帽企业版Linux 3.0(2.4.21-15.EL)
- 心跳1.2.2
- IBM Java 2 SDK 1.4.2
- 带有修订包7的WebSphere MQ for Linux 5.3.0.2
- 适用于Linux 3.2的LoadLeveler
- 适用于Linux的WebSphere Base Edition 5.1.1(具有累积修订1)
- 具有Fixpack 1的Linux的WebSphere ND 5.1
- DB2通用数据库企业服务器版8.1 Linux
您可以通过下载下面的“ 下载”部分中列出的代码包来获得测试方案。 表1描述了hahbcode.tar.gz中的目录。
表1.示例代码包中的内容
目录 | 内容 |
---|---|
心跳 | 心跳的样本配置文件 |
万维网 | 用于测试HA for Apache Web ServerHTML文件 |
平方米 | WebSphere MQ HA的脚本和代码:
|
加载 | 用于将LoadLeveler作为Linux服务启动和停止的loadl文件 |
原为 | WebSphere Application Server HA的脚本和代码:
|
db2 | 用于检查数据库可用性,创建表,在表中插入行以及从表中选择行的脚本 |
高可用性概念
高可用性是系统管理策略,可在系统,组件或应用程序发生故障时快速恢复基本服务。 目标是最小化服务中断,而不是容错。 对于执行关键业务操作的系统故障,最常见的解决方案是让另一个系统等待承担发生故障的系统的工作负载并继续业务操作。
术语“集群”在计算行业中具有不同的含义。 在整个本文中,除非另有说明,否则群集描述心跳群集 ,它是节点和资源(例如磁盘和网络)的集合,这些节点和资源协作以提供在群集中运行的服务的高可用性。 如果其中一台计算机发生故障,则维持业务运营所需的资源将转移到群集中的另一台可用计算机上。
群集的两个主要配置是:
- 备用配置:最基本的群集配置,其中一个节点执行工作,而另一个节点仅充当备用。 备用节点不执行工作,称为空闲 ; 这种配置有时称为冷备用 。 这种配置需要高度的硬件冗余。 本系列文章重点介绍冷备用配置。
- 接管配置:一种更高级的配置,其中所有节点都执行某种工作,并且在节点发生故障时可以接管关键工作。 在单面接管配置中,备用节点执行一些其他的,非关键的,不可移动的工作。 在相互接管配置中,所有节点都在执行高可用性(可移动)工作。 本系列文章不涉及接管配置。
设置高可用性群集时,您必须计划几个关键项目:
- 用于存储数据的磁盘必须通过专用互连(串行电缆)或LAN连接到组成群集的服务器。
- 必须有一种自动检测故障资源的方法。 这由称为心跳监视器的软件组件完成。
- 一旦发生故障,必须将资源所有权自动转移给一个或多个尚存的集群成员。
可用的HA软件
当前可用的许多软件都执行心跳监视和资源接管功能。 这是在各种操作系统上构建高可用性群集的可用软件的列表(请参阅参考资料中的链接):
- 心跳(Linux)
- 高可用性集群多处理-HACMP(AIX)
- IBM Tivoli多平台系统自动化(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软件的心跳。 但是,您可以将此处学习的概念应用于上述任何软件系统。
高可用性Linux项目和心跳
名为High-Availability Linux的开源项目的目标是为Linux提供一个群集解决方案,以通过社区开发来提高可靠性,可用性和可维护性(RAS)。 Linux-HA项目被广泛使用,并且是许多有趣的高可用性解决方案中的重要组件。
Heartbeat是Linux-HA项目网站上公开可用的软件包之一。 它提供了任何HA系统所需的基本功能,例如启动和停止资源,监视群集中系统的可用性以及在群集中的节点之间转移共享IP地址的所有权。 它通过串行线或以太网接口或两者同时监视特定服务的运行状况。 当前版本支持两节点配置,其中特殊的心跳“ ping”用于检查服务的状态和可用性。 与本系列文章中描述的场景(例如主动/主动配置)(其中两个节点并行工作并执行负载平衡)相比,心跳为更复杂的场景提供了基础。
有关心跳和使用心跳的项目的更多信息,请访问Linux-HA项目网站(请参阅参考资料中的链接)。
集群配置
这些文章的测试集群配置如图1所示。该设置由一对集群服务器(ha1和ha2)组成,这两个集群服务器都可以访问包含多个物理磁盘的共享磁盘盒。 服务器处于冷待机模式。 应用程序数据必须位于两个节点都可以访问的共享设备上。 它可以是共享磁盘或网络文件系统。 设备本身应进行镜像或具有数据保护功能,以避免数据损坏。 这种配置通常称为共享磁盘群集 ,但实际上是无共享架构,因为一次没有一个节点可以访问多个磁盘。
图1.生产环境中的心跳群集配置
对于测试设置,我建议使用NFS作为共享磁盘机制,如图2所示,尽管我建议使用图1所示的选项,尤其是在生产环境中。 连接在两个系统的串行端口之间的零调制解调器电缆用于在两个节点之间传输心跳。
图2.使用NFS共享文件系统的心跳群集配置
表2显示了我用于两个节点的配置。 在您的情况下,两个节点上的DNS或/ etc / hosts文件都应知道主机名和IP地址。
表2.测试集群配置
角色 | 主机名 | IP地址 |
---|---|---|
共享(集群)IP | ha.haw2.ibm.com | 9.22.7.46 |
节点1(主节点) | ha1.haw2.ibm.com | 9.22.7.48 |
Node2(备份) | ha2.haw2.ibm.com | 9.22.7.49 |
节点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显示了我的安装程序导出文件的相关部分。
清单1.导出文件
... /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节点上,将文件系统/ ha添加到/ etc / fstab文件中,方法与本地文件系统相同。 清单2显示了我的设置中fstab文件的相关部分:
清单2. fstab文件
... nfsha.haw2.ibm.com:/ha /ha nfs noauto,rw,hard 0 0 ...
稍后,我们将配置心跳以挂载此文件系统。
- 使用清单3中所示的命令在此文件系统上提取代码示例hahbcode.tar.gz。(首先从下面的“ 下载”部分下载代码示例。)
清单3.提取示例代码
cd /ha tar xvfz hahbcode.tar.gz
下载并安装心跳
使用该链接下载心跳相关信息 ,然后通过清单4中输入命令两个HA1和HA2机器上安装它(在顺序给出)。
清单4.用于安装心跳的命令
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
配置心跳
您必须配置三个文件才能使心跳正常工作:authkeys,ha.cf和haresources。 我将向您展示我用于此实现的特定配置。 如果需要更多信息,请参考心跳网站并阅读其文档(请参阅参考资料 )。
1.配置/etc/ha.d/authkeys
该文件确定您对集群的身份验证密钥。 两个节点上的密钥必须相同。 您可以从三种身份验证方案中选择:crc,md5或sha1。 如果您的心跳通过安全网络(例如示例中的交叉电缆)运行,则需要使用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目录中。 它告诉心跳使用什么类型的媒体路径以及如何配置它们。 该文件还定义了群集中的节点以及心跳用于验证系统是否启动的接口。 清单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
此文件描述了由心跳管理的资源。 资源基本上只是启动/停止脚本,就像/etc/rc.d/init.d中用于启动和停止资源的脚本一样。 请注意,心跳将在/etc/rc.d/init.d和/etc/ha.d/resource.d中查找脚本。 脚本文件httpd带有心跳。 清单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服务器
在以后的文章中,我将向该文件添加更多资源。 关机时,心跳将:
- 停止Apache服务器
- 卸载共享文件系统
- 放弃IP
假设命令uname -n
显示ha1.haw2.ibm.com; 您可能会产生ha1,如果确实如此,请改用它。
为HA配置Apache HTTP服务器
在这一步中,我将对Apache Web服务器设置进行一些更改,以便它将服务于共享系统以及两台机器ha1和ha2本地的文件系统中的文件。 index.html文件(包含在代码示例中)将通过共享磁盘提供,hostname.html文件将通过ha1和ha2机器上的本地文件系统提供。 要为Apache Web服务器实现HA:
- 以root身份登录。
- 在共享磁盘(/ ha)上创建以下目录:
/公顷/ www
/ ha / www / html - 使用以下在节点ha1上显示的命令在共享目录上设置适当的权限:
chmod 775 /ha/www
chmod 775 /ha/www/html - 在主计算机和备份计算机上,重命名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的实现了。
测试Apache HTTP服务器的HA
要测试Web服务器的高可用性:
- 使用以下命令在主节点上然后在备份节点上启动心跳服务:
/etc/rc.d/init.d/heartbeat start
如果失败,请在/ var / log / messages中查找原因,然后更正。 心跳成功启动后,您应该会看到一个具有在ha.cf文件中配置的IP地址的新网络接口。 一旦开始心跳,请看一下主数据库上的日志文件(默认为/ var / log / ha-log),并确保它正在进行IP接管,然后启动Apache Web服务器。 使用
ps
命令确保Web服务器守护程序正在主节点上运行。 心跳将不会在备份上启动任何Web服务器进程。 仅在主服务器失败后才会发生这种情况。 - 通过将浏览器指向以下URL来验证ha1节点上是否正确地提供了两个网页(如果使用不同的主机名,您将有所不同):
http://ha.haw2.ibm.com/index.html
http://ha.haw2.ibm.com/hostname.html请注意,我在上面的URL中使用群集地址,而不是主节点的地址。
浏览器应为第一个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
- 使用以下所示的命令,只需在主系统上停止心跳即可模拟故障转移:
/etc/rc.d/init.d/heartbeat stop
您将在一分钟之内看到所有Web服务器进程在第二台计算机上启动。 如果没有,请查看/ var / log / messages以确定问题并纠正。
- 通过将浏览器指向以下URL,验证ha2节点上是否正确提供了两个网页:
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。
- 重新在主数据库上重新启动心跳服务。 这应该在辅助服务器上停止Apache服务器进程,然后在主服务器上启动它们。 主服务器还应接管群集IP。
因此,通过将网页放在共享磁盘上,辅助计算机可以在主要计算机出现故障的情况下将它们提供给客户端。 故障转移对客户端访问网页是透明的。 该技术也可以应用于服务CGI脚本。
结论
我希望您会尝试使用此技术,以使用廉价的硬件和易于使用的软件来设置非常高可用性的Web服务器。 在本系列的下一篇文章中,您将看到如何使用WebSphere MQ构建高可用性消息队列管理器。
翻译自: https://www.ibm.com/developerworks/opensource/library/l-halinux/index.html
web服务器 apache