High Availability Disaster Recovery (HADR)是数据库级别的高可用性数据复制机制。一个HADR环境须要两台数据库服务器:主数据库服务器(primary)和备用数据库服务器(standby)。当主数据库中发生事务操做时,会同时将日志文件经过TCP/IP协议传送到备用数据库服务器,而后备用数据库对接受到的日志文件进行重放(Replay),从而保持与主数据库的一致性。当主数据库发生故障时,备用数据库服务器能够接管主数据库服务器的事务处理。此时,备用数据库服务器做为新的主数据库服务器进行数据库的读写操做,而客户端应用程序的数据库链接能够经过自动客户端从新路由(Automatic Client Reroute)机制转移到新的主服务器。当原来的主数据库服务器被修复后,又能够做为新的备用数据库服务器加入HADR。经过这种机制,DB2 UDB实现了数据库的灾难恢复和高可用性,最大限度的避免了数据丢失。node
下图为DB2 HADR的工做原理图:c++
正常状况下,HADR经过日志自动同步:数据库
当主库异常时,备库进行接管后,应用链接65.33时,自动链接到65.34:服务器
本期采用2台虚拟服务。网络
主机ssh |
IP地址异步 |
配置tcp |
备注ide |
cluster1spa |
192.31.65.21 |
4C,16G |
HADR集群 |
cluster2 |
192.31.65.22 |
4C,16G |
根据原环境,进行部署。主要增长集群配置。详细以下:
一、安装系统包
yum install openssh-clients
yum install redhat-lsb
yum install ksh
yum install libaio
rpm -ivh compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm
yum install compat-libstdc++-33-3.2.3-69.el6.i686.rpm
二、建立组和用户
groupadd -g 101 dasadm1
groupadd -g 102 db2iadm1
groupadd -g 103 db2fadm1
useradd -m -u 500 -d /home/dasusr1 -g dasadm1 dasusr1 -p db2admin
useradd -m -u 501 -d /home/db2admin -g db2iadm1 db2admin -p db2admin
useradd -m -u 502 -d /home/db2fenc1 -g db2fadm1 db2fenc1 -p db2admin
三、修改网络
vi /etc/hosts
192.31.65.21 cluster1
192.31.65.22 cluster2
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=cluster1
四、安装数据库软件
./db2_install -b /opt/ibm/db2/v9.5/ -p ESE
五、安装实例
/opt/ibm/db2/v9.5/instance/db2icrt -s ESE -a server -u db2fenc1 db2admin
六、环境变量配置
db2set DB2_EXTENDED_OPTIMIZATION=ON
db2set DB2_DISABLE_FLUSH_LOG=ON
db2set AUTOSTART=YES
db2set DB2_STRIPED_CONTAINERS=ON
db2set DB2_HASH_JOIN=Y
db2set DB2COMM=tcpip
db2set DB2_PARALLEL_IO=*
db2set DB2CODEPAGE=1386
------------------------以下是HADR配置------------------------
一、环境变量修改
#指定HADR BUF大小,一般HADR BUF是 LOG BUF的4倍。
db2set DB2_HADR_BUF_SIZE=16384
db2set DB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE
db2set DB2_HADR_PEER_WAIT_LIMIT=10
db2set DB2COMM=tcpip
db2set DB2RSHCMD=/usr/bin/ssh
二、参数修改
db2 "UPDATE DB CFG FOR sample USING LOGINDEXBUILD ON" #开启此功能,在索引的建立、重建和重组记录完整的信息,可能须要更多时间和更多的日志空间。会将索引传递到备库进行建立。若是不开启,当备库接管时,索引将被置为无效。
db2 "UPDATE DB CFG FOR sample USING INDEXREC RESTART" #完成接管操做以后,重建无效索引。
修改实例参数:
db2 update dbm cfg using SVCENAME 50001
三、备份数据库:
db2 "backup db sample online to /home/db2admin"
四、将备份数据传送到备节点。
五、恢复数据库
db2 "RESTORE DATABASE sample FROM "/home/db2admin" TAKEN AT 20170511172554 REPLACE HISTORY FILE WITHOUT PROMPTING"
[db2admin@cluster2 ~]$ db2 "RESTORE DATABASE sample FROM "/home/db2admin" TAKEN AT 20170511172554 REPLACE HISTORY FILE WITHOUT PROMPTING"
DB20000I The RESTORE DATABASE command completed successfully.
或者直接覆盖现有数据库:
db2 "RESTORE DATABASE sample FROM "/home/db2admin" TAKEN AT 20170511172554 REPLACE EXISTING WITHOUT PROMPTING"
六、配置客户端自动路由。在主数据库服务器(cluster21)上:db2 "UPDATE ALTERNATE SERVER FOR DATABASE sample USING HOSTNAME 192.31.65.22 PORT 50001" #配置备用数据库。在备用数据库服务器上(cluster2):db2 "UPDATE ALTERNATE SERVER FOR DATABASE sample USING HOSTNAME 192.31.65.21 PORT 50001" #配置备用数据库。七、配置HADR服务和侦听端口用vi编辑/etc/services文件(须要切换到root用户),加入下面两行:DB2_HADR_1 55001/tcpDB2_HADR_2 55002/tcp注:这一步不是必须的,由于在下面配置HADR_LOCAL_SVC和HADR_REMOTE_SVC数据库参数的时候能够直接使用端口号来替代服务名。八、修改HADR相关参数参数--修改主用数据库db2 "UPDATE DB CFG FOR sample USING HADR_LOCAL_HOST cluster1 "db2 "UPDATE DB CFG FOR sample USING HADR_LOCAL_SVC DB2_HADR_1 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_HOST cluster2 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_SVC DB2_HADR_2 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_INST db2admin "db2 "UPDATE DB CFG FOR sample USING HADR_SYNCMODE NEARSYNC " db2 "UPDATE DB CFG FOR sample USING HADR_TIMEOUT 120"db2 "CONNECT TO sample"db2 "QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS "db2 "UNQUIESCE DATABASE sample"db2 "CONNECT RESET"#SYNC:同步,写入备用数据库上的日志文件时,方才认为日志写入是成功的;NEARSYNC:接近同步,在此方式中,仅当日志记录已写入主数据库上的日志文件,并且主数据库已接收到来自备用系统的应答;ASYNC:异步,日志传递给主系统主机的 TCP 层时,不等待备库相应,就认为成功;SUPERASYNC,超异步,写入主库日志,即认为成功。 --修改备用数据库db2 "UPDATE DB CFG FOR sample USING HADR_LOCAL_HOST cluster2 "db2 "UPDATE DB CFG FOR sample USING HADR_LOCAL_SVC DB2_HADR_2 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_HOST cluster1 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_SVC DB2_HADR_1 "db2 "UPDATE DB CFG FOR sample USING HADR_REMOTE_INST db2admin "db2 "UPDATE DB CFG FOR sample USING HADR_SYNCMODE NEARSYNC "db2 "UPDATE DB CFG FOR sample USING HADR_TIMEOUT 120 "九、启用HADR。--首先启用备用数据库关系:db2 "DEACTIVATE DATABASE sample"db2 "START HADR ON DATABASE sample AS STANDBY"--而后启用主库HADR状态:db2 "DEACTIVATE DATABASE sample"db2 "START HADR ON DATABASE sample AS PRIMARY"#须要关闭防火墙,不然报错:“SQL1768N Unable to start HADR. Reason code = "7".”[db2inst1@sg1 ~]$ db2 "start hadr on database sample as primary"DB20000I The START HADR ON DATABASE command completed successfully.十、查看HADR状态:#查看状态为 peer:[db2inst1@sg1 ~]$ db2pd -d sample -hadrDatabase Partition 0 -- Database sample -- Active -- Up 0 days 00:01:43 -- Date 2017-05-02-19.23.09.352187HADR Information:Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)Primary Peer Nearsync 0 0 ConnectStatus ConnectTime Timeout Connected Tue May 2 19:21:27 2017 (1493724087) 120 LocalHost LocalService sg1 DB2_HADR_1 RemoteHost RemoteService RemoteInstance sg2 DB2_HADR_2 db2inst1 PrimaryFile PrimaryPg PrimaryLSN S0000005.LOG 0 0x0000000002EE0000StandByFile StandByPg StandByLSN S0000005.LOG 0 0x0000000002EE0000 ---------------------------------在客户端,尝试链接#--编目节点db2 catalog tcpip node cluster1 remote 192.31.65.21 server 50001 --编目数据库db2 "catalog db sample at node cluster1"