问题描述:
gcrcman在非原集群上恢复时,会遇到拓扑结构检查与元集群不一致的问题。
问题原因:
原集群和待恢复集群的拓扑结构存在差异,导致无法恢复。
拓扑对比的前提:
gcrcman 是按照2个集群的拓扑结构的字符串进行比对的。所以不接受一切的字符串级别的不一致。
样例: (gcrcman日志里的报错信息)
环境1:
{'coordinators': ({'nodename': 'coordinator1'}, {'nodename': 'coordinator2'}, {'nodename': 'coordinator3'}), 'vc_array': ({'dataservers': ({'nodename': 'node1'}, {'nodename': 'node2'}, {'nodename': 'node3'}), 'distributions': ({'pairs': ({'DupNodeName': ['node2'], 'PrimaryNodeName': 'node1'}, {'DupNodeName': ['node3'], 'PrimaryNodeName': 'node2'}, {'DupNodeName': ['node1'], 'PrimaryNodeName': 'node3'}), 'id': 2},), 'vcname': 'vcname000001', 'vcid': 'vc00001'},)}
环境2:
{'coordinators': ({'nodename': 'coordinator1'}, {'nodename': 'coordinator2'}, {'nodename': 'coordinator3'}),'vc_array': ({'dataservers': ({'nodename': 'node1'}, {'nodename': 'node2'}, {'nodename': 'node3'}), 'distributions': ({'pairs': ({'PrimaryNodeName': 'node1', 'DupNodeName': ['node2']}, {'PrimaryNodeName': 'node2', 'DupNodeName': ['node3']}, {'PrimaryNodeName': 'node3', 'DupNodeName': ['node1']}), 'id': 1},), 'vcid': 'vc00001', 'vcname': 'vcname000001'},)}
两个环境的异同:
<1>都是3节点环境coordinator和node对应关系相同。
<2>PrimaryNodeName 和 DupNodeName 虽然2个集群主备片和node的对应关一致,但书写顺序不一致也不行。
<3>id的编号不一致也不行(这里的id指distributionid) 也就是说任何情况(如扩容,缩容,节点替换)造成的distributionid不同也不行
解决方案:
(1)卸载待恢复集群
(2)重新安装待恢复集群
(3)待恢复集群建distribution时,按照以下方式创建:
<1> 新建:gcChangeInfo.xml
<2> 原集群: gcadmin getdistribution 原集群最新distributionid号 distribution.xml
<3> 按照自定义的ip对应关系,把待恢复集群的ip对应替换文件distribution.xml中的ip
<4> 待恢复集群执行: gcadmin distribution gcChangeInfo.xml
(4)安装成功后,即可执行恢复操作