简介: DB2 pureScale 作为一个完美的高可用性的数据库解决方案,吸收并有机的整合了多项技术,构成了多个高性能组件,为数据库提供服务。例如基于集群、磁盘共享的架构有效的使用系统资源,基于高可靠的 powerHA pureScale 技术使系统具备持续的可用性。本文重点介绍其中一个重要部件 - Member,并通过实例详细介绍 DB2 pureScale 是如何通过它实现系统的持续可用性。
DB2 pureScale 作为一个完美的高可用性的数据库解决方案,吸收并有机的整合了多项技术,构成了多个高性能组件,为数据库提供服务。例如基于集群、磁盘共享的架构有效的使用系统资源,基于高可靠的 powerHA pureScale 技术使系统具备持续的可用性。本文重点介绍其中一个重要部件,Member,并通过实例详细介绍 DB2 pureScale 是如何通过它实现系统的持续可用性。
如图 1 所示,在 DB2 pureScale 系统中,当 DB2 client 连接到数据库服务器,连接被转向 Member,Member 负责处理数据库请求,PowerHA pureScale 为数据库系统提供基础架构服务,共享磁盘存储存放数据提供给所有 Member 访问。
Member 很像一个 DB2 ESE 节点,它有自己的 db2sysc 进程、buffer pool、内存区域和日志文件,Member 通过集群文件系统访问共享的数据。当有 DB2 客户端连接到数据库服务器时,连接会被指向某个 Member,由 Member 处理客户端的请求。推荐在一台主机上配置一个 Member。
PowerHA pureScale servers (CFs)
DB2 pureScale 中的 CF 组件,是对 IBM PowerHA pureScale server 技术的使用,利用一个全局的锁管理机制协调、管理锁,避免不同的 member 访问相同表数据时发生冲突。同时,通过共享的 buffer pool 的使用,保持所有 Member 的页缓冲的一致性。CFs 提供一个共享的通讯区域(shared communication area, SCA),为 Member 之间提供通讯服务。
DB2 集群服务负责进行心跳故障检测和启动必要的恢复操作,同时它也负责提供集群文件系统,作为一个公用的文件系统让每台主机都能访问。DB2 集群服务整合了 IBM Tivoli System Automation for Multiplatforms(Tivoli SA MP)、IBM Reliable Scalable Clustering Technology(RSCT) 和 IBM General Parallel File System(GPFS) 等技术。
DB2 pureScale 实例建立在共享存储之上。共享存储用来存放数据库数据文件、db2 实例的配置文件以及日志文件、原数据等数据库相关信息。
Member restart 是在一个发生故障、不能正常工作的 Member 上重新启动数据库服务器进程的过程,并且在对应的数据库上完成 Member crash recovery。 Member 所在的主机,无论是软件故障,还是硬件问题导致 Member 毁坏,进而无法正常工作。DB2 cluster services 监测到 Member 故障,就会自动重新启动这个 Member,即执行 Member restart 过程。这个过程可以发生在 Member 所在的主机上,这样被称作 local restart, 也可以发生在其他 Member 所属的主机上,这种情况被称作 restart light.。
如果因为软件原因导致一个 Member 出现故障,无法正常工作,如果这时 Member 所属的主机依旧处于活动,可工作状态,DB2 cluster services 会尝试作 local restart。Local member restart 会减少对内存的使用,以确保处于 in-flight 状态的数据可以被很快的恢复到一致的状态。当所有的处于 in-flight 状态的数据都被恢复后,Member 使用正常的内存使用模式对内存进行初始化,此时的内存容量可供给所有的事务进程使用。
如果某个 Member 所在的主机处于非活动状态,或者 Member 的 local restart 失败了,这时这个 Member 就会被安排在在其他 Member 所在的主机上进行重新启动,即运行 restart light 过程。
在 restart light 成功完成后,Member 等待被重新部署回自己所属的主机,此时它不会处理任何新的事务。如果 Member 所属的主机也可以正常使用,Member 会被 DB2 cluster services 自动部署回主机,变成正常的活跃 Member,此时它又能处理新事务了。
参数 autorestart 决定着 database manager 是否在数据库非正常停止后自动重新启动,并执行 crash recovery。autorestart 的值范围是 [On,Off], 默认为 On。
如果参数被置为 ON,当有新的数据库连接创建时,如果需要做 crash recovery,它就会被自动运行。
通常情况下,Member crash recovery 是自动运行的,无需人工干预。但是,当参数 autorestart 被置为 OFF 时,或者当 cluster management 处于非活动状态时,需要手动启动 Member crash recovery 过程。
运行命令“RESTART DATABASE”可以启动 Member crash recovery 过程。
如果因为断电或者其他的硬件问题导致 Member 不能正常工作,在解决了故障之后,你一定很想知道 Member 是否已经成功重新启动,是否能正常开始工作了。可以通过 DB2_MEMBER 视图检查 DB2 pureScale 实例中所有 member 的运行状态,也可以使用 DB2_GET_INSTANCE_INFO 表函数来查询指定主机。
本例以通过查询 DB2_MEMBER 视图,检查 MEMBER 的状态,SQL 语句如下:
SELECT ID,varchar(STATE,21) AS STATE, varchar(HOME_HOST,10) AS HOME_HOST, varchar(CURRENT_HOST,10) AS CUR_HOST, ALERT FROM SYSIBMADM.DB2_MEMBER |
清单 1. 所有的 MEMBER 都运行在自己的主机上,运行状态正常
ID STATE HOME_HOST CUR_HOST ALERT ------ --------------------- ---------- ---------- -------- 1 STARTED HOSTA HOSTANO 2 STARTED HOSTB HOSTBNO 3 STARTED HOSTC HOSTCNO 3 record(s) selected. |
清单 2. 有一个 Member 正在 restart 的过程中。
ID STATE HOME_HOST CUR_HOSTALERT ------ --------------------- ---------- ---------- -------- 1 WAITING_FOR_FAILBACK HOSTA HOSTANO 2 STARTED HOSTBHOSTB NO 3 STARTED HOSTC HOSTCNO 3 record(s) selected. |
清单 3. MEMBER 0 不能进行 local restart,处于 restart light 状态
ID STATE HOME_HOST CUR_HOSTALERT ------ --------------------- ---------- ---------- -------- 1 WAITING_FOR_FAILBACK HOSTA HOSTBNO 2 STARTED HOSTB HOSTBNO 3 STARTED HOSTC HOSTCNO 3 record(s) selected. |
此时,可以通过 DB2_CLUSTER_HOST_STATE 查看主机的状态,得知 HOSTA 处于非活动状态。
HOST STATESTOPPED ALERT ---------- -------- ------- -------- HOSTB ACTIVE NONO HOSTA INACTIVE NOYES HOSTC ACTIVE NONO 3 record(s) selected. |
对于 restart light 模式的 Member,我们可以在任意一个处于活跃状态的 Member 上使用 LIST UTILITIES 命令进行监控。LIST UTILITIES 命令能够监控所有 Member 的 recovery 状态,包括处于 restart light 状态的 Member。如下所示:
LIST UTILITIES SHOW DETAIL ID= 1 Type= MEMBER CRASH RECOVERY Database Name= SAMPLE Partition Number= 1 Description= Member Crash Recovery (Light Mode) Start Time= 07/01/2010 15:20:05.646020 State= Executing Invocation Type= Automated Progress Monitoring: Estimated Percentage Complete = 0 Phase Number [Current]= 1 Description= Forward Total Work= 4193976 bytes Completed Work= 0 bytes Start Time= 07/01/2010 15:20:05.646121 Phase Number= 2 Description= Backward Total Work= 4193976 bytes Completed Work = 0 bytes Start Time= Not Started |
函数 DB2_GET_INSTANCE_INFO,视图 DB2_MEMBER,命令 LIST INSTANCE 和 DB2INSTANCE 都可以用来监测 DB2 pureScale 环境在某一时刻的状态,可以知道是否有 Member 处于 restart light 状态,它正在哪台主机上运行,当前 restart light 的状态是什么。 在下面的例子里,通过 DB2_MEMBER 视图,我们可以看到 Member 1 处于 restart light 模式,它正运行在 HOSTB 上。
SELECT ID, varchar(HOME_HOST,10) AS HOME_HOST, varchar(CURRENT_HOST,10) AS CURRENT_HOST, varchar(STATE,21) AS STATE, ALERT FROM SYSIBMADM.DB2_MEMBER ID HOME_HOST CURRENT_HOST STATEALERT ------ --------- ------------ ---------- ----- 1 HOSTA HOSTBRESTARTING NO 2 HOSTB HOSTB STARTEDNO 3 HOSTC HOSTC STARTEDNO 3 record(s) selected. |
通过这个实例,我们来介绍 Member restart 的具体过程。当一个主机无法正常工作,导致所属的 Member 开始 restart light 的过程。
环境配置
共有 5 台主机,分别运行 Member1, Member2, Member3 和 CF。如下所示:
MEMBER_ID TYPE STATEHOME_HOST CURRENT_HOST ALERT --------- ------- ------- --------- ------------ ----- 1 MEMBER STARTED HOSTA HOSTA NO 2 MEMBER STARTED HOSTB HOSTB NO 3 MEMBER STARTED HOSTC HOSTC NO 128 CF PRIMARY HOSTE - NO 129 CF PEER HOSTF - NO |
主机发生故障
因为电源问题,导致主机 HOSTA 出现故障。DB2 cluster services 不能在 HOSTA 上重新启动 Member1,需要在另外一个可用的主机上运行 restart light 过程来重新启动这个 Member.
此时,LIST INSTANCE 命令显示 member 1 的状态是 RESTARTING ,运行在 HOSTB 上。HOSTA 的状态是 INACTIVE , 因为在 HOSTA 上的 instance 没有被人为的停止,所以,instance_stopped 的状态是 no.
LIST INSTANCE MEMBER_ID TYPE STATEHOME_HOST CURRENT_HOST ALERT --------- ------- ---------- --------- ------------ ----- 1 MEMBER RESTARTING HOSTA HOSTB NO 2 MEMBER STARTED HOSTB HOSTB NO 3 MEMBER STARTED HOSTC HOSTC NO 128 CF PRIMARY HOSTE - NO 129 CF PEER HOSTF - NO HOSTNAME STATEINSTANCE_STOPPED ALERT -------- -------- ---------------- ----- HOSTA INACTIVE NOYES HOSTB ACTIVE NONO HOSTC ACTIVE NONO HOSTE ACTIVE NONO HOSTF ACTIVE NONO |
等待故障恢复
restart light 过程启动后,在每个需要的数据库上都会运行 Member crash recovery。Member crash recovery 完成后,Member 1 处于 WAITING_FOR_FAILBACK 状态,等待重新在 HOSTA 上启动,Member1 此时并不处理新的事务。
LIST INSTANCE MEMBER_ID TYPE STATEHOME_HOST CURRENT_HOST ALERT --------- ------- -------------------- --------- ------------ ----- 1 MEMBER WAITING_FOR_FAILBACK HOSTA HOSTB NO 2 MEMBER STARTED HOSTB HOSTB NO 3 MEMBER STARTED HOSTC HOSTC NO 128 CF PRIMARY HOSTE - NO 129 CF PEER HOSTF - NO HOSTNAME STATEINSTANCE_STOPPED ALERT -------- -------- ---------------- ----- HOSTA INACTIVE NOYES HOSTB ACTIVE NONO HOSTC ACTIVE NONO HOSTE ACTIVE NONO HOSTF ACTIVE NONO |
主机故障解决
电源问题解决以后了,HOSTA 又变成活跃状态。
LIST INSTANCE MEMBER_ID TYPE STATEHOME_HOST CURRENT_HOST ALERT --------- ------- -------------------- --------- ------------ ----- 1 MEMBER WAITING_FOR_FAILBACK HOSTA HOSTB NO 2 MEMBER STARTED HOSTB HOSTB NO 3 MEMBER STARTED HOSTC HOSTC NO 128 CF PRIMARY HOSTE - NO 129 CF PEER HOSTF - NO HOSTNAME STATEINSTANCE_STOPPED ALERT -------- ------ ---------------- ----- HOSTA ACTIVE NONO HOSTB ACTIVE NONO HOSTC ACTIVE NONO HOSTE ACTIVE NONO HOSTF ACTIVE NONO |
在所属主机上恢复 Member
DB2 cluster services 检测到 HOSTA 处于活跃状态,会自动在 HOSTA 上恢复在 Member 1。
此时,Member1 的状态是 RESTARTING 。
LIST INSTANCE SHOW DETAIL MEMBER_ID TYPE STATEHOME_HOST CURRENT_HOST ALERT --------- ------- ---------- --------- ------------ ----- 1 MEMBER RESTARTING HOSTA HOSTA NO 2 MEMBER STARTED HOSTB HOSTB NO 3 MEMBER STARTED HOSTC HOSTC NO 128 CF PRIMARY HOSTE - NO 129 CF PEER HOSTF - NO HOSTNAME STATEINSTANCE_STOPPED ALERT -------- ------ ---------------- ----- HOSTA ACTIVE NONO HOSTB ACTIVE NONO HOSTC ACTIVE NONO HOSTE ACTIVE NONO HOSTF ACTIVE NONO |
Member 在所属主机完成启动
Member 1 在 HOSTA 上成功完成了 Member restart,它的状态变成了 STARTED,现在这个 Member 可以接受用户的连接,处理新的事务了。使用 LIST INSTANCE 命令可以看到此时 DB2 pureSacle 环境的状态与实例开始时一样了。
本文简单的对 DB2 pureScale 中的 Member 进行了介绍,并通过实例说明了如何启动 Member restart 和如何监测 Member 的状态。
原文链接:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1008wangfg/index.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-672894/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15082138/viewspace-672894/