DB2 HADR高可用性灾难恢复类似于Oracle的Data Guard。是一种通过重放日志方式实现热备份的数据库备份方式。在实现高可用性方面相对于HA来说有以下好处和缺点:
好处:
1. 主服务器故障时,HA需要在备份机上重启数据库Instance, 这通常需要花费几分钟时间。而HADR需要回滚未完成的事务,一般来说在正常OLTP环境下,很少有长事务,所以HADR备份机的启动速度比较快(30秒内)。
2. HADR可以实现远程备份,当然HA也可以通过磁盘阵列网络的高级拷贝功能实现某种程度的远程备份。但是这种磁盘拷贝至少比HADR多耗费3倍以上网络带宽。
3. 听说HADR正在做Readonly on Standby,到时候备机可读就比不可读的HA的备机强了不少。
缺点:
1. HADR需要多一倍的存储空间。HA是共享存储的。
2. HADR在扩展表空间,使用超过2GB LOB,使用DPF方面有诸多的限制。对维护人员的要求比较高。
3. HADR的备机空闲时也需要不停的replay log,需要占用CPU和内存资源。HA的备机空闲时几乎不占用CPU和内存资源,可以做交互备份。
总结来说,HA适用于有一定高可用性需求的小型企业环境。而HADR适用于有高可用性或远程热备份需求的大型企业用户。
下面介绍,如何配置HADR。
1. 软硬件需求
两台独立的服务器都必须有相同的操作系统和版本号
两台服务器的DB2主版本号必须一致
建议两台服务器使用相同的小版本号(fixpack)
两台服务器使用不同的小版本号是允许的,这主要是为了滚动升级(Rolling Upgrade),但是不建议在正常使用的时候用
主服务器的版本号不能比备份服务器的版本号新
主服务器和备份服务器必须用相同的存储路径
这个要求主要是为了保证tablespace的扩展能被复制。
可以使用symbolic links(链接文件)实现主备机使用相同目录
2. 在主备机上分别安装DB2并创建Instance
3. 在主机上创建数据库并修改参数
打开日志保留
db2 update db cfg using LOGRETAIN on
4. 备份主服务器数据库
db2 backup db <database>
5. 在备份服务器上恢复数据库
恢复数据库时同时更新历史文件
db2 restore db <database> replace history file
注意: 备份服务器的数据库必须处于roll forward pending状态,才能启动HADR as standby。所以,恢复数据库以后,千万不要执行db2 rollforward end of log。HADR假设备机的日志比主机日志旧,所以备机最好就不要执行前滚日志操作,等启动HADR时,备机会自动自行该操作。
6. 修改HADR的参数
主备机上面HADR的参数要相互对应
主机参数 备机参数
HADR_LOCAL_HOST 主机名 HADR_REMOTE_HOST
HADR_REMOTE_HOST 备机名 HADR_LOCAL_HOST
HADR_LOCAL_SVC 主机监听端口 HADR_REMOTE_SVC
HADR_REMOTE_SVC 备机监听端口 HADR_LOCAL_SVC
<instanceName> 主机instance HADR_REMOTE_INST
HADR_REMOTE_INST 备机instance <instanceName>
使用db2 update db cfg修改上述参数。
注意主备机的监听端口不能被其他程序占用。而且也不能使用instance使用的端口(SVCENAME中指定的端口)
7. 停止主服务器,重启备份服务器
主服务器:db2stop
备份服务器:db2stop
db2start
在备份服务器上启动HADR
db2 start hadr on db <database> as standby
8. 启动主服务器
主服务器:db2start
在主服务器上启动HADR
db2 start hadr on db <database> as primary
可以使用db2pd -db hadrdb -hadr命令检查HADR的启动情况。如果主备机都在"peer"状态证明HADR启动成功。
9. 尝试进行切换(take over)
切换命令只能在备机上执行:
db2 takeover HADR on DB <database> [by force]
关于HADR的其他问题请参考: