分类: LINUX
2013-06-08 21:35:34
HADR( 高可用性 ) 是 DB2 数据库的一个组件,是 DB2 提供给用户的一种高可用性和灾难恢复的解决方案。组成 HADR 需要一对机器,一个和一个备机(DB2 10.0目前最多可以支持三个备机)。它的基本原理是将数据库产生的日志通过到备机,然后备机将这些日志重新应用,整个过程类似于前滚恢复。从而保证和备机数据库的一致。当发生意外停机以后,例如停电或者灾难等,备机可以很快的接替主机继续工作。从 DB2 V97FP1 开始,HADR 开始支持 ROS(Read On Standby),备机除了做备份数据库以外,还可以接收连接,执行读操作。通过对 HADR 的监控,可以更清楚的了解当前和备机的配置以及运行情况,可以根据监控的结果做出优化或者相应的管理措施。 通过计算 HADR 对整个数据库交易的影响,可以作出相应的调优方案,例如改进 IO 性能,网络性能,修改 HADR 的同步模式等等。
DB2 Version:V9.7.0.4
OS Version:RHEL 6.1
安装DB2的过程就不说了,分别在两台机器上安装DB2,
假设Primary的ip:192.168.1.121
假设Standby的ip:192.168.1.120
安装DB2需要的补丁包:
libaio |
包含 DB2 数据库服务器所需的异步库。 |
||
compat-libstdc++ |
包含 libstdc++.so.5(Linux on POWER 不需要此项) |
||
libstdc++ |
包含 libstdc++.so.6 |
||
/System Environment/Shell |
pdksh 或 ksh93 |
Korn Shell。 |
|
/Applications/Internet |
openssh |
此程序包中包含一组客户机程序,它们允许用户通过安全 shell 在远程计算机上运行命令。如果将 DB2 数据库系统的缺省配置与 rsh 配合使用,那么不需要此程序包。 |
|
/System Environment/Daemons |
openssh-server |
此程序包中包含一组服务器程序,它们允许用户通过安全 shell 运行来自远程计算机的命令。如果将 DB2 数据库系统的缺省配置与 rsh 配合使用,那么不需要此程序包。 |
|
/System Environment/Daemons |
rsh-server |
此程序包包含一组程序,它们允许用户在远程计算机上运行命令。分区数据库环境中需要此程序包。如果将 DB2数据库系统配置为使用 ssh,那么不需要此程序包。 |
|
/System Environment/Daemons |
nfs-utils |
网络文件系统支持程序包。它允许远程计算机访问本地文件。 |
在两台服务器分别执行:vi /etc/sysctl.conf
加入
kernel.shmmni = 1073741824
kernel.sem = 1024
kernel.msgmni = 1024
kernel.msgmax = 65536
kernel.msgmnb = 65536
vm.swappiness = 0
vm.overcommit_memory = 0
kernel.randomize_va_space = 0
#sysctl -l使刚才修改的内核参数生效
首先,说明几个需要注意的问题:
(1). HADR pair不可以使用circular logging。大家可以参照db2 infocenter,阅读以下DB2的log方式
(2). HADR的从机是由主机的备份镜像恢复而成的
(3). 启动HADR的时候应该首先启动standby,然后在启动primary
(4). Standby和Primary上和HADR相关的参数一定要一致,否则会在系统握手校验的时候失败
现在我们假设HADR Pair部署在主机hostp和从机hosts上
第一步,分别在主机和从机上创建数据库:
db2 create db hadrdb
第二步,设置主数据库配置参数:
db2 update db cfg for hadrdb using logretain on
db2 update db cfg for hadrdb using trackmod on
db2 update db cfg for hadrdb using logindexbuild on
db2 update db cfg for hadrdb using indexrec restart
db2 update db cfg for hadrdb using HADR_LOCAL_HOST 192.168.1.121
db2 update db cfg for hadrdb using HADR_LOCAL_SVC 54321
db2 update db cfg for hadrdb using HADR_REMOTE_HOST 192.168.1.120
db2 update db cfg for hadrdb using HADR_REMOTE_SVC 54321
db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1
db2 update db cfg for hadrdb using HADR_TIMEOUT 120
db2 update db cfg for hadrdb using HADR_PEER_WINDOW 10
db2 update db cfg for hadrdb using HADR_SYNCMODE sync
第三步,备份主数据库,生成一个备份文件
db2 backup db hadrdb
这里需要注意一下,如果你是第一次将日志的方式设置为retain方式,这次备份会使数据库跳出backup pending方式。当从数据库恢复时,不要使用这个备份文件,而是需要重新备份一次,使用第二次备份的文件。假设文件名是: HADRDB.0.db2inst1.NODE0000.CATN0000.20130530132023.001
第四步,将刚才备份的数据库日志文件拷贝到一个从机可以使用的文件系统里面
#scp HADRDB.0.db2inst1.NODE0000.CATN0000.20130530132023.001 192.168.1.120:/home/db2inst1
第五步,在从数据库上恢复数据库:
db2 restore db hadrdb from /home/db2inst1
第六步,配置从数据库的参数:
db2 update db cfg for hadrdb using HADR_LOCAL_HOST 192.168.1.120
db2 update db cfg for hadrdb using HADR_REMOTE_HOST 192.168.1.12
其实,对于这一步,你只要更新HADR_LOCAL_HOST和HADR_REMOTE_HOST就可以了,因为其他的参数在restore db的时候都会恢复出来。
第七步,启动从数据库:
db2 start hadr on db hadrdb as standby
第八步,启动主数据库:
db2 start hadr on db hadrdb as primary
第九步,在主数据库:
[db2inst1@portal02 ~]$ db2pd -hadr -db hadrdb
Database Partition 0 -- Database HADRDB -- Active -- Up 0 days 00:00:43 -- Date 05/30/2013 13:31:33
HADR Information:
Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)
Primary Peer Sync 0 0
ConnectStatus ConnectTime Timeout
Connected Thu May 30 13:30:52 2013 (1369891852) 120
PeerWindowEnd PeerWindow
Thu May 30 13:31:43 2013 (1369891903) 10
LocalHost LocalService
192.168.1.121 54321
RemoteHost RemoteService RemoteInstance
192.168.1.120 54321 db2inst1
PrimaryFile PrimaryPg PrimaryLSN
S0000000.LOG 0 0x0000000002328010
StandByFile StandByPg StandByLSN
S0000000.LOG 0 0x0000000002328010
看到
HADR Information:
Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)
Primary Peer Sync 0 0
则说明db2 hadr执行成功
db2 get db cfg for cusdb | grep -i hadr