5.5. 测试 3:将主数据库故障转移到第三个站点


Expand

测试的主题

将主站点故障转移到第三个站点。第三个站点变为主要网站。

辅助重新注册到第三个站点。

测试前提条件

  • 在 DC1、DC2、DC3 上运行 SAP HANA。
  • 集群已启动并在没有错误或警告的情况下运行。
  • 系统复制就位并同步(检查 % python systemReplicationStatus.py)。

测试步骤

将集群 置于维护模式 以恢复。

使用 % hdbnsuttil -sr_takeover从第三个节点获取 HANA 数据库

启动测试

在 az3n1:rh2adm>: hdbnsutil -sr_takeover上执行 SAP HANA 命令

监控测试

在第三个站点上,以 sidadm% watch hdbnsutil -sr_state身份运行

预期结果

  • 第三个站点运行主数据库。
  • 次要站点将主 master 更改为 az3n1。前一个主站点需要重新注册到新的主站点。

返回初始状态的方法

运行测试 4:将主节点的反馈回第一个站点

详细描述

  • 检查数据库是否使用 Checking 数据库 运行,并检查复制状态:

    az2n1:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
    Copy to Clipboard Toggle word wrap

    输出是:

    mode: syncmem
    primary masters: az1n1
    Copy to Clipboard Toggle word wrap

    在本例中,主数据库是 az1n1。如果在 az1n1 中运行这个命令,您会收到:

    mode: primary
    Copy to Clipboard Toggle word wrap

    在此主站点中,您还可以显示系统复制状态。它应该类似如下:

    az1n1:rh2adm> cdpy
    az1n1:rh2adm> python systemReplicationStatus.py
    |Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replication    |Secondary    |
    |         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status Details |Fully Synced |
    |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ |
    |SYSTEMDB |az1n1 |30201 |nameserver   |        1 |      1 |DC1       |az3n1    |    30201 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |az1n1 |30207 |xsengine     |        2 |      1 |DC1       |az3n1    |    30207 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |az1n1 |30203 |indexserver  |        3 |      1 |DC1       |az3n1    |    30203 |        3 |DC3       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |SYSTEMDB |az1n1 |30201 |nameserver   |        1 |      1 |DC1       |az2n1    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |az1n1 |30207 |xsengine     |        2 |      1 |DC1       |az2n1    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    |RH2      |az1n1 |30203 |indexserver  |        3 |      1 |DC1       |az2n1    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |               |        True |
    
    status system replication site "3": ACTIVE
    status system replication site "2": ACTIVE
    overall system replication status: ACTIVE
    
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    mode: PRIMARY
    site id: 1
    site name: DC1
    Copy to Clipboard Toggle word wrap
  • 现在,我们有一个正确的环境,我们可以开始在单独的窗口中监控所有 3 个节点上的系统复制状态。在测试启动前,应启动 3 个监控器。测试执行时的输出会改变。因此,只要测试没有完成,让它们保持运行。

    在旧的主节点上,az1n1 在测试期间在一个单独的窗口中运行:

    az1n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'
    Copy to Clipboard Toggle word wrap

    az1n1 上的输出为:

    Every 5.0s: python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicati...  az1n1: Tue XXX XX HH:MM:SS 2023
    
    |Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |
    Replication |Replication |Replication    |Secondary    |
    |         |	  |	 |             |          |        |          |Host	 |Port      |Site ID   |Site Name |Active Status |
    Mode        |Status	 |Status Details |Fully Synced |
    |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |
    ----------- |----------- |-------------- |------------ |
    |SYSTEMDB |az1n1 |30201 |nameserver   |        1 |	 1 |DC1       |az3n1    |    30201 |        3 |DC3	  |YES		 |
    ASYNC       |ACTIVE	 |               |        True |
    |RH2	  |az1n1 |30207 |xsengine     |        2 |	 1 |DC1       |az3n1    |    30207 |        3 |DC3	  |YES		 |
    ASYNC       |ACTIVE	 |               |        True |
    |RH2	  |az1n1 |30203 |indexserver  |        3 |	 1 |DC1       |az3n1    |    30203 |        3 |DC3	  |YES		 |
    ASYNC       |ACTIVE	 |               |        True |
    |SYSTEMDB |az1n1 |30201 |nameserver   |        1 |	 1 |DC1       |az2n1    |    30201 |        2 |DC2	  |YES		 |
    SYNCMEM     |ACTIVE	 |               |        True |
    |RH2	  |az1n1 |30207 |xsengine     |        2 |	 1 |DC1       |az2n1    |    30207 |        2 |DC2	  |YES		 |
    SYNCMEM     |ACTIVE	 |               |        True |
    |RH2	  |az1n1 |30203 |indexserver  |        3 |	 1 |DC1       |az2n1    |    30203 |        2 |DC2	  |YES		 |
    SYNCMEM     |ACTIVE	 |               |        True |
    
    status system replication site "3": ACTIVE
    status system replication site "2": ACTIVE
    overall system replication status: ACTIVE
    
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    mode: PRIMARY
    site id: 1
    site name: DC1
    Status 15
    Copy to Clipboard Toggle word wrap

    在 az3n1 中,运行相同的命令:

    az3n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'
    Copy to Clipboard Toggle word wrap

    响应是:

    this system is either not running or is not primary system replication site
    Copy to Clipboard Toggle word wrap

    测试启动故障转移后此更改。输出与测试启动前的主要节点示例类似。

    在第二个节点上,启动:

    az2n1:rh2adm> watch -n 10 'hdbnsutil -sr_state | grep masters'
    Copy to Clipboard Toggle word wrap

    这会显示当前的 master az1n1,并在启动故障转移后立即切换。

  • 要确保正确配置了所有内容,请检查 global.ini
  • 检查 DC1、DC2 和 DC3 上的 global.ini

    在所有三个节点上,global.ini 应包含:

    [persistent]
    log_mode=normal
    [system_replication]
    register_secondaries_on_takeover=true
    Copy to Clipboard Toggle word wrap

    您可以使用以下内容编辑 global.ini

    az1n1:rh2adm>vi /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.ini
    Copy to Clipboard Toggle word wrap
  • [可选] 将集群 置于维护模式

    [root@az1n1]# pcs property set maintenance-mode=true
    Copy to Clipboard Toggle word wrap

    在测试过程中,您将找出故障转移是否正常工作,而不设置 maintenance-mode。因此,您可以运行第一个测试而无需它。在恢复时,应该完成;我只想向您显示其使用以及不使用它。如果 primary 无法访问,这个选项是一个选项。

  • 启动测试:故障转移到 DC3。在 az3n1 上运行:

    az3n1:rh2adm> hdbnsutil -sr_takeover
    done.
    Copy to Clipboard Toggle word wrap

    测试已启动,现在检查之前启动的监视器的输出。在 az1n1 中,系统复制状态丢失了与 az3n1 和 az2n1 (DC2)的关系:

    Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $?                               az1n1: Mon Sep  4 11:52:16 2023
    
    |Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replic
    ation                  |Secondary    |
    |         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status
     Details               |Fully Synced |
    |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------
    ---------------------- |------------ |
    |SYSTEMDB |az1n1 |30201 |nameserver   |        1 |      1 |DC1       |az2n1    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
    ication channel closed |       False |
    |RH2      |az1n1 |30207 |xsengine     |        2 |      1 |DC1       |az2n1    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
    ication channel closed |       False |
    |RH2      |az1n1 |30203 |indexserver  |        3 |      1 |DC1       |az2n1    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ERROR       |Commun
    ication channel closed |       False |
    
    status system replication site "2": ERROR
    overall system replication status: ERROR
    
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    mode: PRIMARY
    site id: 1
    site name: DC1
    Status 11
    Copy to Clipboard Toggle word wrap

    集群仍然没有注意到此行为。如果您检查系统复制状态的返回码,则返回码 11 表示错误,这告诉您发生了错误。如果您有访问权限,则现在进入 maintenance-mode 是个好主意。

    az3n1 变为新的主,而 az2n1 (DC2)会自动注册为 az3n1 上的新主设备。

    az3n1 的系统复制状态的输出示例:

    Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $?                               az3n1: Mon Sep  4 13:55:29 2023
    
    |Database |Host   |Port  |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary     |Replication |Replication |Replic
    ation    |Secondary    |
    |         |       |      |             |          |        |          |Host      |Port      |Site ID   |Site Name |Active Status |Mode        |Status      |Status
     Details |Fully Synced |
    |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------
    -------- |------------ |
    |SYSTEMDB |az3n1 |30201 |nameserver   |        1 |      3 |DC3       |az2n1    |    30201 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
             |        True |
    |RH2      |az3n1 |30207 |xsengine     |        2 |      3 |DC3       |az2n1    |    30207 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
             |        True |
    |RH2      |az3n1 |30203 |indexserver  |        3 |      3 |DC3       |az2n1    |    30203 |        2 |DC2       |YES           |SYNCMEM     |ACTIVE      |
             |        True |
    
    status system replication site "2": ACTIVE
    overall system replication status: ACTIVE
    
    Local System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    mode: PRIMARY
    site id: 3
    site name: DC3
    Status 15
    Copy to Clipboard Toggle word wrap

    返回码 15 也表示一切正常,但缺少 az1n1。这必须手动重新注册。前一个主 az1n1 没有被列出,因此复制关系会丢失。

  • 设置 maintenance-mode

    如果之前还没有完成,使用以下命令在集群的一个节点上设置 maintenance-mode

    [root@az1n1]# pcs property  set maintenance-mode=true
    Copy to Clipboard Toggle word wrap

    运行这个命令检查 maintenance-mode 是否活跃:

    [root@az1n1]# pcs resource
      * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged):
        * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started az2n1node2 (unmanaged)
        * SAPHanaTopology_RH2_02    (ocf::heartbeat:SAPHanaTopology):        Started az1n1node1 (unmanaged)
      * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged):
        * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Slave az2n1node2 (unmanaged)
        * SAPHana_RH2_02    (ocf::heartbeat:SAPHana):        Master az1n1node1 (unmanaged)
      * vip_RH2_02_MASTER   (ocf::heartbeat:IPaddr2):        Started az1n1node1 (unmanaged)
    Copy to Clipboard Toggle word wrap

    资源显示非受管状态,这表示集群处于 maintenance-mode=true 中。虚拟 IP 地址仍在 az1n1 上启动。如果要在另一个节点上使用此 IP,请在设置 maintanence-mode=true 前禁用 vip_RH2_02_MASTER

    [root@az1n1]# pcs resource disable vip_RH2_02_MASTER
    Copy to Clipboard Toggle word wrap
  • 重新注册 az1n1。

    当我们检查 az1n1 上的 sr_state 时,您只看到与 DC2 的关系:

    az1n1:rh2adm> hdbnsutil -sr_state
    
    System Replication State
    ~~~~~~~~~~~~~~~~~~~~~~~~
    
    online: true
    
    mode: primary
    operation mode: primary
    site id: 1
    site name: DC1
    
    is source system: true
    is secondary/consumer system: false
    has secondaries/consumers attached: true
    is a takeover active: false
    is primary suspended: false
    
    Host Mappings:
    ~~~~~~~~~~~~~~
    
    az1n1 -> [DC2] az2n1
    az1n1 -> [DC1] az1n1
    
    
    Site Mappings:
    ~~~~~~~~~~~~~~
    DC1 (primary/primary)
        |---DC2 (syncmem/logreplay)
    
    Tier of DC1: 1
    Tier of DC2: 2
    
    Replication mode of DC1: primary
    Replication mode of DC2: syncmem
    
    Operation mode of DC1: primary
    Operation mode of DC2: logreplay
    
    Mapping: DC1 -> DC2
    done.
    Copy to Clipboard Toggle word wrap

    但是,当检查 DC2 时,主数据库服务器为 DC3。因此 DC1 的信息不正确。

    az2n1:rh2adm> hdbnsutil -sr_state
    Copy to Clipboard Toggle word wrap

    如果我们检查 DC1 上的系统复制状态,则返回码为 12,这未知。因此,需要重新注册 DC1。

    您可以使用此命令注册前一个主 az1n1 作为 az3n1 的新次要。

    az1n1:rh2adm> hdbnsutil -sr_register --remoteHost=az3n1 --remoteInstance=${TINSTANCE} --replicationMode=asyncsyncmem --name=DC1 --remoteName=DC3 --operationMode=logreplay --online
    Copy to Clipboard Toggle word wrap

    注册完成后,您会看到 az3n1 都复制三个站点,状态(重新返回代码)变为 15。

    如果失败,您必须手动删除 DC1 和 DC3 上的复制关系。按照 注册辅助节点 中描述的说明进行操作。

    例如,列出与以下现有关系:

    az1n1:rh2adm> hdbnsutil -sr_state
    Copy to Clipboard Toggle word wrap

    要删除您可以使用的现有关系:

    az1n1:rh2adm> hdbnsutil -sr_unregister --name=DC2`
    Copy to Clipboard Toggle word wrap

    这通常并不需要。我们假定测试 4 将在测试 3 后执行。因此,恢复步骤是运行测试 4。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部