暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CMDB数据库双中心搭建流程

IT那活儿 2024-07-23
103

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


目 的

本文档介绍了磐维数据库PanWeiDB V2.0.0基于gs_sdr工具,在不借助额外存储介质的情况下实现跨Region的异地容灾。提供流式容灾搭建,容灾升主,计划内主备切换,容灾解除、容灾状态监控等功能。


知识点描述

2.1 CMDB双中心集群优势
  • 主集群具备单集群组网的优点,只有主集群彻底不可用后才需要手动切换为备集群。
  • 跨集群(异地)复制链路无论是否发生容灾切换都只有一条,占用网络带宽相对较少。
  • 组网更加灵活,主集群和灾备集群都可以选择不同的组网。
  • 支持灾备集群failover。
  • 支持主备集群计划内switchover。

2.2 前提条件

  • 存在两个独立运行且状态正常的集群【集群实例个数>=2】,需要集群间网络、端口互通
  • 搭建容灾的主备集群版本号必须相同。
  • 搭建容灾关系前,主集群需创建具有流复制权限的容灾用户,用于容灾鉴权,主备集群必须使用相同的容灾用户名和密码,一次容灾搭建后,该用户密码不可修改。若需修改容灾用户名与密码,需要解除容灾,使用新的容灾用户重新进行搭建。容灾用户密码中不可包含以下字符“| ;&$<>`\'“{}()[]~*?!\n空白”。
  • 流式容灾搭建前不支持已存在首备及级联备。


双中心搭建步骤

3.1 集群信息

【该环境为个人虚拟机环境搭建,不涉及生产IP】
集群信息
节点IP
角色
VIP
数据库版本
cmdb_clu01
【主集群】
192.168.254.21
主(Primary)
192.168.254.25
(PanWeiDB 2.0.0 (Build0)) compiled at
2024-01-05 17:19:18 commit 9fbca90
192.168.254.22
备一(Standby)
cmdb_clu02
【备集群】
192.168.254.31
主(Primary)
192.168.254.35
(PanWeiDB 2.0.0 (Build0)) compiled at
2024-01-05 17:19:18 commit 9fbca90
192.168.254.32
备一(Standby)
3.2 更新部署集群的XML配置文件

注:

  • 需要在主节点<DEVICE sn="cmdbp01">和</DEVICE>标签内部添加三个参数;
  • 三个参数分别为localStreamIpmap1、remoteStreamIpmap1和remotedataPortBase。
    localStreamIpmap1为本地集群IP列表,值为(IP1,MAP_IP1),(IP2,MAP_IP2),...;
    remoteStreamIpmap1为双中心另一套集群IP列表,值同样为(IP1,MAP_IP1),(IP2,MAP_IP2),...;
    remotedataPortBase为另一套集群数据库地址,一般默认为17700。
    【IP1为集群内部节点实际地址,MAP_IP1为映射IP地址,一般用于跨池场景下,如未做过IP映射,该地址与IP1相同。IP列表顺序为主节点在最左侧、其他节点一次往后排】
1)主集群sdr配置文件更新
cd /cmdb/soft
cp cmdb_conf.xml cmdb_conf_sdr.xml
vim cmdb_conf_sdr.xml
-- 主集群添加
<PARAM name="localStreamIpmap1" value="(192.168.254.21,192.168.254.21),(192.168.254.22,192.168.254.22)"/>
<PARAM name="remoteStreamIpmap1" value="(192.168.254.31,192.168.254.31),(192.168.254.32,192.168.254.32)"/>
<PARAM name="remotedataPortBase" value="17700"/>

2)备集群sdr配置文件更新
cd /cmdb/soft
cp cmdb_conf.xml cmdb_conf_sdr.xml
vim cmdb_conf_sdr.xml
-- 备集群添加
<PARAM name="localStreamIpmap1" value="(192.168.254.31,192.168.254.31),(192.168.254.32,192.168.254.32)"/>
<PARAM name="remoteStreamIpmap1" value="(192.168.254.21,192.168.254.21),(192.168.254.22,192.168.254.22)"/>
<PARAM name="remotedataPortBase" value="17700"/>

3.3 创建容灾用户

--主备集群都需要创建一个容灾用户:
su - omn
gsql -dpostgres -p17700
create user sdr_user with replication password 'Shsnc2023';

\du检查,该用户只需要replication流复制权限。

3.4 检查集群状态

--创建容灾关系前需要检查主、备集群状态无误:
su - omn
gs_om -t status --detail

主集群状态:
备集群状态:

3.5 创建容灾关系

1)主中心启动
su - omn
gs_sdr -t start -m primary -X cmdb/soft/cmdb_conf_sdr.xml -U sdr_user -W 'Shsnc2023' --time-out=3600 -l cmdb/soft/gs_sdr_$(date +%Y%m%d_%H).log

如上图,主中心启动到”Waiting for the main standby connection.”这一步,会等待备集群连接,此时需要启动从中心。
主中心完整日志如下:
2)从中心启动
gs_sdr -t start -m disaster_standby -X 
/cmdb/soft/cmdb_conf_sdr.xml -U sdr_user -W 'Shsnc2023' --time-out=3600 -l cmdb/soft/gs_sdr_$(date +%Y%m%d_%H).log

3.6 检查容灾状态

1)检查容灾状态容灾状态说明详情请见3.7
gs_sdr -t query
--主中心:
--从中心:
2)检查流复制状态
--主中心检查:
gsql -dpostgres -p17700 -c "select * from pg_replication_slots;"
gsql -dpostgres -p17700 -c "select * from pg_stat_replication;"

3.7 gs_sdr -t query容灾查询状态说明

项目
含义
说明
备注
hadr_cluster_stat
流式容灾中数据库实例状态。
normal
标识该数据库实例未参与流式容灾。
-
full_backup
主数据库实例数据全量复制中。
流式容灾中仅主数据库实例有此状态。
archive
主数据库实例日志流式复制中。
流式容灾中仅主数据库实例有此状态。
backup_fail
主数据库实例数据全量复制失败。
流式容灾中仅主数据库实例有此状态。
archive_fail
主数据库实例日志流式复制失败。
流式容灾中仅主数据库实例有此状态。
switchover
计划内主备倒换中。
流式容灾中主备数据库实例皆有此状态。
restore
灾备数据库实例数据全量恢复中。
流式容灾中仅灾备数据库实例有此状态。
restore_fail
灾备数据库实例全备恢复失败。
流式容灾中仅灾备数据库实例有此状态。
recovery
灾备数据库实例日志流式复制中。
流式容灾中仅灾备数据库实例有此状态。
recovery_fail
灾备数据库实例日志流式复制失败。
流式容灾中仅灾备数据库实例有此状态。
promote
灾备数据库实例升主中。
流式容灾中仅灾备数据库实例有此状态。
promote_fail
灾备数据库实例升主失败。
流式容灾中仅灾备数据库实例有此状态。
hadr_switchover_stat
流式容灾主备数据库实例计划内倒换进度展示。
百分比
倒换进度展示。
-
hadr_failover_stat
流式容灾灾备数据库实例升主进度展示。
百分比
倒换进度展示。
-
RTO
此时发生灾难,数据恢复所需要的时长。
数据库实例停机,网络异常等导致流式容灾中断。
流式容灾中仅主数据库实例可查。


非空
数据恢复所需要的时长,单位s。

RPO
此时发生灾难,数据库实例丢失的数据时长。
数据库实例停机,网络异常等导致流式容灾中断。

流式容灾中仅主数据库实例可查。

3.8 双中心搭建问题处理

1)双中心容灾搭建时,会出现以下两种情况这里是以两个空集群(无业务数据)举例
  • 主中心创建容灾关系时,会报超时,理论上空库启动不需要很久【默认超时时间20分钟】;
  • 备中心启动,会报错无法连接主库获取hadr信息,以至于备集群无法根据主集群同步信息来重建。
2)解决方案
方案一:gs_sdr工具bug,磐维研发已定位,后续会出patch补丁解决。
方案二:临时解决方案:调整py脚本。
操作方式:
① 查看gs_sdr工具所在路径:
which gs_sdr
② 进入gs_sdr所在路径,并继续进入当前路径下impl/streaming_disaster_recovery路径,找到streaming_base.py这个脚本,调整该脚本调整前记得备份】。
③ 搜索__copy_secure_dir_from_dn_dir这个函数,删除该函数中"| unset LD_LIBRARY_PATH &&"这部分注:管道符别删掉了】。
④ 匹配该py脚本中"| unset LD_LIBRARY_PATH &&",还剩下4处,需要将该内容移到命令最前面。
举例:
⑤ 改完脚本scp同步到双中心集群其他节点。
⑥ 重新创建容灾关系:
  • 先找到tmp目录cd /cmdb/soft,查看部署文档,确认tmp目录路径:
more cmdb_conf.xml|grep -i tmp
  • tmp目录下会生成streaming_cabin,该目录下存放容灾搭建信息。
cd /cmdblog/tmp
⑦ streaming目录下会生成一个step文件,假设主集群创建容灾关系时在上一步骤中断了,就会将该步骤序号记录到该step文件中。重建容灾关系时需要备份删掉该step文件,以免前面的配置未更新。

END


本文作者:冯俊鸿(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论