【我和 openGauss 的故事】openGauss 容灾集群搭建过程代码学习记录
【我和 openGauss 的故事】openGauss 容灾集群搭建过程代码学习记录
ziyoo0830 [openGauss](javascript:void(0);) 2023-08-03 16:49 发表于四川
gs_sdr 命令代码解读
背景
openGauss
推出了容灾架构,相比之前的一个集群主从架构,而容灾架构是两个集群间的数据同步。为了更深入了解其原理,本文试图通过阅读gs_sdr
命令相关的代码来学习下相关的各种操作。
1.容灾搭建过程可以参考:https://www.modb.pro/db/628767
2.vscode 调试配置可以参考:https://www.modb.pro/db/658344
3.个人学习记录,理解不一定完全正确。如有错误,可指出一起探讨_
环境准备
安装集群
安装两套集群,每套集群含 2 个节点,相关信息如下:
集群 1 信息
复制代码
集群 2 信息
复制代码
创建容灾用户
在集群1
上创建容灾用户:
复制代码
修改XML
配置
修改集群 1
在集群1
的XML
配置中加入如下标粗内容:
修改集群 2
在集群2
的XML
配置中加入如下标粗内容:
配置容灾
将集群1
启动为主集群
使用的命令为:
复制代码
vscode
调试配置
复制代码
在gs_sdr
脚本main
函数中打上断点
代码阅读
判断是否使用root
权限操作
复制代码
初始化StreamingDisasterRecoveryBase
类
复制代码
base
中保存的信息可以参考下图:
判断做何种操作
复制代码
创建锁定文件
由于容灾搭建过程涉及到数据同步耗时较长,这里应是为避免多次重复操作。
复制代码
判断是否有其他gs_sdr
操作
复制代码
执行操作
进度记录相关操作
复制代码
检查集群状态
复制代码
判断执行节点是否为主节点
操作需要在主节点上执行。
生成 key_name.key.cipher & key_name.key.rand 文件
复制代码
保存 hadr 信息到数据库
复制代码
检查是否已经有首备节点
判断是否已经是容灾环境。
检查是否有cm
容灾环境必须要有cm
组件。
检查是否在升级中
复制代码
写进度文件
复制代码
common_step_for_streaming_start
复制代码
修改pg_hba
配置
复制代码
复制参数replconninfo
相关设置
复制代码
等待首备连接
Waiting for the main standby connection.
这里需要在备集群执行下面的命令:
gs_sdr -t start -m disaster_standby -U dr_user -W oracle_4U -X /home/omm/single.xml --time-out=86400 # 此处为方便,直接在终端上执行该命令,没有进行调试。
将集群2
启动为备集群
复制代码
vscode
调试配置
{ "version": "0.2.0", "configurations": [ { "name": "gs_sdr", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "justMyCode": true, "args": ["-t","start","-m","disaster_standby","-X","/home/omm/single.xml","-U","dr_user","-W","oracle_4U","--time-out=86400"] } ] }
执行的类: streaming_diaster_recovery_start
代码阅读
Start build key files from remote cluster
备集群会进行build
,速度比较慢(与网络环境和数据库大小关系较大)。
复制代码
copy file from data dir to streaming dir
复制代码
check cluster user consistency
主要检查版本和版本提交号是否一致。
检查安装用户是否一致
设置集群运行模式stream_cluster_run_mode
复制代码
停止备集群
复制代码
再次build
集群
复制代码
启动集群
复制代码
查询容灾状态
复制代码
主集群
复制代码
备集群
复制代码
评论