级别: 中级 |
高级软件工程师, IBM Watson Research Center
25 日 7 月 2005 年
数据是所有业务的心脏,对数据的访问的宕机时间应该维持在最少。在本文中,我们将来了解一下如何使用 IBM DB2® Universal Database® 设置并实现一个 Linux ™ 的高可用解决方案,DB2 是一个数据库管理系统,可以为构建健壮的、随需应变的业务应用程序提供一个灵活而又节约成本的数据库平台。使用这个详细的指南,您可以设置并运行一个高可用的 DB2 UDB 数据库。
数据是现代随需应变业务的血液;存储和移动数据的系统(服务器、网络、数据库)是这个系统的心脏。但是如果没有 heartbeat —— 对这些数据具有可靠而快速的访问,且宕机时间最少 —— 那么这两者都是惰性组件。
简介
本系列的第一篇文章 Linux 上的高可用中间件,第 1 部分:Heartbeat 和 Apache Web 服务器 简要介绍了高可用(HA)的概念,以及如何安装并配置 heartbeat。本篇文章是本系列的最后一篇文章,它将介绍如何在一个 冷备份(cold standby) 配置中使用 heartbeat 为 DB2 UDB 8.1 实现一个 HA 方案。
关于 heartbeat |
在这种实现中,heartbeat 会检测主节点的失效情况,并发起故障迁移的过程:
为了最好地理解本文的内容,您需要对 DB2 UDB 和高可用集群有一个基本的理解。本系列的第一篇文章 介绍了对于软件的高可用性来说这意味着什么,以及如何在一个两节点的系统上使用 High-Availability Linux 项目安装并设置 heartbeat 软件。
DB2 UDB 和 HA 基础
在 heartbeat 集群中使用的任何 DB2 UDB 都必须将数据全部存放在共享磁盘上,这样在发生节点失效的情况时,就可以在依然存活的机器上访问这些数据。运行数据库实例的节点还必须在内部磁盘上维护很多文件。这些文件包括与节点上的所有数据库有关的文件。
与数据库实例有关的文件会被分别存放在内部磁盘和外部磁盘上。图 1 详细介绍了 DB2 文件系统的组织,它介绍了在我们的测试中针对实例 db2inst1 和数据库 hadb 的设置。
图 1. DB2 对实例 db2inst1 和数据库 hadb 的高可用设置
在该设置中:
安装数据库
按照本节中介绍的步骤在主节点和备用节点上安装 DB2 UDB 8.1。更多信息,请参考 DB2 Information Center(参阅 参考资料):
|
export LD_ASSUME_KERNEL=2.4.19
。
|
./db2setup
。 在这个向导中,使用下面的信息:
表 1. 安装 DB2 使用的组名/ ID、用户名/ ID
组名 | GID | 用户名 | UID |
dasadm1 | 2001 | dasusr1 | 2001 |
db2grp1 | 2002 | db2inst1 | 2002 |
db2fgrp1 | 2003 | db2fenc1 | 2003 |
创建一个高可用的数据库
按照下面的步骤创建高可用的数据库 hadb:
su - db2inst1
。 db2iauto
工具启动:
|
#fmc:2345:respawn:/opt/IBM/db2/V8.1/bin/db2fmcd #DB2 Fault Monitor Coordinator
。 db2start
。 mount /ha
。 db2 create database hadb on /ha
。 db2 connect to hadb
。如果成功,就使用这个命令断开连接:db2 connect reset
。 db2stop
命令停止 DB2。 mount /ha
。 db2start
。 db2 catalog database hadb on /ha
。 db2 connect to hadb
命令,确保可以连接到数据库 hadb 上。如果成功,就使用 db2 connect reset
命令断开连接。 db2stop
命令停止 DB2。 配置 heartbeat 来管理 DB2
现在配置 /etc/ha.d/haresources 文件(在主节点和备用节点上都要进行),使其包括管理 DB2 进程的脚本。这个脚本是由 heartbeat 提供的。
修改文件的一部分如下所示:
|
这一行说明在启动 heartbeat 时,hal 使用集群的 IP 地址,挂载共享文件系统,并启动数据库服务器。在停止服务器时,heartbeat 首先要停止数据库服务器,然后卸载共享文件系统,最后放弃 IP 地址。
测试 DB2 UDB 的故障迁移
本节将介绍如何对高可用的 DB2 数据库 hadb 进行测试。这可能是本文中所介绍的最为棘手的一项工作,因此要仔细阅读以下的内容。
在主节点上启动 heartbeat 服务,然后在备用节点上也启动 hartbeat 服务。您可以以 root 用户的身份执行 /etc/rc.d/init.d/heartbeat start
命令。
在成功启动 heartbeat 之后,您应该会看到一个新的接口,它使用了您在 ha.cf 文件中配置的 IP 地址。在启动 heartbeat 之后,可以看一下主节点上的日志文件(默认是 /var/log/ha-log),并确保它正在进行 IP 接管,然后又启动了 DB2。使用 ps
命令确保 DB2 进程正在主节点上运行。heartbeat 将不能在备用节点上启动任何上述进程,这只能在主节点失效之后才会发生。
db2 -tf /ha/hahbcode/db2/listdb.sql
。这个命令的输出如下所示:
|
db2 -tf /ha/hahbcode/db2/createdb.sql
。 db2 -tf /ha/hahbcode/db2/insertdb.sql
。 db2 -tf /ha/hahbcode/db2/selectdb.sql
。您应该可以看到在上一个步骤中插入的数据行。运行的结果如下:
|
/etc/rc.d/init.d/heartbeat stop
。您应该会看到在备用节点上,所有的服务都在一分钟之内启动起来了。您可以通过检查 /var/log/ha-log 文件的内容并在备用节点上使用 ps
命令来确认 DB2 正在备用节点上运行。 db2 -tf /ha/hahbcode/db2/listdb.sql
。这个命令的输出如下所示:
|
db2 -tf /ha/hahbcode/db2/selectdb.sql
。您应该可以看到当 DB2 在节点 ha1 上运行时所插入的数据。我们运行的结果如下:
|
db2 -tf /ha/hahbcode/db2/insertdb.sql
。 /etc/rc.d/init.d/heartbeat start
。您应该会看到所有的服务器在一分钟之内都在主节点上启动起来了。您可以通过检查 /var/log/ha-log 文件的内容并在主节点上使用 ps
命令来确认 DB2 正在主节点上运行。 db2 -tf /ha/hahbcode/db2/selectdb.sql
。您会看到这个表中包含两行数据了。我们运行的结果如下:
|
这说明在从备用节点到主节点进行故障迁移时,数据得以维护下来了。
结束语
关键的数据库应用程序都需要一种健壮的策略来防止数据丢失,并保证数据存储的高可用性。DB2 UDB 简化了具有高可用特性的大型数据库的管理。
在这篇文章中,您已经看到了如何使用开源软件和廉价的硬件来简单而且低成本地为 DB2 UD 数据库实现一个 HA 的方案。