将独立 PostgreSQL 实例迁移到集群节点

使用下列步骤将 PostgreSQL 实例转换为 Patroni 集群,然后向该集群中添加其他节点。

关于此任务

您可以使用以下方案之一将现有应用程序迁移到以 PostgreSQL 作为后端的 PostgreSQL HA。
  • 使用当前应用程序服务器,其中具有在 PostgreSQL 中作为 Patroni 集群的节点运行的 PostgreSQL 守护程序。

    确保数据目录路径和文件夹名称与 patroni_config.yaml 文件中所提及相同。 如果不相同,请确保在所有节点上的 patroni_config.yaml 中进行必要的更改。

  • 将数据从当前应用程序服务器迁移到 Patroni 集群节点。

    使用备份和复原 PostgreSQL 实用程序来备份数据,或者将整个 PostgreSQL 数据文件夹复制到节点。 检查数据文件夹是否具有相应的所有权和许可权。 如果将整个 PostgreSQL 数据文件夹复制到节点,那么确保复制 key_store.keykey_store.crt 文件并将它们放置在与安装服务器上相同的目录中。 将 key_store.keykey_store.crt 文件放置在以下位置中:

    <install_dir>/prddb/custom/security/resources

    其中, <install_dir>Cloud Application Business Insights 安装位置。 缺省情况下,该位置为 /opt/icabi

遵循下列常见步骤:

程序

  1. 启动 PostgreSQL 守护程序:
    <BIN_DIR>/pg_ctl -D <DATA_DIR> start
    其中,
    • <BIN_DIR>

      PostgreSQL bin 目录

    • <DATA_DIR>

      PostgreSQL data 目录

  2. 连接到使用 psql 客户机的 PostgreSQL 实例:
    
    cd  to <BIN_DIR>
    ./psql -U <USERNAME> -d <DATABASE_NAME> -h <HOSTNAME>
    例如
    ./psql -U prddba -d prddb -h <HOSTNAME>
    其中,
    • <BIN_DIR>

      PostgreSQL bin 目录

    • <USERNAME>

      具有用于创建用户和角色的相应许可权的数据库用户名。

    • <DATABASE_NAME>

      应用程序数据库名称或 postgres 缺省数据库。

    • <HOSTNAME>

      PostgreSQL 服务器的 IP 地址或主机名。

  3. 创建在 patroni_config.yaml 文件中指定的超级用户和复制用户 (如果它们在现有 PostgreSQL 环境中不存在):
    
    CREATE USER <SUPERUSER_NAME> WITH SUPERUSER ENCRYPTED PASSWORD '<SUPERUSER_PASSWORD>';
    CREATE USER <REPLICATION_USER> WITH REPLICATION ENCRYPTED PASSWORD '<REPLCIATION_PASSWORD>';
    
    其中,
    • <SUPERUSER_NAME>

      patroni_config.yaml 文件中指定的名称。

    • <SUPERUSER_PASSWORD>

      patroni_config.yaml 文件中指定的超级用户的密码。

    • <REPLICATION_USER>

      patroni_config.yaml 文件中指定的复制用户的名称。

    • <REPLCIATION_PASSWORD>

      patroni_config.yaml 文件中指定的复制用户的密码。

    注: 如果通过将整个数据文件夹从现有 Cloud Application Business Insights 服务器复制到 Patroni 节点来备份数据库,那么必须更改超级用户和应用程序用户的用户许可权。 使用以下命令更改用户许可权:
    ALTER ROLE <SUPERUSER_NAME> WITH SUPERUSER CREATEROLE REPLICATION BYPASSRLS CREATEDB;
    ALTER ROLE prddba WITH NOSUPERUSER NOCREATEROLE NOREPLICATION NOBYPASSRLS NOCREATEDB;