zoukankan      html  css  js  c++  java
  • DB2 HADR配置

    HADR是high availability disaster recovery的简写。组成HADR,需要一对机器(DB2并没有支持多个从机,是因为这样会给系统的管理带来很大麻烦),一个主机(primary),一个从机(secondary)。

    1.数据库版本必须一致,此例为8.2ese

    2.运行db2licm -l 查看是否支持hadr特性

    3.两台机器:  serverA  10.10.20.16 255.255.255.0  serverB  10.10.20.110 255.255.255.0

    4.两台机器均使用默认实例DB2,服务端口号均为 50000

    5.由于安装后注册表参数 db2comm=TCPIP为默认值,   所以下面不再配置,若不是此值,

       必须通过命令   db2set   db2comm=TCPIP为每个相关实例设置

    6.关闭防火墙或打开端口 */

    --在serverA上执行   set db2instance=DB2   db2set db2comm=TCPIP--默认即是  

    db2 terminate   db2stop   db2start

      --创建数据库   db2sampl  

    --修改数据库参数  

    db2 update db cfg for sample using logretain=on  

     db2 update db cfg for sample using trackmod=on  

    db2 update db cfg for sample using logindexbuild=on  

    db2 update db cfg for sample using indexrec=restart

      --备份数据库   db2 backup db sample to f:/test

    --在serverB上:   set db2instance=DB2

     --因为以下命令导致数据库处于前滚暂挂状态,

    db2 restore db sample from f:/test replace history file

    db2 update db cfg for sample using HADR_LOCAL_HOST 10.10.20.110

    db2 update db cfg for sample using HADR_LOCAL_SVC 44444

    db2 update db cfg for sample using HADR_REMOTE_HOST 10.10.20.16

    db2 update db cfg for sample using HADR_REMOTE_SVC 33333

    db2 update db cfg for sample using HADR_REMOTE_INST DB2

    db2 update db cfg for sample using HADR_SYNCMODE nearsync

    --在serverA上配置sample数据库参数

    set db2instance=DB2 db2 update db cfg for sample using HADR_LOCAL_HOST 10.10.20.16

    db2 update db cfg for sample using HADR_LOCAL_SVC 33333

    db2 update db cfg for sample using HADR_REMOTE_HOST 10.10.20.110

    db2 update db cfg for sample using HADR_REMOTE_SVC 44444

    db2 update db cfg for sample using HADR_REMOTE_INST DB2

    db2 update db cfg for sample using HADR_SYNCMODE nearsync

    --在serverB上以standby方式启动sample数据库

    set db2instance=DB2 db2 deactivate database sample

    db2 start hadr on database sample as standby

    --在serverA上以primary方式启动sample数据库

    set db2instance=DB2 db2 start hadr on database sample as primary

    --在serverA上查看sample数据库的hadr状态

    set db2instance=DB2 db2pd -d sample -hadr

    --在serverB上查看sample数据库的hadr状态

    set db2instance=DB2 db2pd -d sample -hadr

    --测试:

    --在serverA上

    set db2instance=DB2

    db2 connect to sample

    db2 create table test(id integer)

    db2 insert into test(1)

    db2 insert into test(2)

    db2 commit

    db2 select * from sample

    --在serverB上 set db2instance=DB2 --接管hadr,如果不能建立与serverA上DB2实例的连接,  

       比如serverA服务器或DB2实例已经关闭,则必须用by force选项如下:

       db2 takeover hadr on database sample user db2admin using db2admin by force

    --正常接管

    db2 takeover hadr on database sample user db2admin using db2admin

    db2 connect to sample db2 select * from test --显示数据表明serverA上的数据应用到了serverB上了

    --查看hadr状态

    db2pd -d sample -hadr

    主机上执行
    db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_HOST 192.168.1.2
    db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_SVC 55001
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_HOST 192.168.1.5
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_SVC 55002
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_INST db2admin
    db2 UPDATE DB CFG FOR XMHIS USING HADR_SYNCMODE NEARSYNC
    db2 UPDATE DB CFG FOR XMHIS USING HADR_TIMEOUT 120

    备机上执行
    db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_HOST 192.168.1.5
    db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_SVC 55002
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_HOST 192.168.1.2
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_SVC 55001
    db2 UPDATE DB CFG FOR XMHIS USING HADR_REMOTE_INST db2admin
    db2 UPDATE DB CFG FOR XMHIS USING HADR_SYNCMODE NEARSYNC
    db2 UPDATE DB CFG FOR XMHIS USING HADR_TIMEOUT 120

    DB2HA可以在OS级别使用专门的HA来实现,也可使用DB2内置的HADR来实现,且配置和管理很简单。

      一个HADR环境需要两台数据库服务器:主数据库服务器(primary)和备用数据库服务器(standby,处于standby角色的数据库不能够被访问)。当主数据库中发生事务操作时,会同时将日志文件通过TCP/IP协议传送到备用数据库服务器,然后备用数据库对接受到的日志文件进行重放(Replay),从而保持与主数据库的一致性。

    当主数据库发生故障时,备用数据库服务器可以接管主数据库服务器的事务处理。

    此时,备用数据库服务器作为新的主数据库服务器进行数据库的读写操作,而客户端应用程序的数据库连接可以通过自动客户端重新路由(Automatic Client Reroute)机制转移到新的主服务器。当原来的主数据库服务器被修复后,又可以作为新的备用数据库服务器加入HADR。通过这种机制,DB2 UDB实现了数据库的灾难恢复和高可用性,最大限度的避免了数据丢失。

    同步方式

    primarystandby 的参数HADR_SYNCMODE用来设置日志的同步方式,参数的设置将取决于DB在事务的响应时间和事务丢失的可能性之间的平衡。

    SYNC:primarystandby DB日志均确认写入成功才认为日志写入成功。

    NEARSYNC:primary DB日志写入成功,standby DB确认接收到日志即认为日志写入成功。

    ASYNC(异步):primary DB日志写入成功,并将日志发送出去之后即认为日志写入成功。

    自动客户端重新路由(automatic client reroute)

    db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.11 PORT 60000

    #此命令用来在primarystandby DB上设置备用数据库信息.

    #ACR 不使用HADR_REMOTE_HOST 和 HADR_REMOTE_SVC 数据库配置参数

     

    DB2 HADR的使用限制

    1. 只有DB2 UDB Enterprise Server EditionESE)支持HADR,但HADR不能支持分区数据库(Database Partitioning FeatureDPF)。

    2. 主数据库和备用数据库必须运行在相同的操作系统版本上,并且DB2 UDB的版本也必须一致,除非短暂的软件升级过程。

    3. 主数据库和备用数据库的位大小必须一致(32位或64位)。

    4. 不能在备用数据库上进行备份操作

    5. 备用数据库是不能访问的,客户端程序无法连接备用数据库。

    6. 日至归档操作只能在主数据库上进行。

    7. 带有COPY NO选项的LOAD命令是不支持的

    8. 主数据库和备用数据库必须是一对一的。

    1. HADR不能使用循环日志

    2. HADR不复制数据库配置参数、共享库、DLLsUDFs或存储过程

     

    HADR操作

    启动和停止   #先启动谁后启动谁

    db2 start HADR on db testdb user a3intest using passwd as standby

    db2 start HADR on db testdb as primary [by force]

    #如果在HADR_TIMEOUT所指定的时间内未能建立与备用数据库HADR的连接,启动会失败,使用by force 选项可以在启动失败时强行启动。

     

    db2 deactivate db testdb

    db2 stop hadr on db testdb

    #stop HADR on standby

     

    db2 stop hadr on db testdb

    #stop HADR on primary

     

     

    查看HADR的连接状态

    当备用数据库的HADR启动时,它首先进入本地同步更新状态。并根据本地日志路径配置参数及日志归档方法的设置检索本地系统中的日志文件并重放。当本地日志文件重放完毕,备用数据库进入远程同步暂挂状态。

    当与主数据库建立连接之后,备用数据库进入远程同步更新状态。即主数据库将自己的日志文件通过TCPIP协议发送给备用数据库,备用数据库接收到日志文件并重放,直到所有日志文件都重放完毕,备用数据库和主数据库进入对等状态

    db2 get snapshot for db on testdb

    #可以查看primary,standby数据库的连接状态

    db2 get db cfg | grep -i hadr

    #查询数据库HADR的相关配置

    接管/故障转移

    当主数据库发生故障时,备用数据库可以接管主数据库的服务,成为新的主数据库(称为故障转移)。当原主数据库修复后,又可以作为备用数据库加入HADR对。

    即使主数据库服务器没有故障,我们通过接管命令(TAKEOVER)切换主数据库和备用数据库的角色

    db2 takeover HADR on db test by force

    #primary DB故障时紧急接管,takeover命令只运行在standby DB上。

    db2 takeover HADR on db testdb

     

    #普通接管

    配置示例

    hostname:primary.ade.com

    IP:172.16.72.11

    OS:RHEL7.0

    package:db2 V10.1FP4 ESE

    instance:a3intest

    port:60000

    db:testdb

    hostname:standby.ade.com

    IP:172.16.72.12

    OS:RHEL7.0

    package:db2 V10.1FP4 ESE

    instance:a3intest

    port:60000

    db:testdb (restored from primary)

    #primary & standby

    DB2_a1intest        60000/tcp  (/etc/services)

    db2set db2comm=tcpip

    db2 update dbm cfg using svcename DB2_a3intest

    ##make sure the following port is available for HADR.

    echo "DB2_HADR_1      61001/tcp" >> /etc/sevices

    echo "DB2_HADR_2      61002/tcp" >> /etc/sevices

    #归档日志

    db2 update db cfg for testdb  using logarchmeth1 logretain

    ##索引日志记录参数

    db2 UPDATE DB CFG FOR testdb USING LOGINDEXBUILD ON

    db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART

    ##primary

    db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.12 PORT 60000

    db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST 172.16.72.11

    db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC DB2_HADR_1

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST 172.16.72.12

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC DB2_HADR_2

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST a3intest

    db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE NEARSYNC

    db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120

    db2 CONNECT TO testdb

    db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS

    db2 UNQUIESCE DATABASE

    db2 CONNECT RESET

    ##backup db on primary

    db2 backup db testdb to /db/a3intest/db2backup

    ##restore db on standby

    db2 restore db testdb from /db/a3intest/db2backup/ taken at 20150203203651 replace history file without prompting

    ##standby

    db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.11 PORT 60000

    db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST 172.16.72.12

    db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC DB2_HADR_2

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST 172.16.72.11

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC DB2_HADR_1

    db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST a3intest

    db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE NEARSYNC

    db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120

    db2 update db cfg for testdb  using logarchmeth1 logretain

    db2 UPDATE DB CFG FOR testdb USING LOGINDEXBUILD ON

    db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART

    #start HADR on standby

    db2 deactivate db testdb

    db2 start hadr on db testdb as standby

    #start HADR on primary

    db2 deactivate db testdb

    db2 start hadr on db testdb as primary

    ##HADR status

    db2pd -db testdb -hadr

    ##HADR_STATE = PEER 表示连接正常

    db2 get snapshot for db on testdb

    ##可以查询HADR的连接状态

    ##stop HADR

    #primary

    db2 stop hadr on db testdb

    #standby

    db2 deactivate db testdb

    db2 stop hadr on db testdb

    ##test HADR

    #primary:

    db2 connect to testdb

    db2 "CREATE TABLE HADRTEST(ID INTEGER NOT NULL WITH DEFAULT,NAME VARCHAR(10),PRIMARY KEY (ID))"

    db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (1,‘a‘)"

    db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (2,‘b‘)"

    db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (3,‘b‘)"

    ##standby

    db2 takeover hadr on db testdb

    db2 get snapshot for db on testdb

    db2 connect to testdb

    db2 "select * from hadrtest"

    首先,说明几个需要注意的问题:

          (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 hostp
           db2 update db cfg for hadrdb using HADR_LOCAL_SVC 54321
           db2 update db cfg for hadrdb using HADR_REMOTE_HOST hosts
           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.sfbao.NODE0000.CATN0000.20091116071458.001

          第四步,将刚才备份的数据库日志文件拷贝到一个从机可以使用的文件系统里面

          第五步,在从数据库上恢复数据库:

           db2 restore db hadrdb from HADRDB.0.sfbao.NODE0000.CATN0000.20091116071458.001

          第六步,配置从数据库的参数

          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 hosts
          db2 update db cfg for hadrdb using HADR_LOCAL_SVC 54321
          db2 update db cfg for hadrdb using HADR_REMOTE_HOST hostp
          db2 update db cfg for hadrdb using HADR_REMOTE_SVC 54321
          db2 update db cfg for hadrdb using HADR_REMOTE_INST db2isnt1
          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

          其实,对于这一步,你只要更新HADR_LOCAL_HOST和HADR_REMOTE_HOST就可以了,因为其他的参数在restore db的时候都会恢复出来。

          第七步,启动从数据库:

          db2 start hadr on db hadrdb as standby

          第八步,启动主数据库:

          db2 start hadr on db hadrdb as primary

      

  • 相关阅读:
    python 网络爬虫框架scrapy使用说明
    计算机数据表示
    NoSQL 数据库应用
    什么是java序列化?什么情况下需要序列化?
    怎么实现动态代理?
    动态代理是什么?应用场景?
    什么是反射?有什么作用?
    nio中的Files类常用方法有哪些?
    什么是JAVA内部类?
    常见的异常类有哪些?
  • 原文地址:https://www.cnblogs.com/chengxuyonghu/p/13626781.html
Copyright © 2011-2022 走看看