技术开发 频道

DB2高可用性灾难恢复

    【IT168 技术文档】DB2 HADR概述

    High Availability Disaster Recovery (HADR)是数据库级别的高可用性数据复制机制,最初被应用于Informix数据库系统中,称为High Availability Data Replication(HDR)。IBM收购Informix之后,这项技术就应用到了新的DB2发行版中。一个HADR环境需要两台数据库服务器:主数据库服务器(primary)和备用数据库服务器(standby)。当主数据库中发生事务操作时,会同时将日志文件通过TCP/IP协议传送到备用数据库服务器,然后备用数据库对接受到的日志文件进行重放(Replay),从而保持与主数据库的一致性。当主数据库发生故障时,备用数据库服务器可以接管主数据库服务器的事务处理。此时,备用数据库服务器作为新的主数据库服务器进行数据库的读写操作,而客户端应用程序的数据库连接可以通过自动客户端重新路由(Automatic Client Reroute)机制转移到新的主服务器。当原来的主数据库服务器被修复后,又可以作为新的备用数据库服务器加入HADR。通过这种机制,DB2 UDB实现了数据库的灾难恢复和高可用性,最大限度的避免了数据丢失。下图为DB2 HADR的工作原理图:

    注:处于备用角色的数据库不能被访问。

    下面我们首先从一个配置实例入手来了解DB2 HADR环境的基本配置过程,然后再对HADR环境涉及到的一些技术要点展开讨论。

    快速实例上手

    要进行这个实例配置过程,你必须拥有DB2 UDB Enterprise Server Edition (ESE),笔者使用的是DB2 ESE v8.2.2 for Linux 32bit(在v8.2的基础上打了Fixpack9a)。如果您没有这个版本,可以到IBM官方网站下载试用版(可能需要花点时间填写一些信息),下载链接:https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=db2udbdl

    另外,笔者使用的是两台DELL PowerEdge 2850作为数据库服务器,安装Redhat Linux Enterprise Server v4.0。这两台机器的主机名和IP地址分别为:DBSERV1(192.168.1.162)和DBSERV2(192.168.1.163)。在下面的配置过程中我们将DBSERV1作为主数据库服务器,其实HADR配置好之后,这两台服务器的角色是可以转换的。为简单起见,我们就采用DB2的样本数据库SAMPLE作为配置对象。

    配置过程(以下命令均在DB2 CLP中执行):

    1. 在DBSERV1和DBSERV2上安装DB2,并创建缺省实例db2inst1,服务端口:50000,我们使用缺省的实例所有者用户db2inst1,密码:db2inst1

    2. 使用db2sampl命令在DBSERV1上创建样本数据库SAMPLE

    3. 修改SAMPLE数据库配置参数LOGRETAIN为ON,以使该数据库日志记录方式改为存档日志。

UPDATE DB CFG FOR SAMPLE USING LOGRETAIN ON UPDATE DB CFG FOR SAMPLE USING TRACKMOD ON

    4. 修改索引日志记录参数

UPDATE DB CFG FOR SAMPLE USING LOGINDEXBUILD ON UPDATE DB CFG FOR SAMPLE USING INDEXREC RESTART

    注:这一步并不是必须的。

    5. 备份数据库SAMPLE

BACKUP DB SAMPLE TO /database/dbbak

    其中"/database/dbbak"是笔者用来存放数据库备份文件的目录,你完全可以指定任何一个db2inst1有写入权限的其他目录。
    备份完成之后,在/database/dbbak目录下我们会看到数据库备份映像文件:

    SAMPLE.0.db2inst1.NODE0000.CATN0000.20050726122125.001     

    注:你所得到的文件名的时间标志部分肯定和我的不一样,在下面的恢复数据库命令中要注意做相应的修改。

    6. 将得到的数据库映像文件复制到DB2SERV2对应的目录下(/database/dbbak)。

    7. 在DBSERV2上恢复数据库SAMPLE:

RESTORE DATABASE SAMPLE FROM "/database/dbbak" TAKEN AT 20050726122125 REPLACE HISTORY FILE WITHOUT PROMPTING

    8. 配置自动客户端重新路由:

    在主数据库服务器(DBSERV1)上:

UPDATE ALTERNATE SERVER FOR DATABASE SAMPLE USING HOSTNAME 192.168.1.163 PORT 50000

    在备用数据库服务器上(DBSERV2):

UPDATE ALTERNATE SERVER FOR DATABASE SAMPLE USING HOSTNAME 192.168.1.162 PORT 50000

    9. 配置HADR服务和侦听端口

    用vi编辑/etc/services文件(需要切换到root用户),加入下面两行:

    DB2_HADR_1      55001/tcp
    DB2_HADR_2      55002/tcp

    对于 Windows,编辑%SystemRoot%\system32\drivers\etc\services。

    注:这一步不是必须的,因为在下面配置HADR_LOCAL_SVC和HADR_REMOTE_SVC数据库参数的时候您可以直接使用端口号来替代服务名。

    10. 修改主数据库(DBSER1 - SAMPLE)的配置参数:

UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_HOST 192.168.1.162 UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_SVC DB2_HADR_1 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_HOST 192.168.1.163 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_SVC DB2_HADR_2 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_INST db2inst1 UPDATE DB CFG FOR SAMPLE USING HADR_SYNCMODE NEARSYNC UPDATE DB CFG FOR SAMPLE USING HADR_TIMEOUT 120 CONNECT TO SAMPLE QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS UNQUIESCE DATABASE CONNECT RESET

    11. 修改备用数据库(DBSERV2 - SAMPLE)的配置参数:

UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_HOST 192.168.1.163 UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_SVC DB2_HADR_2 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_HOST 192.168.1.162 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_SVC DB2_HADR_1 UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_INST db2inst1 UPDATE DB CFG FOR SAMPLE USING HADR_SYNCMODE NEARSYNC UPDATE DB CFG FOR SAMPLE USING HADR_TIMEOUT 120

    12. 启动HADR:

    首先启动备用数据库服务器的HADR:

DEACTIVATE DATABASE SAMPLE START HADR ON DATABASE SAMPLE AS STANDBY

    然后启动主数据库服务器的HADR:

DEACTIVATE DATABASE SAMPLE START HADR ON DATABASE SAMPLE AS PRIMARY

    注:如果你先启动主数据库服务器HADR,那么你必须保证在HADR_TIMEOUT参数指定的时间内(单位为秒)启动备用数据库服务器HADR。否则将启动失败。

    OK,到目前为止,我们已经成功配置并启动了DB2 HADR。在下一节中我们将对这个配置好的HADR环境进行一些测试来验证它是否能按照我们预期的方式工作。

0
相关文章