5.5. 测试 3:将主数据库故障转移到第三个站点
| 测试的主题 | 将主站点故障转移到第三个站点。第三个站点变为主要网站。 辅助重新注册到第三个站点。 |
| 测试前提条件 |
|
| 测试步骤 |
将集群
使用 |
| 启动测试 |
在 az3n1:rh2adm>: |
| 监控测试 |
在第三个站点上,以 |
| 预期结果 |
|
| 返回初始状态的方法 |
详细描述
检查数据库是否使用 Checking 数据库 运行,并检查复制状态:
az2n1:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
az2n1:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出是:
mode: syncmem primary masters: az1n1
mode: syncmem primary masters: az1n1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,主数据库是 az1n1。如果在 az1n1 中运行这个命令,您会收到:
mode: primary
mode: primaryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在此主站点中,您还可以显示系统复制状态。它应该类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,我们有一个正确的环境,我们可以开始在单独的窗口中监控所有 3 个节点上的系统复制状态。在测试启动前,应启动 3 个监控器。测试执行时的输出会改变。因此,只要测试没有完成,让它们保持运行。
在旧的主节点上,az1n1 在测试期间在一个单独的窗口中运行:
az1n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'az1n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'Copy to Clipboard Copied! Toggle word wrap Toggle overflow az1n1 上的输出为:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 az3n1 中,运行相同的命令:
az3n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'az3n1:rh2adm> watch -n 5 'python /usr/sap/${SAPSYSTEMNAME}/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应是:
this system is either not running or is not primary system replication site
this system is either not running or is not primary system replication siteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 测试启动故障转移后此更改。输出与测试启动前的主要节点示例类似。
在第二个节点上,启动:
az2n1:rh2adm> watch -n 10 'hdbnsutil -sr_state | grep masters'
az2n1:rh2adm> watch -n 10 'hdbnsutil -sr_state | grep masters'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会显示当前的 master az1n1,并在启动故障转移后立即切换。
-
要确保正确配置了所有内容,请检查
global.ini。 检查 DC1、DC2 和 DC3 上的
global.ini:在所有三个节点上,
global.ini应包含:[persistent] log_mode=normal [system_replication] register_secondaries_on_takeover=true
[persistent] log_mode=normal [system_replication] register_secondaries_on_takeover=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用以下内容编辑
global.ini:az1n1:rh2adm>vi /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.iniaz1n1:rh2adm>vi /usr/sap/${SAPSYSTEMNAME}/SYS/global/hdb/custom/config/global.iniCopy to Clipboard Copied! Toggle word wrap Toggle overflow [可选] 将集群
置于维护模式:pcs property set maintenance-mode=true
[root@az1n1]# pcs property set maintenance-mode=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在测试过程中,您将找出故障转移是否正常工作,而不设置
maintenance-mode。因此,您可以运行第一个测试而无需它。在恢复时,应该完成;我只想向您显示其使用以及不使用它。如果 primary 无法访问,这个选项是一个选项。启动测试:故障转移到 DC3。在 az3n1 上运行:
az3n1:rh2adm> hdbnsutil -sr_takeover done.
az3n1:rh2adm> hdbnsutil -sr_takeover done.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 测试已启动,现在检查之前启动的监视器的输出。在 az1n1 中,系统复制状态丢失了与 az3n1 和 az2n1 (DC2)的关系:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群仍然没有注意到此行为。如果您检查系统复制状态的返回码,则返回码 11 表示错误,这告诉您发生了错误。如果您有访问权限,则现在进入
maintenance-mode是个好主意。az3n1 变为新的主,而 az2n1 (DC2)会自动注册为 az3n1 上的新主设备。
az3n1 的系统复制状态的输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回码 15 也表示一切正常,但缺少 az1n1。这必须手动重新注册。前一个主 az1n1 没有被列出,因此复制关系会丢失。
设置
maintenance-mode。如果之前还没有完成,使用以下命令在集群的一个节点上设置
maintenance-mode:pcs property set maintenance-mode=true
[root@az1n1]# pcs property set maintenance-mode=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行这个命令检查
maintenance-mode是否活跃:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 资源显示非受管状态,这表示集群处于
maintenance-mode=true中。虚拟 IP 地址仍在 az1n1 上启动。如果要在另一个节点上使用此 IP,请在设置 maintanence-mode=true 前禁用vip_RH2_02_MASTER。pcs resource disable vip_RH2_02_MASTER
[root@az1n1]# pcs resource disable vip_RH2_02_MASTERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新注册 az1n1。
当我们检查 az1n1 上的
sr_state时,您只看到与 DC2 的关系:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 但是,当检查 DC2 时,主数据库服务器为 DC3。因此 DC1 的信息不正确。
az2n1:rh2adm> hdbnsutil -sr_state
az2n1:rh2adm> hdbnsutil -sr_stateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果我们检查 DC1 上的系统复制状态,则返回码为 12,这未知。因此,需要重新注册 DC1。
您可以使用此命令注册前一个主 az1n1 作为 az3n1 的新次要。
az1n1:rh2adm> hdbnsutil -sr_register --remoteHost=az3n1 --remoteInstance=${TINSTANCE} --replicationMode=asyncsyncmem --name=DC1 --remoteName=DC3 --operationMode=logreplay --onlineaz1n1:rh2adm> hdbnsutil -sr_register --remoteHost=az3n1 --remoteInstance=${TINSTANCE} --replicationMode=asyncsyncmem --name=DC1 --remoteName=DC3 --operationMode=logreplay --onlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注册完成后,您会看到 az3n1 都复制三个站点,状态(重新返回代码)变为 15。
如果失败,您必须手动删除 DC1 和 DC3 上的复制关系。按照 注册辅助节点 中描述的说明进行操作。
例如,列出与以下现有关系:
az1n1:rh2adm> hdbnsutil -sr_state
az1n1:rh2adm> hdbnsutil -sr_stateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除您可以使用的现有关系:
az1n1:rh2adm> hdbnsutil -sr_unregister --name=DC2`
az1n1:rh2adm> hdbnsutil -sr_unregister --name=DC2`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这通常并不需要。我们假定测试 4 将在测试 3 后执行。因此,恢复步骤是运行测试 4。