diff --git "a/content/zh/post/xuemengen/\346\265\201\345\274\217\345\256\271\347\201\276\350\277\220\347\273\264\346\214\207\345\215\227.md" "b/content/zh/post/xuemengen/\346\265\201\345\274\217\345\256\271\347\201\276\350\277\220\347\273\264\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..6ff5336a7245fbf467db4234ef8ac96ab133abdd --- /dev/null +++ "b/content/zh/post/xuemengen/\346\265\201\345\274\217\345\256\271\347\201\276\350\277\220\347\273\264\346\214\207\345\215\227.md" @@ -0,0 +1,315 @@ ++++ +title = "流式容灾运维指南" +date = "2024-04-01" +tags = ["流式容灾"] +archives = "2024-04-01" +author = "xuemengen" +summary = "流式容灾运维指南" +img = "/zh/post/xuemengen/title/img1.png" +times = "10:00" ++++ + +# 1 组网结构: +## 1.1 组网简介: +双集群容灾方案,两个独立集群,主备集群的组网方式可任意选择,灾备集群会选出首备连接主集群的主DN,灾备集群内其他节点都以级联备方式连接首备。 + +## 1.2 组网优势: +1. 主集群具备单集群组网的优点,只有主集群彻底不可用后才需要手动切换为备集群。 +2. 跨集群(异地)复制链路无论是否发生容灾切换都只有一条,占用网络带宽相对较少。 +3. 组网更加灵活,主集群和灾备集群都可以自由选择不同的组网。 + +## 1.3 组网劣势: +需要增加灾备集群,相应增加成本 + +## 1.4 高可靠能力: +1. 主集群的高可靠能力同单集群的计算方法 +2. 主集群彻底不可用时可启用灾备集群 + +## 1.5 数据库默认/建议配置: +DN配置 +``` +synchronous_standby_names: +node1: ANY 1(node2, node3), ANY 1(node4, node5) +node2: ANY 1(node1, node3), ANY 1(node4, node5) +node3: ANY 1(node1, node2), ANY 1(node4, node5) +node4: ANY 1(node1, node2, node3), ANY 1(node5) +node5: ANY 1(node1, node2, node3), ANY 1(node4) + +most_available_sync=off +``` + +CM配置: +``` +delay_arbitrate_timeout(用于同az优先选主,可选) +``` + +# 2 XML配置模板: +主集群: +``` + + +     + + + + + + + + + + +  +     + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + +   + + + + + + + + + + + +                    + + + + + + + + + + + +   + + + + + + + + + + + + + +``` +备集群: +``` + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + +``` + +相比于单集群的XML配置,双集群的XML配置需要额外指定三个信息: +>- 本地ip地址映射关系```localStreamIpmap1```,配置格式为```"(node1_sship,node1_backip), (node2_sship,node2_backip), (node3_sship,node3_backip), (node4_sship,node4_backip), (node5_sship,node5_backip)"``` +>- 对端ip地址映射关系```remoteStreamIpmap1```,配置格式为```"(node6_sship,node6_backip), (node7_sship,node7_backip)"``` +>- 对端数据库端口```remotedataPortBase```。 +  +# 3 部署流程: +1. 安装集群1 +2. 安装集群2 +3. 在主集群创建容灾用户 +``` +gsql -d postgres -p PORT -c "create user DR_USERNAME with replication password 'DR_PASSWORD';" +``` +4. 准备xml文件,xml文件样例见 +4. 将集群1启动为主集群 +``` +gs_sdr -t start -m primary -X XMLFILE [-U DR_USERNAME [-W DR_PASSWORD]] [--time-out=SECS] +``` +5. 将集群2启动为备集群 +``` +gs_sdr -t start -m disaster_standby -U USER -W PASSWORD -X /home/dc_p/cluster_cfg_cm.xml --time-out=1400 +``` +6. 查询 +``` +gs_sdr -t query +``` + +以上: +``` +-U容灾用户名,-W容灾用户密码,为可选参数,如果未携带需要在搭建过程中交互输入; +--time-out超时时间,为可选参数,默认为1200秒。 +``` + +# 4 故障场景及处理操作说明: +1. 主集群故障场景及处理操作说明参见CM运维指南 +2. 主集群完全故障且较短时间内无法恢复,则需启用备集群: +在备集群执行```gs_sdr -t failover``` + +# 5 流式容灾主要操作说明: +## 5.1 计划内主备集群切换switchover: +switchover需要在主集群和备集群都要进行操作 + +主集群执行主降备 +``` +gs_sdr -t switchover -m disaster_standby +``` + +备集群执行备升主 +``` +gs_sdr -t switchover -m primary +``` + +***注意***:这两个操作不分先后顺序,但是需要尽量同时开始操作,否则可能会导致一端等待超时 + +## 5.2 备集群升主failover +1. 如果主集群正常 +先在备集群执行```gs_sdr -t failover``` +再在主集群执行```gs_sdr -t stop -X xxx.xml``` +两个操作有先后顺序,操作顺序最好不要颠倒 +  +2. 如果主集群挂掉 +直接执行 +``` +gs_sdr -t failover +``` + +主集群恢复后如果出现双主,需要再在原主机群执行gs_sdr -t stop -X xxx.xml + +## 5.3 容灾关系解除: +1. 在备集群执行```gs_sdr -t failover``` +2. 在主集群执行```gs_sdr -t stop -X xxx.xml``` + +***注意***: +如果出现双主的情况,可通过这种操作处理,在两个集群分别执行stop操作,然后再重新搭建流式容灾关系 + +## 5.4 容灾关系查询: +``` +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 |此时发生灾难,数据库实例丢失的数据时长 |数据库实例可能丢失的数据时长,单位s |流式容灾中仅主数据库实例可查 | + + +## 5.5 其他注意事项 +1. 以上操作都是可重入的,即如果操作中途失败可再次执行该操作。 +2. 执行以上操作过程中,最好不要强杀操作进程,否则可能会出现问题,如lock文件无法删除、部分参数无法回滚等,可以通过设置合理的超时时间来避免等待时间过长。如果是前台执行的切换操作,switchover过程中不要执行ctrl+c操作。 +3. 如果由于强制杀进程等操作导致回退操作未进行或回退失败,可能会在流式容灾目录($PGHOST/streaming_cabin/)下残留某些文件: +>- stream_lock_xxx:存在该文件表示当前正在进行容灾相关操作,其他容灾操作无法进行,想要执行其他容灾操作,将该文件删掉即可继续进行后续操作 +>- streaming_xxx.step:该文件记录对应的容灾操作执行进度,便于操作重入 +4. 流式容灾目录及其下的文件是流式容灾操作及状态等的记录和标识,**非必要情况请不要手动修改或删除**。