签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦 数据库 数据守护(Data Watch) (13) -- DW的主备库切换

2019-09-14 22:39 3745 1 原创 DM 达梦
作者: dave

主备库的切换与监视器的配置模式有很大关系,关于监视器,之前的博客有说明,如下:

DM7 达梦 数据库 数据守护(Data Watch) (4) — 监视器
https://www.cndba.cn/dave/article/3669

1主备库切换

主库维护,滚动升级等场景,可以执行 Switchover 命令,实现主备库切换。如果存在多个备库,需要先执行 Choose Switchover 命令,选出守护进程组中可以切换的备库。

http://www.cndba.cn/cndba/dave/article/3683

Choose Switchover 命令选择可切换备库的条件如下:http://www.cndba.cn/cndba/dave/article/3683

  1. 主库守护进程是 Open 状态
  2. 备库守护进程是 Open 状态
  3. 主、备库守护进程控制文件 dmwatcher.ctl 相同,且为 Valid 状态
  4. 主库正常运行
  5. 备库正常运行
  6. 主库处于 Open 状态
  7. 备库处于 Open 状态
  8. 主库到备库的归档是 Valid 状态

假定选出的可切换备库是 B,Switchover 切换流程如下:

  1. 通知主备库守护进程,切换为 Switchover 状态
  2. 通知主库(A) Mount
  3. 实时或 MPP 主备环境下,通知备库(B) APPLY KEEP_BUF
  4. 通知备库(B) Mount
  5. 通知(A) 切换为 Standby 模式
  6. MPP 主备环境下,通知(A)修改 MPP_INI 内存值为 0
  7. 通知(B) 切换为 Primary 模式
  8. 通知(B) 修改所有归档目标的归档状态为无效
  9. 通知守护进程(B)修改控制文件,增加一条切换记录
  10. MPP 主备需要通知各组活动主库更新 dmmpp.ctl 文件
  11. 通知新的备库(A) Open
  12. 通知新的主库(B) Open
  13. 通知主备库守护进程切换为 Open 状态
  14. 清理所有守护进程上记录的监视器信息

其中第 10 步,MPP 主备环境下更新 dmmpp.ctl 步骤说明如下:

  1. 收集各组的活动主库信息,构造新的 dmmpp.ctl 文件。
    主库收集条件:
    a. 组中只有一个活动主库,不存在多个 OPEN 主库
    b. 主库守护进程不是 Error 状态,且控制文件是有效状态
    c. 主库实例不是 Error 状态
  2. 通知步骤 1 中收集到的主库更新 dmmpp.ctl 文件
    首先通知执行 Switchover 命令的守护进程组的主库执行更新操作,再通知其他组的主库执行更新操作,通知其他组执行更新操作时,会先将其主库的守护进程切换为MPPCTL UPDATE 状态,更新完成后,再切换回 OPEN 状态。
    对步骤 1 中不符合收集条件的组,在步骤 2 中跳过不再处理,后续待其主库恢复正常后,可借助 RECOVER MPPCTL 命令恢复 dmmpp.ctl 文件到一致状态。
    更新 MPP 控制文件时,服务器自动断开当前所有的会话连接,回滚未提交事务,挂起所有工作线程,该过程可能会持续一段时间。
  3. 根据步骤 2 的结果决定是否继续执行 Switchover 的后续步骤
    步骤 2 中如果某个活动主库更新失败,则终止切换,执行失败。
    主备库切换在实现逻辑上等同于主备库正常状态下,用户主动发起的Takeover 操作。Swithover 完成后,主备库之间数据是不完全同步的;要由新主库 B 的守护进程通过 Recovery 流程,重新同步数据和dmwatcher.ctl 到新备库 A。

Switchover 命令,会修改切换后主库守护进程 INST_RECOVER_TIME 内存值为 0(默认 60 秒),确保尽快启动故障恢复流程,同步主库数据完成后,重新将归档设置为 Valid 状态。在故障恢复流程完成之前,再次执行Switchover 命令会报错,如果主库故障,备库接管将会报错;备库强制接管会引发守护进程组分裂。

2主库故障、备库接管

当出现硬件故障(掉电、存储损坏等)原因,主库无法启动,或者是主库内部网卡故障,导致主库短期不能恢复正常的情况下,可使用备库接管功能,将备库切换为主库继续对外服务。

故障自动切换模式下,确认监视器会自动选择符合条件的备库进行接管。
故障手动切换模式下,可以先在监视器上执行 Choose Takeover 命令,选出守护进程组中可以接管的备库。

为了避免备库接管后,造成守护进程组分裂,执行 Takeover 必须满足下列条件:

  1. 主库是 Primary 模式、Open 状态时,产生故障
  2. 主库守护进程故障,故障前是 Open/Recovery 状态;或者主库守护进程正常
  3. 故障主库到接管备库的归档状态为 Valid
  4. 接管备库是 Standby 模式、Open 状态
  5. 接管备库的 dmwatcher.ctl 控制文件状态为 Valid
  6. 故障主库和接管备库的 dmwatcher.ctl 控制文件相同

假设主库 A 故障时,在故障自动切换模式下确认监视器自动选出待接管备库 B 并通知备库 B 自动接管,或者在故障手动切换模式下,通过监视器上的 Choose Takeover 命令,选出待接管备库 B,在监视器上输入 Takeover 命令通知备库 B 执行接管,这两种方式的接管执行流程是一样的。http://www.cndba.cn/cndba/dave/article/3683

以备库 B 为例,接管的执行流程包括:

  1. 监视器通知守护进程(B)切换为 Takeover 状态
  2. 实时主备或 MPP 主备环境下,通知备库(B) APPLY KEEP_BUF
  3. 通知备库(B) Mount
  4. 通知(B) 切换为 Primary 模式
  5. 通知(B) 修改到所有归档目标的归档状态为 Invalid
  6. 通知守护进程(B)修改控制文件,增加一条接管记录
  7. MPP 主备需要通知活动主库更新 dmmpp.ctl 文件
  8. 通知新的主库(B) Open
  9. 通知守护进程(B)切换为 Open 状态

例如,主库 C 故障,备库 B 接管。执行 Takeover 命令后,会修改守护进程(B)的 INST_RECOVER_TIME 内存值为 0(默认 60 秒),确保尽快启动 B->C的故障恢复流程,同步主库数据完成后,重新将 B->C 的归档设置为 Valid 状态。在故障恢复流程完成之前,主库(B)故障,备库(C)无法接管;强制备库(C)接管会引发守护进程组分裂。

3备库强制接管

有些情况下,备库接管会失败,但主库不能启动或者及时恢复对外服务的情况下,可以使用 Takeover Force 命令,进行备库强制接管。强制接管具有一定的风险,可能导致备库和故障主库数据不一致,而造成部分数据的丢失,出现数据库分裂的情况,所以应该慎重使用。

比如主库和守护进程故障时,监视器未启动,用户启动监视器后,由于监视器并未收到故障主库任何信息,因此不满足 Takeover 条件,执行 Takeover 会报错。如果用户可确认主库故障时主备数据是一致的(比如故障时主库未执行操作,主备库归档有效的,并且两者的 SLSN 一致)、或者丢失小部分数据的影响可忽略、或者丢失小部分数据的影响小于主库持续宕机造成的影响,则可以考虑执行 takeover force 强制接管。

强制接管,先通过 Choose Takeover Force 选出符合强制接管条件的备库,再执行 Takeover Force 命令。备库强制接管时,如果接管备库是处于 Mount 状态/Standby模式的库,则会自动 Open 备库,其他执行流程与备库接管一致。

强制接管的条件包括:

  1. 不存在活动主库
  2. 备库守护进程处于 Open 或 Startup 状态
  3. 备库实例运行正常
  4. 备库是 Standby 模式
  5. 备库处于 Open 或 Mount 状态
  6. 备库 SLSN 必须是所有备库中最大的
  7. 备库守护进程控制文件必须有效

与 Takeover 命令一样,Takeover Force 命令会修改主库守护进程的INST_RECOVER_TIME 内存值为 0(默认 60 秒),确保尽快启动故障恢复流程。
强制接管具有一定的风险,可能导致备库和故障主库数据不一致,而造成部分数据的丢失、数据库分裂,所以应该综合考虑当时情况,慎重使用。http://www.cndba.cn/cndba/dave/article/3683

4主库故障重启(备库接管前重启)

主库故障后立即重启,此时主库的守护进程变成 Startup 状态,重新进入守护进程的启动流程,将所有备库归档设置成无效状态,并重新 Open 主数据库。Open 成功后继续作为主库,当检测到备库正常时会启动 Recovery 处理流程,重新同步主备库数据。

5备库故障处理

备库产生故障(硬件故障或者内部网卡故障)时,主库的处理流程对手动切换、自动切换模式处理上有些差异。

5.1 手动切换模式

对于手动切换模式,检测到备库故障,满足 Failover 条件时,主库的守护进程立即切换到 Failover 状态,执行对应的故障处理,如果不满足切换 Failover 条件,则保持当前状态不变。http://www.cndba.cn/cndba/dave/article/3683

手动切换模式下,主库守护进程切换 Failover 条件:

  1. 备库实例故障,或者主备库之间出现网络故障,或者备库重演时校验 LSN 不匹配,这三种场景下引发主库同步日志到备库失败挂起,主库实例处于 Suspend 状态
  2. 主库到此备库的归档状态是 Valid(读写分离集群没有此限制)
  3. 主库的守护进程处于 Startup 或 Open 状态
  4. 当前没有监视器命令正在执行

5.2 自动切换模式

对于自动切换模式,主库的守护进程会自动判断切换到 Failover 状态或者 Confirm确认状态,如果两种状态切换条件都不满足,则保持当前状态不变。

自动切换模式下,主库守护进程不进入 Confirm 确认状态,直接切换 Failover 条件:

  1. 前四项条件,和上面列出的手动切换条件相同
  2. 备库实例故障,备库守护进程正常

如果只满足条件 1,不满足条件 2,则主库守护进程会先进入 Confirm 确认状态,等待确认监视器的确认消息。主库的守护进程进入 Confirm 确认状态后,会有下面几种不同的处理:

1. 主库和确认监视器之间网络连接正常

主库的守护进程收到了确认监视器返回的确认消息,如果确认监视器认定可以执行Failover,则主库的守护进程会切换为 Failover 状态并执行对应的处理,如果确认监视器认定不满足执行 Failover 条件,则主库的守护进程会一直保持在 Confirm 状态。确认监视器认定主库可以执行 Failover 条件:

a. 主库守护进程处于 Confirm 状态
b. 主库实例正常,处于 Suspend 状态
c. 主库没有被接管,不存在其他主库
d. 没有 takeover/switchover 命令在执行
e. 当前所有归档有效的备库守护进程控制文件可以加入主库http://www.cndba.cn/cndba/dave/article/3683

2. 主库和确认监视器之间网络连接异常,或者没有启动确认监视器。满足下面条件后主库允许切换 failover 状态执行故障处理:

a. 主库实例正常,处于 Open 或 Suspend 状态
b. 备库守护进程正常
c. 主库没有被接管,不存在其他主库
d. 没有 takeover/switchover 命令正在执行
e. 故障备库的守护进程控制文件可以加入主库

3. 主库和确认监视器网络恢复正常后,主库已经被接管。老主库的守护进程切换为Startup 状态,重新判断是否可加入新主库。

主库守护进程进入 Failover 状态后的执行流程(自动或手动切换模式下执行流程相同):

a. 对实时主备或 MPP 主备,通知主库修改发送归档失败的备库归档状态无效
b. 通知主库重新 Open
c. 将主库的守护进程切换为 Open 状态

6 测试

6.1 监视器命令

在之前的博客中我们提到在监视器中可以执行很多的命令。

DM7 达梦 数据库 数据守护(Data Watch) (4) — 监视器
https://www.cndba.cn/dave/article/3669

这里有个前提条件就是不能是自动切换模式,否则在监视器中执行命令时会报如下错误:

help
Processing log print or auto takeover now, please retry later

http://www.cndba.cn/cndba/dave/article/3683
http://www.cndba.cn/cndba/dave/article/3683

在自动切换模式中,主备库的启动和切换由监视器自动管理。 不需要手工干预。

6.2 kill 备库进程

当前监视器显示一切正常:

[monitor]         2029-03-14 12:42:57: Received message from(GRP2_RWW_01)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 12:42:57  OPEN           OK        GRP2_RWW_01      OPEN        PRIMARY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 12:42:57: Received message from(GRP2_RWW_03)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 12:42:57  OPEN           OK        GRP2_RWW_03      OPEN        STANDBY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 12:42:57: Received message from(GRP2_RWW_02)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 12:42:57  OPEN           OK        GRP2_RWW_02      OPEN        STANDBY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 12:42:57: Received message from(GRP2_RWW_04)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:39:04  OPEN           OK        GRP2_RWW_04      OPEN        STANDBY   VALID    6        262184         262184         262184         262184    

#Kill 掉一个备库:
[dave@www.cndba.cn2 ~]$ ps -ef|grep dm.ini
dmdba     1591     1  0 Sep13 ?        00:01:11 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/CNDBA/dm.ini mount
dmdba    22715 22602  0 18:48 pts/1    00:00:00 grep dm.ini
[dave@www.cndba.cn2 ~]$ kill -9 1591

#监视器会自动启动从库:

[monitor]         2029-03-14 12:52:19: Instance GRP2_RWW_04[STANDBY, OPEN] error 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:48:26  OPEN           ERROR     GRP2_RWW_04      OPEN        STANDBY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 12:52:19: Dmwatcher process GRP2_RWW_04 status switching [OPEN-->STARTUP] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:48:26  STARTUP        ERROR     GRP2_RWW_04      OPEN        STANDBY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 12:52:34: Instance GRP2_RWW_04[STANDBY, AFTER REDO] recover to OK 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:48:41  STARTUP        OK        GRP2_RWW_04      AFTER REDO  STANDBY   VALID    6        262184         262184         0              262184         

[monitor]         2029-03-14 12:52:35: Dmwatcher process GRP2_RWW_04 status switching [STARTUP-->OPEN] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:48:42  OPEN           OK        GRP2_RWW_04      OPEN        STANDBY   VALID    6        262184         262184         262184         262184         


#查看监视器日志:

[GRP2_RWW_04]      2019-09-14 18:48:33 [INFO] DM watch P0000001523 T0000140062583256832  [!!! Local instance restarted by dmwatcher. !!!]
[monitor]         2029-03-14 12:52:34: <INST CHECK GRP2_RWW_04>
[monitor]         2029-03-14 12:52:34: Instance GRP2_RWW_04[STANDBY, AFTER REDO] recover to OK 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2019-09-14 18:48:41  STARTUP        OK        GRP2_RWW_04      AFTER REDO  STANDBY   VALID    6        262184         262184         0              262184         

[monitor]         2029-03-14 12:52:34: </INST CHECK GRP2_RWW_04>

[GRP2_RWW_04]      2019-09-14 18:48:41 [INFO] DM watch P0000001523 T0000140062581671680  Server public key changed, broadcast new value to monitor


#查看之前kill 的备库进程,有自动起来了:
[dave@www.cndba.cn2 ~]$ ps -ef|grep dm.ini
dmdba    22717     1  0 18:48 ?        00:00:00 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/CNDBA/dm.ini mount
dmdba    22795 22602  0 18:48 pts/1    00:00:00 grep dm.ini
[dave@www.cndba.cn2 ~]$

6.3 Kill主库

[dave@www.cndba.cn3 ~]$ ps -ef|grep dm.ini
dmdba     2676     1  0 Mar13 ?        00:02:03 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/CNDBA/dm.ini mount
dmdba    10138  9563  0 13:07 pts/1    00:00:00 grep dm.ini
[dave@www.cndba.cn3 ~]$ kill -9 2676
[dave@www.cndba.cn3 ~]$ 

查看监视器的自动处理过程:
[monitor]         2029-03-14 13:07:57: Instance GRP2_RWW_01[PRIMARY, OPEN] error 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:07:57  OPEN           ERROR     GRP2_RWW_01      OPEN        PRIMARY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 13:07:57: Dmwatcher process GRP2_RWW_01 status switching [OPEN-->STARTUP] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:07:57  STARTUP        ERROR     GRP2_RWW_01      OPEN        PRIMARY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 13:08:13: Instance GRP2_RWW_01[PRIMARY, MOUNT] recover to OK 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:08:13  STARTUP        OK        GRP2_RWW_01      MOUNT       PRIMARY   VALID    6        262184         262184         262184         262184         

[monitor]         2029-03-14 13:08:14: Dmwatcher process GRP2_RWW_01 status switching [STARTUP-->OPEN] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:08:15  OPEN           OK        GRP2_RWW_01      OPEN        PRIMARY   VALID    7        267151         267151         267151         267151         

[monitor]         2029-03-14 13:08:17: Dmwatcher process GRP2_RWW_01 status switching [OPEN-->RECOVERY] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:08:18  RECOVERY       OK        GRP2_RWW_01      OPEN        PRIMARY   VALID    7        267151         267151         267151         267151         

[monitor]         2029-03-14 13:08:21: Dmwatcher process GRP2_RWW_01 status switching [RECOVERY-->OPEN] 
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:08:22  OPEN           OK        GRP2_RWW_01      OPEN        PRIMARY   VALID    7        267151         267151         267151         267151

6.4 模拟主库故障

之前我们测试kill进程,都会被确认监视器自动启动。 我们这次模拟出库故障。之间删除主库文件,在kill 进程,在这种情况下,主库是无法正常启动的。

#破坏主库:
[dave@www.cndba.cn3 data]$ ps -ef|grep dm.ini
dmdba    10712     1  0 13:24 ?        00:00:00 /dm/dmdbms/bin/dmserver /dm/dmdbms/data/CNDBA/dm.ini mount
dmdba    10940 10913  0 13:28 pts/2    00:00:00 grep dm.ini
[dave@www.cndba.cn3 data]$ cd CNDBA/
[dave@www.cndba.cn3 CNDBA]$ pwd
/dm/dmdbms/data/CNDBA
[dave@www.cndba.cn3 CNDBA]$ ls
bak          ctl_bak     dm.ini                    dmmal.ini                      dmwatcher.ctl  HMAIN             ROLL.DBF    TEMP.DBF
CNDBA01.log  dmarch.ini  dminit20290312091350.log  dm_service.prikey              dmwatcher.ini  MAIN.DBF          sqllog.ini  trace
CNDBA02.log  dm.ctl      dminst.sys                dmsql.buf1868068849525580.buf  GRP2           rep_conflict.log  SYSTEM.DBF
[dave@www.cndba.cn3 CNDBA]$ mv SYSTEM.DBF SYSTEM.DBF.bak
[dave@www.cndba.cn3 CNDBA]$ kill -9 10712

#监视器尝试启动主库:
[GRP2_RWW_01]      2029-03-14 13:29:11 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:29:43 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:30:15 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:30:46 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:31:17 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:31:48 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:32:19 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:32:51 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:33:23 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:33:54 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:34:25 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:34:56 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:35:27 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]
[GRP2_RWW_01]      2029-03-14 13:35:58 [INFO] DM watch P0000003079 T0000140343943522048  [!!! Local instance restarted by dmwatcher. !!!]

从日志看,此时监视器一直在尝试不断重启,并没有发生自动切换的动作。

这种模拟方法无效。 恢复之前移除的文件,恢复正常。

http://www.cndba.cn/cndba/dave/article/3683

6.5 直接将主库网络全部中断,模拟主库异常

[root@dm3 ~]# service network stop
Shutting down interface eth0:  Device state: 3 (disconnected)
                                                           [  OK  ]


#查看监视器日志:
[monitor]         2029-03-14 13:41:30: <RECEIVE TIMEOUT GRP2_RWW_01>
[monitor]         2029-03-14 13:41:30: Received message timeout from(GRP2_RWW_01)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN           CLSN           SSLSN          SLSN           
                  2029-03-14 13:41:19  ERROR          OK        GRP2_RWW_01      OPEN        PRIMARY   VALID    9        277085         277085         277085         277085         

[monitor]         2029-03-14 13:41:30: </RECEIVE TIMEOUT GRP2_RWW_01>

[monitor]         2029-03-14 13:41:30: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_02[STANDBY, OPEN] can do auto takeover. !!!]

[monitor]         2029-03-14 13:41:30: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_03[STANDBY, OPEN] can do auto takeover. !!!]

[monitor]         2029-03-14 13:41:30: dwmon_tcp_recv failed, close port, vio:0, mid:1868157777, errno:0, code:-6007
[monitor]         2029-03-14 13:41:30: mon tcp port vio(0) close
[monitor]         2029-03-14 13:41:30: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_04[STANDBY, OPEN] can do auto takeover. !!!]

[GRP2_RWW_02]      2029-03-14 13:41:30 [INFO] DM watch P0000029063 T0000140200939845376  Instance: dmwatcher status(ERROR) Instance status(OK) Instance Name(GRP2_RWW_01) Mode(PRIMARY) Instance status(OPEN) Arch status(UNKNOWN) POCNT(9) FLSN(277085) CLSN(277085) SLSN(277085) SSLSN(277085).

这里提示我们主库连接超时,备库2,3,4 可以做auto takeover,但是监视器并没有主动帮我们做这个动作。而是等待。 所以这里条件还不满足自动切换的条件。

http://www.cndba.cn/cndba/dave/article/3683

直接将主库系统关闭:

[root@dm3 ~]# shutdown -h now

Broadcast message from root@dm3
    (/dev/pts/1) at 14:21 ...

The system is going down for halt NOW!
[root@dm3 ~]# 

监视器告警和之前一样,只是提示我们可以切换,并没有自动帮我们做:
[monitor]         2029-03-14 14:21:25: </RECEIVE TIMEOUT GRP2_RWW_01>

[monitor]         2029-03-14 14:21:25: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_02[STANDBY, OPEN] can do auto takeover. !!!]

[monitor]         2029-03-14 14:21:25: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_03[STANDBY, OPEN] can do auto takeover. !!!]

[monitor]         2029-03-14 14:21:25: [!!! Instance GRP2_RWW_01[PRIMARY, OPEN] error, instance GRP2_RWW_04[STANDBY, OPEN] can do auto takeover. !!!]

[monitor]         2029-03-14 14:21:25: dwmon_tcp_recv failed, close port, vio:0, mid:1868157777, errno:107, code:-6007
[monitor]         2029-03-14 14:21:25: mon tcp port vio(0) close
[GRP2_RWW_03]      2029-03-14 14:21:25 [INFO] DM watch P0000028500 T0000140199889864448  Do not receive remote dmwatcher(GRP2_RWW_01) message, original status is OPEN, time after last received msg(11)s, last set remote dmwatcher ERROR.
[GRP2_RWW_03]      2029-03-14 14:21:25 [INFO] DM watch P0000028500 T0000140199889864448  Local instance: dmwatcher status(OPEN) Instance status(OK) Instance Name(GRP2_RWW_03) Mode(STANDBY) Instance status(OPEN) Arch status(UNKNOWN) POCNT(10) FLSN(282052) CLSN(282052) SLSN(282052) SSLSN(282052).
[GRP2_RWW_03]      2029-03-14 14:21:25 [INFO] DM watch P0000028500 T0000140199889864448  Instance: dmwatcher status(ERROR) Instance status(OK) Instance Name(GRP2_RWW_01) Mode(PRIMARY) Instance status(OPEN) Arch status(UNKNOWN) POCNT(10) FLSN(282052) CLSN(282052) SLSN(282052) SSLSN(282052).

7 小结

按照官方的配置测试,主备库切换测试无法成功。 鉴于目前官方资料有限,暂时测试到这里,后期有其他内容,在进行补充。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8183451次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ