本节介绍的双机热备包括两个数据库服务器以及存放在共享存储器中的数据库文件。在本案例中,主 / 备用服务器共享同一份数据库文件。通常情况下,数据库文件挂在主服务器上,供主服务器进行访问。当主服务器发生故障时,数据库文件转而挂在备用服务器上,通过备用服务器提供数据,以保证服务的可用性。
该集群的详细构成(如图 2.5 所示)为:
什么是心跳线?
心跳线是用于连接主机和备用机的连线。集群管理软件通过心跳线来监测集群中节点的运行状态。
节点名 | 说明 | IP 地址 |
Primary | 主服务器 | 192.168.168.131 |
Standby | 备用服务器 | 192.168.168.135 |
Nfsserver | NFS 文件服务器 | 192.168.168.129 |
集群 IP | 集群虚拟地址 | 192.168.168.100 |
1 .设置 IP 表(/etc/hosts)
hosts 文件用于将主机名称映射到 IP 地址。为了方便后面的连接,将三个物理节点的主机名与其 IP 间建立映射。打开 /etc/hosts 文件,将各个节点的 IP 地址与节点名追加进去(在三台机器上都要做同样的配置)。编辑完成的 hosts 文件如图 2.6 所示。
Hosts 是什么文件?
Hosts,域名解析文件。对于要经常访问的 IP 地址,我们可以通过在 Hosts 中配置主机名和 IP 的映射关系,这样以后访问的时候只要输入这个服务器的名字就行了。
保存设置后,打开一个 Terminal 然后执行下面的命令以确认节点名与 IP 地址的映射结果。
# ping Primary # ping Standby # ping Nfsserver |
2 .建立串口连接
高可用性集群系统中,当主节点发生故障时,备用节点要及时监测到这个故障并接替主节点的工作。因此,主备用节点的互相监听成为集群系统中必不可少的功能。Heartbeat 软件可以通过多种方式监听主 / 备用服务器,串口连接是其中比较简单的一种。
用一根串行线将 Primary 和 Standby 两个节点连接起来,并确认连接状况。
在 Standby 节点上执行命令:
# cat < /dev/ttyS0 |
在 Primary 节点上执行命令:
# echo "Connection test" > /dev/ttyS0 |
上面的命令是从 Primary 节点上通过串行端口,发送消息给 Standby 节点。如果在 Standby 上能得到该消息,则证明串口连接成功。如图 2.7 所示。
3 .配置 NFS 文件服务器
在本解决方案中,NFS 文件服务器用于存放 DB2 数据库文件。通常情况下只有主数据库节点连接 NFS 文件服务器,进行数据库的读写操作。当主数据库服务器出现故障时,heartbeat 软件会断开 NFS 文件服务器与主节点间的连接,而连接到备用服务器上。同时备用节点的数据库服务器也启动起来,继续为客户提供服务。
什么是 NFS ?
NFS(Network File System)网络文件系统,用于设置 Linux/Unix 系统之间的文件共享。NFS 既是一种文件系统,也是一个网络协议。
Nfsserver 节点的配置过程如下:
(1)在 Nfsserver 上创建用于共享的目录 /database:
# mkdir /database |
(2)修改 /etc/exports 文件,以说明要共享的目录和共享的方式。/etc/exports 是一个访问控制列表,定义了可以被 NFS 客户端访问的路径。/etc/exports 文件的格式为:
[ shared_path ] [ nfs_client (parm,parm)] |
其中:
本例中,如下设置 /etc/exports 文件(如图 2.8),对 Primary 和 Standby 节点赋予对 /database 的读写权限。
(3)启动 NFS 服务。
# /etc/rc.d/init.d/nfs restart
如果 NFS 服务已经在运行,也可以不用重新启动 NFS 服务,直接采用 exports 命令即可重新导出共享目录。该命令格式如下:
exportfs [-aruv] |
其中:
什么是 mount ?
如果想在 Linux 服务器中访问文件系统的资源,就要用 mount 命令来实现。mount 的基本语法为:mount [- 参数 ] [ 设备名称 ] [ 挂载点 ]。
例如,可以执行下面的命令发布共享目录。
# /usr/sbin/exportfs – a |
(4)客户机配置。分别在 Primary 和 Standby 上挂载该共享文件。
# mkdir /database # mount Nfsserver:/database /database |
如果执行 mount 时收到如图 2.9 所示的消息,说明 NFS 服务未启动,可以执行 /etc/rc.d/init.d/nfs restart 来重启 NFS 服务。
执行 df 命令确认 Nfsserver/database 被正确挂载。df 命令用来检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。效果如图 2.10 所示。
4 .创建数据库
(1)创建用户(两个节点上都要创建)。DB2 用户的创建,既可以使用第 1 章介绍的图形管理工具,也可以使用命令行。在 Linux 命令行创建 DB2 用户的命令为 useradd。useradd 命令的基本语法为:
useradd [-d home_dir] [-g initial_group] [-m ] [-u uid] [username] |
其中:
本例中,要创建 db2ha1 用户,其所属群组为 db2iadm1,主目录为 /home/db2ha1。 该命令如下所示:
# useradd – u 504 – g db2iadm1 – m – d /home/db2ha1 db2ha1 |
(2)DB2 用户创建完成后,接下来在两个节点上创建 DB2 实例 db2ha1。
# db2icrt – u db2fenc1 db2ha1 |
(3)在 Primary 上以 db2ha1 登录,启动 db2ha1 实例,然后创建数据库 HADB,路径为 /database。其中,/database 路径是 Nfsserver 节点上 /database 目录的本地映射。
# su – db2ha1 $ db2start $ db2 create database HADB on /database |
创建成功后,断开到 HADB 的连接,并停止 db2ha1 实例。
# db2 connect reset # db2stop |
(4)在 Standby 节点上,以 db2ha1 登录,并编目 /database 目录下的 HADB 数据库。
# su – db2ha1 $ db2start $ db2 catalog database HADB on /database |
编目 HADB 后,用 db2 connect 命令连接到 HADB 上以确认创建是否成功。如果收到下面的信息,表示编目成功(如图 2.11)。
断开连接,停止 DB2 管理服务器。
$ db2 connect reset $ db2stop |
5 .配置集群软件
(1)下载 Heartbeat(见图 2.12)。登录 http://clusterlabs.org,针对相应的 Linux 版本选择 Heartbeat 的不同版本(本文中的 Linux 系统是 Cent OS 5.0.2)。
(2)安装依赖包。在 Heartbeat 安装之前,要先安装两个软件包:perl-TimeDate 和 perl-MailTools。
perl-TimeDate 是用来提供时间日期函数的 perl 模块;perl-MailTools 是一组 mail 相关的 perl 模块。由于 Heartbeat 的脚本是用 perl 脚本书写的,所以需要安装这两个软件包。
#yum install perl-TimeDate #yum install perl-MailTools |
yum 是什么?
yum(Yellowdog Updater, Modified)是一个软件管理系统,它能自动解决安装包的依赖性问题,使得添加 / 删除 / 更新软件包更加方便。关于软件包的依赖性问题,可以参考下面使用 rpm 来安装 Heartbeat 的过程。
(3)安装 Heartbeat。因为安装包之间的依赖关系,按照图 2.13 所示顺次安装 Heartbeat。
(4)拷贝 /usr/share/doc/packages/heartbeat 路径下的示例文件 ha.cf,authkeys 和 haresources 文件至 /etc/ha.d。
01 # cd /usr/share/doc/packages/heartbeat 02 # cp authkeys /etc/ha.d 03 # cp haresources /etc/ha.d 04 # cp ha.cf /etc/ha.d |
不同版本或安装方式下,Heartbeat 示例文件的路径可能有所不同,可用“rpm – q”命令来确定该文件的位置(如图 2.14)。
(5)配置 authkeys 文件。/etc/ha.d/authkeys 文件定义了集群的认证密钥,集群中的所有节点必须有相同的认证密钥。编辑 /etc/ha.d/authkeys 文件,取消下面两行内容前的注释符号:
## /etc/ha.d/authkeys auth 1 1 crc |
其中:
Heartbeat 的加密方式
Heartbeat 目前支持 3 种加密方式:crc,sha1 和 md5。其中 crc 的方式最简单,安全性也最低。
确保 authkeys 文件只能由 root 读取,将该文件的属性设为 600。
# chmod 600 authkeys |
(6)配置 ha.cf 文件。/etc/ha.d/ha.cf 文件定义了 Heartbeat 集群中的节点,以及 Heartbeat 用来监测系统运行状况的端口等配置。ha.cf 文件中可配置的内容如下:
uname 是什么?
uname 是显示系统信息的命令。uname – n 显示在网络上的主机名称。
本例中,/etc/ha.d/ha.cf 文件的相关设置如下:
01 ## /etc/ha.d/ha.cf 02 serial /dev/ttyS0 03 auto_failback on 04 node Primary 05 node Standby 06 use_logd yes 07 crm yes |
其中,node 中指定的 Primary/Standby 已经在 /etc/hosts 中定义过了。
(7)配置 Haresources 文件。Heartbeat 使用 Haresources 配置文件决定它首次启动时做些什么。Haresources 文件的内容为:
node-name network-config <resource-group> |
其中:
本例中,如下指定 Haresources 文件:
## /etc/ha.d/haresources Primary 192.168.168.100 Filesystem::Nfsserver:/database::/database::nfs::rw, hard db2::db2ha1 |
这一行指出,在启动 Heartbeat 时,要实现以下操作:
在 Heartbeat 关闭时,Heartbeat 将执行以下操作:
在 Heartbeat 2.x 版本以后,Heartbeat 的资源配置文件采用了 XML 格式。为了方便不熟悉 XML 的用户使用,Heartbeat 自带了一个从 Haresources 生成 cib.xml 配置文件的工具。因此要将上面做成的 Haresource 文件进行如下转换:
# /usr/lib/heartbeat/haresources2cib.py – stout – c /etc/ha.d/ha.cf /etc/ha.d/haresources |
该命令把原来的资源文件 /etc/ha.d/haresources 转换成新的 XML 格式的配置文件 /var/lib/heartbeat/crm/cib.xml。
(8)将 Primary 节点上的配置文件复制到 Standby 节点上。向远程节点复制文件可以使用命令 SCP。SCP(Secure Copy)是 Linux 文件传送命令,用于在两台服务器间传送文件,格式为:
SCP 文件名 1 远程用户名 @ 远程节点名 : 文件名 2 |
命令的执行过程中会要求输入远程用户名的登录密码。本例中,执行下面的命令:
# cd /etc/ha.d # scp ha.cf authkeys haresources root@Standby:/etc/ha.d #scp /var/lib/heartbeat/crm/cib.xml root@Standby:/var/lib/heartbeat/crm |
6 .启动集群
(1)在 Primary 上启动 Heartbeat。Heartbeat 启动前,Primary 节点上的目录挂载和 IP 地址的分配情况如图 2.15 所示。NFS 共享文件系统 (/database 目录 ) 和集群的虚拟 IP(192.168.168.100)都没有挂载在节点上。
利用 heartbeat start 命令来启动 Primary 节点上的 Heartbeat(如图 2.16 所示)。系统返回的消息显示 Primary 上 Heartbeat 已经成功启动。
(2)查看 Primary 节点集群状态。查看集群的状态可以使用 crm_mon 命令,其基本语法为:
crm_mon [ -i interval ] | [ -r] [ -h filename ] |
其中:
本例中,将刷新的间隔设定为 5 秒:
# crm_mon – i5 |
图 2.17 中显示了集群的状态,对其中的几个项目进行说明:
本例中,集群有 1 个组成节点(Primary)和 1 个资源组(group_1),提供了集群 IP、文件系统和 DB2 数据库服务。
此时,再次查看 Primary 节点上的目录挂载和 IP 地址的分配情况(如图 2.18)。从中可以看出,NFS 共享目录(Nfsserver:/database)已经挂载在 Primary 节点上,集群虚拟 IP(192.168.168.100)也已经绑定在 Primary 节点上。
(3)在 Standby 上启动 Heartbeat。同 Primary 节点一样,在 Standby 节点上打开一个 Terminal,执行下面的命令:
# /etc/init.d/heartbeat start |
(4)查看 Standby 节点集群状态。在 Standby 节点上执行下列命令以查看集群状态:
# crm_mon – i5 |
在集群资源监视窗口,可以看到集群的状况发生了下面的变化:
尽管 Standby 节点加入到了集群中,提供虚拟 IP、Nfs 共享资源即 DB2 数据库服务的节点仍然是 Primary(如图 2.19)。
查看 Standby 节点上 NFS 共享目录的挂载和集群的虚拟 IP 地址的分配情况,可以证实上面的结果(见图 2.20)。
7 .服务接管
(1)停止 Primary 节点上的 Heartbeat。使用下面的命令来停止 Primary 节点上的 Heartbeat。
# /etc/init.d/heartbeat stop |
(2)查看集群状态。执行下面的命令以查看集群的状况(如图 2.21):
# crm_mon – i5 |
可以看到,集群的状况发生了下列变化:
此时虚拟 IP、NFS 路径挂载、DB2 服务都转移到了 Standby 节点上。到 Standby 节点上查看节点的挂载目录(如图 2.22)和 IP 地址(如图 2.23),也证实了上面的结果。
(3)此时重新启动 Primary 节点的 Heartbeat,并查看集群的状态(如图 2.24)。
# /etc/init.d/heartbeat start # crm_mon – i5 |
因为之前将 auto_failback 参数设置为 on,因此服务再次被 Primary 节点接管。集群的状况发生了下列变化:
首先在 Primary 节点上插入数据,然后由 Standby 节点接管服务,在 Standby 上查询插入的数据来检验集群的创建。
(1)启动 Primary 节点上的 Heartbeat。
# /etc/init.d/heartbeat start |
(2)用 db2ha1 登录 Primary 节点,启动实例 db2ha1,然后连接 HADB 并创建测试表 Test,并插入一条记录。
01 # su – db2ha1 02 # db2start 03 # db2 connect to HADB 04 # db2 05 db2 => create table test(msg char(5),message char(20)) 06 db2 => insert into test values( ‘ msg01 ’ , ’ Hello Cluster ’ ) |
(3) 启动 Standby 节点的 Heartbeat,并停止 Primary 节点上的 Heartbeat。在 Standby 节点上执行下面的命令:
# /etc/init.d/heartbeat start |
在 Primary 节点上执行下面的命令:
# /etc/init.d/heartbeat stop |
查看集群状态,使用下面的命令:
# crm_mon – i5 |
在集群资源管理器中确认提供服务的节点从 Primary 转移到了 Standby。
(4)用 db2ha1 登录 Standby 节点,启动实例 db2ha1,然后连接 HADB 并查询 Test 表的内容。
01 # su – db2ha1 02 # db2start 03 # db2 connect to HADB 04 # db2 05 db2 => select * from test |
抽出来的 Test 表中的数据(见图 2.25)与在 Primary 节点上插入的一致,证明集群创建成功。
1 .在 ha.cf 文件中配置了两个节点,为何用 crm_mon 对集群进行监视的时候,两个节点互相“视而不见”?
首先,请确认一下 /etc/hosts 文件的配置是否正确。/etc/hosts 文件中定义的节点名应该和“uname -n”命令输出的一致,如果出现不一致,节点间便可能无法正确连接。可以用下面的命令确认 /etc/hosts 文件的配置:
# ping hostname |
其中的 hostname 为远程的主机名。
如果 /etc/hosts 文件没有问题,节点间可以用 ping 命令连接,却在集群资源管理器中无法发现对方,最可能的原因就是防火墙的设置。用户可以先试着停掉防火墙,再观察能否监视到对方。停掉防火墙的命令为:
# service iptables stop |
防火墙的设置导致不能互相连接是一个常见的问题,在后面的章节中也会碰到。
2 .如果两台机器间不用串口连接的方式传递“心跳”信号,还可以用什么方式?
除了串口连接之外,还有多种方式传递“心跳”信号。如用户也可以为每台机器配置两个网卡。其中一个网卡为外界提供服务,另一个网卡用于集群节点间的连接。重新配置一下 ha.cf 文件,心跳线的连接方式由串口连接(serial /dev/ttyS0)改为广播的方式(bcast eth1)即可。
3 .为什么定义的资源不能启动,而且没有任何错误提示?
Heartbeat 通过 perl 脚本来启动相应的资源,如果资源无法启动,很有可能是该资源对应的脚本文件不正确。用户可以查看 /etc/init.d 目录或 /etc/ha.d/resource.d 目录下相应的脚本文件。详见 http://wiki.linux-ha.org/HeartbeatResourceAgent。
本章首先介绍了集群。集群是一组计算机合起来提供一项服务的架构。通过集群,可以提高应用系统的计算速度或可用性。
其次,介绍了集群的可用性,主要包括共享存储和独立存储。共享存储模式是双机热备的最常见方案,实施简单、管理方便。此外,还介绍了一个利用 Heartbeat 软件实现的高可用性集群的配置实例。
独立存储的解决方案主要有 3 种:数据复制选项、日志传送选项和高级存储选项。独立存储方式投资较大,但数据的可靠性大大提升,详细的配置实例参见本书第 3 章“DB2 高可用性灾难恢复”的相关内容。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论