WEB开发网
开发学院数据库DB2 高级 DBA 和开发者篇,第 2 章:数据库集群技术 阅读

高级 DBA 和开发者篇,第 2 章:数据库集群技术

 2010-02-05 00:00:00 来源:WEB开发网   
核心提示:集群(cluster)就是一组互相连接的服务器,它们作为一个整体向用户提供服务,高级 DBA 和开发者篇,第 2 章:数据库集群技术,每个服务器都是集群系统的一个节点,在用户看来,独立存储方式投资较大,但数据的可靠性大大提升,集群提供的服务与单个服务器提供的服务没有区别,HA 集群(High Availability,

集群(cluster)就是一组互相连接的服务器,它们作为一个整体向用户提供服务,每个服务器都是集群系统的一个节点。在用户看来,集群提供的服务与单个服务器提供的服务没有区别。

HA 集群(High Availability, 高可用性集群)是为了提高系统的可用性,以便在单个节点出现故障的时候,持续满足用户的需求的集群系统。

本章主要介绍 HA 集群的原理及配置实例。

高级 DBA 和开发者篇,第 2 章:数据库集群技术

本章内容:

HA 集群概述

在 Linux 环境下搭建双机热备环境

难点与重点:

在 Linux 环境下搭建双机热备环境

2.1 HA 集群概述

集群(Cluster),就是一组相互连接的计算机作为一个整体向用户提供服务。集群中的每个计算机都是一个节点,集群中的节点可以自由增删而不会影响提供给用户的服务。多台计算机整合起来形成的集群,或者提供数倍于单台计算机的性能,或者提供更高的可用性。

HA 集群(High Availability, 高可用性集群)是集群中较常见的一种,当硬件或软件系统发生故障时,运行在该集群系统上的数据不易丢失,而且能在尽可能短的时间内恢复正常运行。

双机热备是 HA 集群中较常见的一种解决方案,它特指两台服务器组成的 HA 集群。双机热备按工作中的切换方式可以分为:主 - 备方式(Active-Standby 方式)和双主机方式(Active-Active 方式)。主 - 备方式即指的是一台服务器处于某种业务的激活状态,另一台服务器处于该业务的备用状态。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态。

在双机热备的两台服务器中,一台作为主服务器,另外一台作为备用服务器。通常情况下由主服务器提供服务,当主服务器出现故障时,备用服务器接管主服务器的工作。通过这种方式,双机热备提供给用户更高的可用性。双机热备的实现方式主要有两种:同步可用方式和异步可用方式。同步可用方式通过在双机间共享存储(磁盘阵列)来保证双机数据的一致性;异步可用方式通过数据复制来保证双机间数据的同步性。下面分别介绍同步可用方式和异步可用方式的基本原理。

2.1.1 同步可用

同步可用的双机热备方案(见图 2.1)由主 / 备用服务器、共享的物理存储器(含有数据库文件)以及集群管理软件组成。通常情况下,共享的物理存储器中的数据库文件挂靠在主服务器上,通过主服务器为用户提供数据;当主服务器出现故障的时候,集群管理软件将物理存储器的所有权从主服务器转移到备用服务器上,并在备用服务器上启动数据库服务。这样,提供给用户的服务只是产生很短一段时间的延迟,便能恢复正常。

图 2.1 同步可用的双机热备
高级 DBA 和开发者篇,第 2 章:数据库集群技术

下面对该解决方案的几个概念进行说明:

主服务器和备用服务器。

主服务器和备用服务器是建立双机热备的基本条件。两个系统上的数据库服务器共享同一个数据库文件。通常情况下,数据库文件挂靠在主数据库服务器上,用户连接到主服务器上进行数据库操作。当主服务器出现故障时,备用服务器会自动连接数据库文件,并接替主系统的工作。用户在未告知的情况下,通过备用数据库连接到数据库文件进行操作。等主服务器的故障修复之后,又可以重新加入集群。

故障检测。

故障检测是实现双机热备的关键技术之一。故障检测软件同时运行在主服务器和备用服务器上,并通过集群的节点间传送的数据包来监视主服务器和备用服务器的状态。当备用服务器上的故障检测软件检测不到主系统发送来的信号时,便认为主服务器出现了故障。此时,故障检测软件会协助备用服务器进行数据源移动(从主服务器移动到备用服务器)。当主服务器的故障被排除重新加入集群时,故障检测软件检测到这一变化,可以重新执行数据源移动(从备用服务器移动到主服务器)。

数据源移动。

当主服务器出现故障时,在用户觉察不出的情况下,集群管理软件将数据源从主服务器上卸载下来并挂靠到备用服务器上,同时启动备用服务器上的服务,继续向用户提供服务。而当主服务器重新开始运行后,集群管理软件可以执行同样的操作,将数据源移动到主服务器上,并启动主服务器的服务,停止备用服务器上的服务。

2.1.2 异步可用

独立存储双机方式是通过支持映像的软件,将数据能实时复制到另一台服务器上。这样,同样的数据就在两台服务器上各存在一份,如果一台服务器出现故障,数据能及时转换到另一台服务器。

独立存储双机方式的解决方案主要有 3 种:数据复制选项、日志传送选项和高级存储选项。。

1. 数据复制选项

数据复制选项(见图 2.2)捕获主服务器上源数据库的变更,并将之应用到备用数据库中。DB2 数据复制选项的实现包括两部分:捕获变更和应用变更。其实现过程为:

(1)在源数据发生变化时,数据会被记录到日志文件中。

(2)当主服务器上定义的源表发生数据变化时,被主服务器写入日志文件;

(3)捕获进程监控到主服务器上事务日志的变化,从中获取源表的所有更改,并将这些变更写入到预订变更表中;

(4)应用变更进程定期读取预订变更表,并将其中的变更应用到备用数据库上的目标表中。

图 2.2 数据复制选项
高级 DBA 和开发者篇,第 2 章:数据库集群技术

2. 日志传送选项

日志传送选项(见图 2.3)是将整个日志文件复制到备用服务器上,备用服务器通过日志的不断前滚会随着主服务器的变化而变化。在主服务器发生故障时,备用服务器前滚完最新的日志数据后,将数据库置于联机方式。

所谓前滚(roll forward),是指应用数据库或日志备份中的全部已完成的事务,以将数据库恢复到某个时间点,相当于重新执行一遍“事务日志文件中的记录”和“所做修改尚未写入磁盘的事务”的每一步操作。由于主服务器传送过来的事务日志在备用服务器上还没有被应用过,所以执行前滚以将备用数据库的状态与主数据库同步。

什么是回滚?

与前滚相对应,回滚(roll back)是指删除由一个或多个部分完成的事务执行的更新。主要用于在应用程序、数据库或系统错误后还原数据库的完整性。

图 2.3 日志传送选项
高级 DBA 和开发者篇,第 2 章:数据库集群技术

3. 暂挂 I/O 选项

暂挂 I/O 选项(如图 2.4)是 DB2 提供的一个高级存储选项,它创建主数据库的分割镜像并将其安装在备用服务器上,以实现主 / 备用服务器的同步。

在创建分割镜像期间,为了防止在主服务器上出现数据的部分更新,DB2 UDB 暂时挂起主服务器上的数据库 I/O,然后快速地创建数据库副本,再对主数据库取消 I/O 暂挂。最后,分割镜像被应用到备用数据库上,实现了备用服务器与主服务器数据的一致性。

什么是分割镜像?

分割镜像(split mirror)是具有同一性、独立性、瞬时性的磁盘卷拷贝,分割镜像可被应用到其他 DB2 服务器上。

图 2.4 暂挂 I/O 选项
高级 DBA 和开发者篇,第 2 章:数据库集群技术

2.2 HA 双机配置实践

本节介绍一个利用 heartbeat 软件实现的双机同步热备(双机异步热备的案例将在第 3 章中介绍)。heartbeat 是开源项目 High Availability Linux 提供的集群软件包之一,它提供了所有集群系统所需要的基本功能,比如启动和停止资源、监测集群中系统的可用性、在集群中的节点间共享 IP 地址等。

2.2.1 构成

本节介绍的双机热备包括两个数据库服务器以及存放在共享存储器中的数据库文件。在本案例中,主 / 备用服务器共享同一份数据库文件。通常情况下,数据库文件挂在主服务器上,供主服务器进行访问。当主服务器发生故障时,数据库文件转而挂在备用服务器上,通过备用服务器提供数据,以保证服务的可用性。

图 2.5 双机热备案例
高级 DBA 和开发者篇,第 2 章:数据库集群技术

该集群的详细构成(如图 2.5 所示)为:

Primary 节点,主 DB2 数据库服务器,IP 地址为 192.168.168.131,并通过端口 /dev/ttyS0 与 Standby 节点相连;

Standby 节点,备用 DB2 数据库服务器,IP 地址为 192.168.168.135,并通过端口 /dev/ttyS0 与 Primary 节点相连;

Nfsserver 文件服务器,提供 NFS 文件共享服务的文件服务器,IP 地址为 192.168.168.129;

串口心跳线,为了保证主 / 备用数据库“心跳”一致,heartbeat 软件用串口连线来监测多个节点的运行状态;

什么是心跳线?

心跳线是用于连接主机和备用机的连线。集群管理软件通过心跳线来监测集群中节点的运行状态。

集群 IP,集群的虚拟 IP,DB2 客户端通过连接虚拟 IP 来得到服务,IP 地址为 192.168.168.100;

DB2 客户端,连接集群系统的 DB2 数据库客户端;

以太网络,节点间用来连接的 TCP/IP 网络。

为了安装方便,本案例节点的 IP 地址整理如表 2.1 所示(Linux 下查看 IP 的命令为 ifconfig)。

表 2.1 IP 地址

节点名 说明 IP 地址
Primary 主服务器 192.168.168.131
Standby 备用服务器 192.168.168.135
Nfsserver NFS 文件服务器 192.168.168.129
集群 IP 集群虚拟地址 192.168.168.100

2.2.2 配置

1 .设置 IP 表(/etc/hosts)

hosts 文件用于将主机名称映射到 IP 地址。为了方便后面的连接,将三个物理节点的主机名与其 IP 间建立映射。打开 /etc/hosts 文件,将各个节点的 IP 地址与节点名追加进去(在三台机器上都要做同样的配置)。编辑完成的 hosts 文件如图 2.6 所示。

Hosts 是什么文件?

Hosts,域名解析文件。对于要经常访问的 IP 地址,我们可以通过在 Hosts 中配置主机名和 IP 的映射关系,这样以后访问的时候只要输入这个服务器的名字就行了。

图 2.6 /etc/hosts 设置
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

保存设置后,打开一个 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 所示。

图 2.7 串口连接
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

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)] 

其中:

shared_path:NFS 服务器上被共享的目录。

nfs_client:可以访问共享目录的 NFS 客户端,当 nfs_client 省略时,代表可被任意客户端访问。

parm:可选的访问参数,常用的访问参数有:

ro:只读访问;

rw:读写访问;

root_squash:root 用户的所有请求映射成如 anonymous 用户一样的权限(默认);

no_root_squas:root 用户具有根目录的完全管理访问权限。

本例中,如下设置 /etc/exports 文件(如图 2.8),对 Primary 和 Standby 节点赋予对 /database 的读写权限。

图 2.8 配置共享的目录
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(3)启动 NFS 服务。

# /etc/rc.d/init.d/nfs restart

如果 NFS 服务已经在运行,也可以不用重新启动 NFS 服务,直接采用 exports 命令即可重新导出共享目录。该命令格式如下:

 exportfs [-aruv] 

其中:

-a :全部 mount 或者 unmount /etc/exports 中的内容。

什么是 mount ?

如果想在 Linux 服务器中访问文件系统的资源,就要用 mount 命令来实现。mount 的基本语法为:mount [- 参数 ] [ 设备名称 ] [ 挂载点 ]。

-r :重新 mount /etc/exports 中分享出来的目录。

-u :umount 目录。

-v :在 export 的时候,将详细的信息输出到屏幕上。

例如,可以执行下面的命令发布共享目录。

 # /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 服务。

图 2.9 NFS 服务重启动
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

执行 df 命令确认 Nfsserver/database 被正确挂载。df 命令用来检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。效果如图 2.10 所示。

图 2.10 NFS 文件共享
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

4 .创建数据库

(1)创建用户(两个节点上都要创建)。DB2 用户的创建,既可以使用第 1 章介绍的图形管理工具,也可以使用命令行。在 Linux 命令行创建 DB2 用户的命令为 useradd。useradd 命令的基本语法为:

 useradd [-d home_dir] 
 [-g initial_group] 
 [-m ] 
 [-u uid] 
 [username] 

其中:

-d home_dir:新账号每次登入时所使用的主目录。

-g initial_group:使用者所属的群组名,该群组名必须是既存的。

-m:使用者目录如不存在则自动建立。

-u uid:使用者的 ID 值,必须唯一的 ID 值。

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)。

图 2.11 在 Standby 上连接 HADB
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

断开连接,停止 DB2 管理服务器。

 $ db2 connect reset 
 $ db2stop 

5 .配置集群软件

(1)下载 Heartbeat(见图 2.12)。登录 http://clusterlabs.org,针对相应的 Linux 版本选择 Heartbeat 的不同版本(本文中的 Linux 系统是 Cent OS 5.0.2)。

图 2.12 下载 Heartbeat
高级 DBA 和开发者篇,第 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。

图 2.13 Heartbeat 安装
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(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)。

图 2.14 查询安装位置
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(5)配置 authkeys 文件。/etc/ha.d/authkeys 文件定义了集群的认证密钥,集群中的所有节点必须有相同的认证密钥。编辑 /etc/ha.d/authkeys 文件,取消下面两行内容前的注释符号:

 ## /etc/ha.d/authkeys 
 auth 1 
 1 crc 

其中:

auth 1:指示系统用关键字 1 对应的加密方式(本例中关键字为 1 的加密方式为 crc)来加密送出的数据。

1 crc:定义关键字 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 文件中可配置的内容如下:

use_logd on/off:是否由 Heartbeat 记录日志文件。

serial /dev/ttyS0:使用串口连线监听集群节点的运行状态。如果不使用串口 Heartbeat,则必须使用其他的设备文件代替 /dev/ttyS0(如 bcast 等)。

bcast eth1:表示在 eth1 接口上使用广播监听集群节点的运行状态。

node linuxha1.linux-ha.org:必选项,集群中机器的主机名。根据集群中节点的数据,可以有多行。节点的主机名可以通过在 Terminal 中执行“uname – n”获得。

uname 是什么?

uname 是显示系统信息的命令。uname – n 显示在网络上的主机名称。

keepalive 2:设定 Heartbeat 之间的时间间隔为 2 秒。

auto_failback on:在主机发生故障(failover)之后,从节点接管主节点的所有资源。当 auto_failback 设置为 on 时,一旦主节点重新恢复联机,将从节点取回所有资源。若该选项设置为 off,主节点便不能重新获得资源。

crm yes/no:是否使用 crm(集群资源管理器)来管理集群资源。

本例中,/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> 

其中:

node-name 是主服务器的节点名,取值必须匹配 ha.cf 文件中 node 选项设置的主机名中的一个,node 选项设置的另一个主机名成为从节点。

network-config 用于网络设置,包括指定集群 IP、子网掩码、广播地址等。

resource-group 用于设置 Heartbeat 启动的服务,该服务最终由双机系统通过集群 IP 对外提供。Resource-group 中包含了存在于 /etc/init.d 目录或 /etc/ha.d/resource.d 目录下的脚本文件(这个脚本的副本必须同时存在于主服务器和备用服务器上)。这个脚本文件定义了 Heartbeat 启动、接管以及停止时系统应该做的操作。

本例中,如下指定 Haresources 文件:

 ## /etc/ha.d/haresources 
 Primary 192.168.168.100 Filesystem::Nfsserver:/database::/database::nfs::rw, 
 hard db2::db2ha1 

这一行指出,在启动 Heartbeat 时,要实现以下操作:

将 Primary 设定为集群的虚拟 IP 192.168.168.100;

以可读写的方式挂载 Nfsserver 节点上的共享文件系统 /database;

以用户 db2ha1 启动 DB2 实例。

在 Heartbeat 关闭时,Heartbeat 将执行以下操作:

停止数据库服务器;

卸载 NFS 共享文件系统 /database;

释放集群的虚拟 IP。

在 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)都没有挂载在节点上。

图 2.15 Heartbeat 启动前的 Primary 节点
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

利用 heartbeat start 命令来启动 Primary 节点上的 Heartbeat(如图 2.16 所示)。系统返回的消息显示 Primary 上 Heartbeat 已经成功启动。

图 2.16 启动 Primary Heartbeat
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(2)查看 Primary 节点集群状态。查看集群的状态可以使用 crm_mon 命令,其基本语法为:

 crm_mon [ -i interval ] | [ -r] [ -h filename ] 

其中:

-i interval:集群状态刷新的时间间隔,单位为秒。如果该值不指定,默认 15 秒刷新一次集群的状态。

-r:显示无效的资源。

-h filename:将集群状态处理到文件 filename 中。

本例中,将刷新的间隔设定为 5 秒:

 # crm_mon – i5 

图 2.17 中显示了集群的状态,对其中的几个项目进行说明:

Refresh in xs …:集群将在 x 秒后刷新状态。

Last updated:集群的上次刷新时间。

Current DC:当前协调节点(主节点),所有其他的节点从主节点上读取资源文件和配置信息。当备用节点接管主节点时,Current DC 会切换到备用节点。Current DC 后面跟着节点名和唯一的节点 ID。

x Nodes configed:当前集群中配置的节点数。

x Resources configured:集群中配置的资源数。

Node:列出集群中节点的详细情况,如节点名、节点 id 以及节点的状态(online/offline)。

Resource Group:在 Haresource 文件中定义的服务资源组,每一行就是一个资源组。

IPaddr_xxx_xxx_xxx_xxx:虚拟 IP 地址服务。ocf::heartbeat:IPaddr 表明提供该服务的脚本的类型(ocf)和脚本名(IPaddr);Started primary 表明该服务由 Primary 节点提供。

Filesystem_2:文件系统服务。ocf::heartbeat:Filesystem 表明提供该服务的脚本的类型(ocf)和脚本名(Filesystem);Started primary 表明该服务由 Primary 节点提供。

db2_3:DB2 数据库服务。ocf::heartbeat:db2 表明提供该服务的脚本的类型(ocf)和脚本名(db2);Started primary 表明该服务由 Primary 节点提供。

本例中,集群有 1 个组成节点(Primary)和 1 个资源组(group_1),提供了集群 IP、文件系统和 DB2 数据库服务。

图 2.17 查看集群状态(Primary)
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

此时,再次查看 Primary 节点上的目录挂载和 IP 地址的分配情况(如图 2.18)。从中可以看出,NFS 共享目录(Nfsserver:/database)已经挂载在 Primary 节点上,集群虚拟 IP(192.168.168.100)也已经绑定在 Primary 节点上。

图 2.18 Heartbeat 启动后的 Primary 节点
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(3)在 Standby 上启动 Heartbeat。同 Primary 节点一样,在 Standby 节点上打开一个 Terminal,执行下面的命令:

 # /etc/init.d/heartbeat start 

(4)查看 Standby 节点集群状态。在 Standby 节点上执行下列命令以查看集群状态:

 # crm_mon – i5 

在集群资源监视窗口,可以看到集群的状况发生了下面的变化:

x Nodes configed:集群中配置的节点数由 1 变为 2。

Node Standby:集群中节点增加了 Standby,状态为 online。

尽管 Standby 节点加入到了集群中,提供虚拟 IP、Nfs 共享资源即 DB2 数据库服务的节点仍然是 Primary(如图 2.19)。

图 2.19 查看集群状态(Primary 和 Standby)
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

查看 Standby 节点上 NFS 共享目录的挂载和集群的虚拟 IP 地址的分配情况,可以证实上面的结果(见图 2.20)。

图 2.20 Heartbeat 启动后的 Standby 节点
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

7 .服务接管

(1)停止 Primary 节点上的 Heartbeat。使用下面的命令来停止 Primary 节点上的 Heartbeat。

 # /etc/init.d/heartbeat stop 

(2)查看集群状态。执行下面的命令以查看集群的状况(如图 2.21):

 # crm_mon – i5 

图 2.21 停止 Primary 节点后的集群状态
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

可以看到,集群的状况发生了下列变化:

Current DC:协调节点由之前的 Primary 变成了 Standby。

Node Primary:节点的状态由 Online 变成了 Offline。

IPaddr_xxx_xxx_xxx_xxx:虚拟 IP 地址服务。Started Standby 表明该服务改由 Standby 节点提供。

Filesystem_2:文件系统服务。Started Standby 表明该服务改由 Standby 节点提供。

db2_3:DB2 数据库服务。Started Standby 表明该服务改由 Standby 节点提供。

此时虚拟 IP、NFS 路径挂载、DB2 服务都转移到了 Standby 节点上。到 Standby 节点上查看节点的挂载目录(如图 2.22)和 IP 地址(如图 2.23),也证实了上面的结果。

图 2.22 Standby 节点的挂载目录
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

图 2.23 Standby 节点的 IP 地址
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

(3)此时重新启动 Primary 节点的 Heartbeat,并查看集群的状态(如图 2.24)。

 # /etc/init.d/heartbeat start 
 # crm_mon – i5 

因为之前将 auto_failback 参数设置为 on,因此服务再次被 Primary 节点接管。集群的状况发生了下列变化:

Current DC:协调节点由之前的 Standby 变成了 Primary。

Node Primary:节点的状态由 Offline 变成了 Online。

IPaddr_xxx_xxx_xxx_xxx:虚拟 IP 地址服务。Started Primary 表明该服务改由 Primary 节点提供。

Filesystem_2:文件系统服务。Started Primary 表明该服务改由 Primary 节点提供。

db2_3:DB2 数据库服务。Started Primary 表明该服务改由 Primary 节点提供。

图 2.24 查看集群状态(Primary 和 Standby)
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图)

2.2.3 测试

首先在 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 节点上插入的一致,证明集群创建成功。

图 2.25 在 Standby 节点上抽出数据
高级 DBA 和开发者篇,第 2 章:数据库集群技术

查看原图(大图) 

2.3 实践技巧

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。

2.4 本章小结

本章首先介绍了集群。集群是一组计算机合起来提供一项服务的架构。通过集群,可以提高应用系统的计算速度或可用性。

其次,介绍了集群的可用性,主要包括共享存储和独立存储。共享存储模式是双机热备的最常见方案,实施简单、管理方便。此外,还介绍了一个利用 Heartbeat 软件实现的高可用性集群的配置实例。

独立存储的解决方案主要有 3 种:数据复制选项、日志传送选项和高级存储选项。独立存储方式投资较大,但数据的可靠性大大提升,详细的配置实例参见本书第 3 章“DB2 高可用性灾难恢复”的相关内容。

Tags:高级 DBA 开发者

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接