注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于您的云环境的值。
使用 Oracle Cloud Infrastructure Full Stack Disaster Recovery 自动切换和故障转移 PostgreSQL 数据库
简介
Oracle Cloud Infrastructure Full Stack Disaster Recovery (OCI Full Stack DR) 只需单击一下即可协调全球各地 Oracle Cloud Infrastructure (OCI) 区域之间的计算、数据库和应用迁移。客户可以自动执行恢复一个或多个业务系统所需的步骤,而无需重新设计或重新设计现有基础设施、数据库或应用,也不需要专门的管理或转换服务器。
OCI Full Stack DR 是一项高度灵活的服务,我们可以利用灾难恢复 (Disaster Recovery,DR) 计划中的用户定义计划组来处理 OCI Object Storage 存储桶 DR 操作。
部署体系结构
注:主要区域是 Frankfurt ,DR 区域是 London 。
目标
- 使用 OCI Full Stack DR 自动切换和故障转移 PostgreSQL 数据库。
先决条件
-
管理员权限或为 OCI 全栈灾难恢复配置所需的 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 策略。有关详细信息,请参阅配置身份和访问管理 (IAM) 策略以使用 OCI 全栈灾难恢复和 OCI 全栈灾难恢复策略。
-
您需要在主数据库和备用数据库中启用计算实例运行命令插件,因为 OCI Full Stack DR 将在切换期间执行
sudo
命令来挂载和卸载命令。有关在 OCI 计算实例上运行命令的详细信息,请参阅在 OCI 计算实例上运行命令。 -
将 run 命令与 OCI Full Stack DR 一起使用。有关更多信息,请参见 Invoke custom scripts using the run command with Oracle Cloud Infrastructure Full Stack Disaster Recovery 。
-
在位于同一租户的两个动态路由网关 (Dynamic Routing Gateway,DRG) 之间建立远程对等连接 (Remote Peering Connection,RPC)。有关详细信息,请参阅通过升级的 DRG 进行远程 VCN 对等连接。
-
确保两台计算机都可以在 PostgreSQL 端口
5432
上进行数据库复制通信,配置各自的安全列表或网络安全组。 -
使用堡垒即服务或堡垒主机连接到 PostegreSQL 服务器。
-
OCI 对象存储桶(每个区域一个)。
任务 1:安装和配置 PostgreSQL
-
要安装 PostgreSQL,请使用您喜爱的 SSH 客户机连接到主机并运行以下命令。
sudo dnf install -y postgresql postgresql-server postgresql-contrib sudo /usr/bin/postgresql-setup initdb sudo systemctl enable postgresql sudo systemctl start postgresql
-
启用 Linux 防火墙以接收连接。
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent sudo firewall-cmd --reload
-
编辑
postgresql.conf
(位于 xxxxx)文件以允许连接并按如下方式更改wal
参数。... listen_addresses = '*' ... wal_level = logical wal_log_hints = on ...
-
连接到数据库,然后创建复制用户。
sudo su postgres psql
CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD 'YourUserPassword';
-
将此用户添加到
pg_hba.conf
(位于 xxxxx)文件。host all all all md5 host replication replica_user <IP Host 1> md5 host replication replica_user <IP Host 2> md5
-
重新启动 PostgreSQL 数据库以应用更改。
sudo systemctl restart postgresql
-
在第二个服务器中重复此过程。
任务 2:复制 PostgreSQL 数据库
在此任务中,我们将配置本机 PostgreSQL 数据库复制。
-
连接到主数据库并创建副本插槽。
sudo su postgres psql
select pg_create_physical_replication_slot('replica_0');
-
连接到辅助数据库并运行以下命令来创建复制。
sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo pg_basebackup -d "host=<IP Host 1> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_0 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql
-
检查复制是否在主数据库上流动。
select * from pg_stat_replication;
您应该能够看到包含流处理的一行。
任务 3:创建切换计划
任务 3.1:创建和关联灾难恢复保护组 (Disaster Recovery Protection Groups,DRPG)
-
在主区域(法兰克福)中,单击汉堡菜单,导航到迁移和灾难恢复、灾难恢复、灾难恢复保护组和创建灾难恢复保护组。
-
在备用区域(伦敦)中,单击 Hamburger 菜单,导航到 Migration & Disaster Recovery 、 Disaster Recovery 、 Disaster Recovery Protection Group 和 Create Disaster Recovery Protection Group 。
-
在主要区域(法兰克福)中,输入以下信息,然后单击关联。
- 角色:
Primary
。 - 对等区域:
UK South (London)
。 - 对等 DR 保护组:
postgresql-lon
。
- 角色:
任务 3.2:将成员添加到主数据库和备用数据库 DRPG
-
在主 DRPG (
postgresql-fra
) 中,选择成员并添加计算 VM (postgresql01
) 作为成员。注:在将计算添加为成员时,请在计算实例类型中选择非移动实例,因为我们为 PostgreSQL 数据库设置了主动 - 被动设置。
-
在备用 DRPG (
postgresql-lon
) 中,选择成员,然后将计算 VM (postgresql02
) 添加为成员。注:在将计算添加为成员时,请在计算实例类型中选择非移动实例,因为我们为 PostgreSQL 数据库设置了主动 - 被动设置。
任务 3.3:在备用 DRPG(伦敦)中创建切换计划
切换计划:一种 DR 计划,用于执行服务从主 DRPG 到备用 DRPG 的计划转换。
-
在备用 DRPG
postgresql-lon
中创建切换计划。 -
选择价格计划,然后单击创建价格计划。
-
输入名称作为
postgresql-switchover-frankfurt-london
,然后选择计划类型作为Switchover (planned)
。 -
单击创建。
注:请确保从备用 DRPG(伦敦)创建切换计划。
任务 3.4:使用各种用户定义的计划组自定义切换计划
我们已在两个 DR 保护组中添加了计算(非移动实例)作为成员。我们需要使用其他用户定义的计划组自定义切换计划。我们还需要创建以下 bash 脚本并将其上载到 OCI 对象存储,以便可以在切换期间调用这些脚本。
-
stop_postgresql.sh
.#!/bin/bash sudo systemctl stop postgresql
-
promote_postgresql.sh
.#!/bin/bash sudo -u postgres /usr/bin/pg_ctl promote -D /var/lib/pgsql/data/ sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_1');"
-
change_replication_direction.sh
.#!/bin/bash sudo rm -rv /var/lib/pgsql/data/ sudo sudo pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_1 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_0');"
注:这些脚本应上载到伦敦地区的存储桶。
DR 切换的典型工作流如下所示:
-
在法兰克福地区停止 PostgreSQL 数据库:计划组将具有在法兰克福地区停止 PostgreSQL 数据库的步骤。
-
在伦敦地区推广 PostgreSQL 数据库: Plan 组将具有在伦敦地区推广 PostgreSQL 数据库的步骤。
-
更改 PostgreSQL 数据库复制方向:计划组将具有更改 PostgreSQL 数据库复制方向 (LON-FRA) 的步骤。
注:确保按相同顺序执行步骤。
创建以下用户定义的计划组。
-
创建在法兰克福地区停止 PostgreSQL 数据库计划组。
-
在计划组下,单击添加组以创建自定义计划组,以停止法兰克福区域中的 PostgreSQL 数据库。输入 Group name(组名)作为
Stop PostgreSQL Database at Frankfurt Region
。 -
单击添加步骤并输入以下信息。我们将在计划组中添加一个步骤。
-
确保选择区域作为
Frankfurt
,选择目标实例作为postgresql01
。选择运行对象存储脚本,脚本的位置将选择 OCI 对象存储桶posgres-dr-lon
。 -
输入脚本位置的脚本
stop_postgresql.sh
详细信息。该脚本将关闭 FRA 区域中的 PostgreSQL 数据库。 -
单击添加步骤并验证添加的步骤。
-
-
-
创建提升伦敦地区的 PostgreSQL 数据库计划组。
-
在计划组下,单击添加组以创建定制计划组以在伦敦提升 PostgreSQL 数据库。输入 Group name(组名)作为
Promote PostgreSQL Database at London Region
。 -
单击添加步骤并输入以下详细信息。我们将在计划组中添加一个步骤。
-
确保选择区域作为
London
,目标实例作为postgresql02
。选择运行对象存储脚本,脚本的位置将选择 OCI 对象存储桶posgres-dr-lon
。 -
输入脚本位置的脚本
promote_postgresql.sh
详细信息。该脚本将关闭 FRA 区域中的 PostgreSQL 数据库。 -
单击添加步骤并验证添加的步骤。
-
-
-
创建更改 PostgreSQL 数据库复制方向计划组。
-
在计划组下,单击添加组以创建定制计划组以更改 PostgreSQL 数据库复制方向。输入 Group name(组名)作为
Promote PostgreSQL Database at London Region
。 -
单击添加步骤并输入以下信息。我们将在计划组中添加一个步骤。
-
确保选择区域作为
Frankfurt
,选择目标实例作为postgresql01
。选择运行对象存储脚本,脚本的位置选择 OCI 对象存储桶posgres-dr-lon
。 -
输入脚本位置的脚本
change_replication_direction.sh
详细信息。该脚本将关闭 FRA 区域中的 PostgreSQL 数据库。 -
单击添加步骤并验证添加的步骤。
-
-
任务 4:执行预检查并运行切换计划
运行预检查选项对 DR 计划中的所有步骤以及与这些步骤关联的成员执行快速验证。
-
在切换计划
postgresql-switchover-frankfurt-london
中,单击运行预检查以运行预检查。检验是否成功完成。
-
在切换计划
postgresql-switchover-frankfurt-london
中,单击执行灾难恢复计划以执行该计划。 -
检查计划状态并确保计划中的所有步骤都成功。
-
切换计划按特定顺序执行所有计划组。成功执行计划后,PostgreSQL 数据库将提升为伦敦地区的主数据库。
-
自动更改 DRPG 中的角色。现在,伦敦将主场,法兰克福将担任备用角色。
-
验证伦敦的 PostgreSQL 数据库。
任务 5:在备用 DRPG(法兰克福)中创建切换计划以进行切换
任务 5.1:在备用 DRPG 中创建切换计划(伦敦)
-
在备用 DRPG
postgresql-fran
中创建切换计划。 -
选择价格计划,然后单击创建价格计划。
-
输入名称作为
postgresql-switchover-london-frankfurt
,然后选择计划类型作为Switchover (planned)
。 -
单击创建。
注:请确保从备用 DRPG(法兰克福)创建切换计划。
任务 5.2:使用各种用户定义的计划组自定义切换计划
我们需要使用其他用户定义的计划组自定义切换计划。我们还需要创建以下 bash 脚本并上载到 OCI 对象存储,以便能够在切换期间调用这些脚本。
-
rewind_postgresql.sh
.#!/bin/bash sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo -u postgres pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -v -R -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql sudo -u postgres /usr/bin/pg_ctl promote -D /var/lib/pgsql/data/ sudo -u postgres psql -c "select pg_create_physical_replication_slot('replica_0');"
-
replicate_postgresql.sh
.#!/bin/bash sudo systemctl stop postgresql sudo rm -rv /var/lib/pgsql/data/ sudo pg_basebackup -d "host=<IP Host 2> port=5432 user=replica_user password=YourUserPassword" -w -X stream -S replica_0 -v -R -W -D /var/lib/pgsql/data/ --no-password sudo chown postgres -R /var/lib/pgsql/data/ sudo systemctl start postgresql
注:这些脚本应上载到法兰克福地区的存储桶。
DR 切换的典型工作流如下所示:
-
重绕 PostgreSQL 数据库:计划组以重绕数据库。法兰克福将同步伦敦数据库的内容。
-
重新建立到伦敦的 PostgreSQL 数据库复制: Plan 组将有步骤开始将 PostgreSQL 数据库从法兰克福复制到伦敦区域。
注:确保按相同顺序执行步骤。
创建以下两个用户定义的计划组
-
创建回绕 PostgreSQL 数据库计划组。
-
在计划组下,单击添加组以创建定制计划组,以在法兰克福地区中重绕 PostgreSQL 数据库。输入 Group name(组名)作为
Rewind PostgreSQL Databases at Frankfurt Region
。 -
单击添加步骤并输入以下信息。我们将向计划组添加一个步骤。
-
确保选择区域作为
Frankfurt
,选择目标实例作为postgresql01
。选择运行对象存储脚本,脚本的位置将选择 OCI 对象存储桶posgres-dr-lon
。 -
输入脚本位置的脚本
rewind_postgresql.sh
详细信息。该脚本将关闭 FRA 区域中的 PostgreSQL 数据库。 -
单击添加步骤并验证添加的步骤。
-
-
-
创建重新建立到伦敦的 PostgreSQL 数据库复制计划组。
-
在计划组下,单击添加组以创建定制计划组,以重新建立到伦敦的 PostgreSQL 数据库复制。输入 Group name(组名)作为
Promote PostgreSQL Database at London Region
。 -
单击添加步骤并输入以下信息。我们将在计划组中添加一个步骤。
-
确保选择区域作为
London
,选择目标实例作为postgresql02
。选择运行对象存储脚本,脚本的位置将选择 OCI 对象存储桶posgres-dr-lon
。 -
输入脚本位置的脚本
replicate_postgresql.sh
详细信息。该脚本将关闭 FRA 区域中的 PostgreSQL 数据库。 -
单击添加步骤并验证添加的步骤。
-
-
任务 6:执行预检查并运行切换计划
运行预检查对 DR 计划中的所有步骤以及与这些步骤关联的成员执行快速验证。
-
在切换计划
postgresql-switchover-london-frankfurt
中,单击运行预检查以运行预检查。检验是否成功完成。
-
在切换计划
postgresql-switchover-london-frankfurt
中,单击执行灾难恢复计划以执行该计划。 -
检查计划状态并确保计划中的所有步骤都成功。
-
切换计划按特定顺序执行所有计划组。成功执行计划后,PostgreSQL 数据库将提升为法兰克福地区的主数据库。
-
自动更改 DRPG 中的角色。现在,法兰克福将主场,伦敦将担任备用角色。
-
验证法兰克福的 PostgreSQL 数据库。
后续步骤
您已了解如何使用 OCI 全栈灾难恢复服务自动执行 PostgreSQL 数据库切换并切换回灾难恢复操作。有关详细信息,请参阅相关链接部分中的 OCI 全栈灾难恢复文档。
相关链接
确认
-
作者 -Raphael Teixeira(FSDR 技术人员的主要成员)
-
贡献者 - Ricardo Malhado(OCI 专家超大规模应用),Suraj Ramesh(MAA 首席产品经理)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Automate Switchover and Failover for PostgreSQL Database with Oracle Cloud Infrastructure Full Stack Disaster Recovery
F96168-01
April 2024