すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:クラウド移行評価レポートの概要

最終更新日:Dec 13, 2024

このトピックでは、セルフマネージド型PostgreSQLインスタンスからApsaraDB RDS for PostgreSQLインスタンスへのクラウド移行の評価レポートについて説明します。 このトピックでは、レポートの一般的なエラーとエラーの解決策についても説明します。

クラウド移行評価レポートのステータス失敗の場合、操作列の [レポートの表示] をクリックして、レポートの詳細を表示できます。 レポートには次の詳細が含まれています。

説明

ApsaraDB RDS For PostgreSQLインスタンスへのクラウド移行の詳細については、「ApsaraDB RDS for PostgreSQLインスタンスへのクラウド移行機能の使用」をご参照ください。

rdsを空にする (ApsaraDB RDS for PostgreSQLインスタンスのデータベースが空かどうかを確認する)

チェックアイテム:

rdsデータベースの確認

一般的なエラー:

error:postgres not empty, check if any table exists

説明:

データベースはApsaraDB RDS for PostgreSQLインスタンスに作成され、データベースにはデータが含まれています。

解決策:

ApsaraDB RDS for PostgreSQLインスタンスからtemplate0、template1、postgresデータベースを除くすべてのデータベースを削除します。 さらに、ha_health_checkテーブルを除くすべてのテーブルをpostgresデータベースから削除します。

ソース接続の確認 (セルフマネージドPostgreSQLインスタンスとApsaraDB RDS for PostgreSQLインスタンス間の通信が正常かどうかを確認)

  • チェックアイテム1:

    チェックip接続可能

    一般的なエラー:

    error:XX.XX.XX.XX is unapproachable

    説明:

    自己管理型PostgreSQLインスタンスが存在するサーバーのIPアドレス、またはDNSサーバーのIPアドレスにアクセスできません。

    解決策:

    • 自己管理型PostgreSQLインスタンスがElastic Compute Service (ECS) インスタンスにある場合、ソースデータベース情報の設定時にECSインスタンスのプライベートIPアドレスを入力します。 ECSインスタンスのプライベートIPアドレスを取得する方法の詳細については、「IPアドレスの表示」をご参照ください。

    • 自己管理型PostgreSQLインスタンスがデータセンターに存在する場合、ソースデータベース情報を設定するときに、自己管理型PostgreSQLインスタンスが存在するホストのDNSサーバーのIPアドレスを入力します。

  • チェックアイテム2:

    接続可能なチェックポート

    一般的なエラー:

    error:5432 is unapproachable

    説明:

    • 自己管理型PostgreSQLインスタンスは、リモート接続をリッスンするように設定されていません。

    • 自己管理型PostgreSQLインスタンス用に設定されたファイアウォールは、自己管理型PostgreSQLインスタンスのポートへのアクセスを許可しません。

    解決策:

  • チェックアイテム3:

    接続可能なデータベースの確認

    一般的なエラー:

    error:cannot connect to source database by migratetest:123456

    説明:

    • 入力したパスワードが正しくありません。

    • セルフマネージド型PostgreSQLインスタンスのpg_hba.confファイルの設定が正しくありません。

    解決策:

    • 入力したユーザー名とパスワードを使用して、自己管理型PostgreSQLインスタンスに接続できるかどうかを確認します。 接続に失敗した場合は、パスワードを更新できます。 たとえば、migratetestアカウントを使用する場合は、次のコマンドを実行してmigratetestアカウントのパスワードを更新します。

      ALTER USER migratetest WITH PASSWORD '123456';
    • 自己管理型PostgreSQLインスタンスのpg_hba.confファイルを変更します。 たとえば、migratetestアカウントを使用する場合は、次のコンテンツをファイルに追加します。

      host  all       migratetest  <The CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs>  md5
      説明

      詳細については、「pg_hba.confファイルの更新」をご参照ください。

  • チェックアイテム4:

    アカウントの複製権限の確認

    一般的なエラー:

    error:migratetest has no replication privilege

    説明:

    • 使用するアカウントにはREPLICATION権限がありません。

    • セルフマネージド型PostgreSQLインスタンスのpg_hba.confファイルの設定が正しくありません。

    解決策:

    • 使用するアカウントにREPLICATION権限を付与します。 たとえば、migratetestアカウントを使用する場合は、次のコマンドを実行して、migratetestアカウントにREPLICATION権限を付与します。

      ALTER ROLE migratetest REPLICATION;
    • 自己管理型PostgreSQLインスタンスのpg_hba.confファイルを変更します。 たとえば、migratetestアカウントを使用する場合は、次のコンテンツをファイルに追加します。

      host  replication  migratetest  <The CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs>  md5
      説明

      詳細については、「pg_hba.confファイルの更新」をご参照ください。

  • チェックアイテム5:

    アカウントcreaterole特権を確認する

    一般的なエラー:

    error:migratetest has no createrole privilege

    説明:

    使用するアカウントにはCREATEROLE権限がありません。

    解決策:

    使用するアカウントにCREATEROLE権限を付与します。 たとえば、migratetestアカウントを使用する場合は、次のコマンドを実行して、CREATEROLE権限をmigratetestアカウントに付与します。

    ALTER ROLE migratetest CREATEROLE;
  • チェックアイテム6:

    アカウントのモニター権限を確認する

    一般的なエラー:

    error:migratetest should be a member of pg_monitor to monitor replication status

    説明:

    使用するアカウントにはpg_monitor権限がありません。 pg_stat_wal_receiver

    説明

    pg_monitor権限は、pg_stat_replicationやpg_stat_wal_receiverなどのシステムビューを照会し、レプリケーションリンクに関する情報を取得するために使用されます。

    解決策:

    使用するアカウントにpg_monitor権限を付与します。 たとえば、migratetestアカウントを使用する場合は、次のコマンドを実行して、migratetestアカウントにpg_monitor権限を付与します。

    GRANT pg_monitor TO migratetest;

ソースバージョンの確認 (セルフマネージドPostgreSQLインスタンスのメジャーエンジンバージョンの確認)

チェックアイテム:

メジャーバージョンの一貫性を確認する

一般的なエラー:

error:version mismatch, source version:10, current version:13.0

説明:

自己管理型PostgreSQLインスタンスとApsaraDB RDS for PostgreSQLインスタンスは、異なるメジャーエンジンバージョンを実行します。

解決策:

自己管理型PostgreSQLインスタンスと同じメジャーエンジンバージョンを実行するApsaraDB RDS for PostgreSQLインスタンスを購入します。

ソースglibcバージョンの確認 (セルフマネージドPostgreSQLインスタンスのGNU Cライブラリバージョンの確認)

チェックアイテム:

ソースglibcバージョンの互換性を確認する

一般的なエラー:

warning:source glibc version is not compatible with rds pg

説明:

セルフマネージド型PostgreSQLインスタンスのGNU Cライブラリバージョンは、ApsaraDB RDS for PostgreSQLインスタンスのGNU Cライブラリバージョンと互換性がありません。

説明

GNU Cライブラリのバージョン2.28では、いくつかの異なる照合順序を使用して、UTF-8エンコーディングで文字セットを並べ替えます。 セルフマネージドPostgreSQLインスタンスのGNU Cライブラリバージョンが、ApsaraDB RDS for PostgreSQLインスタンスのGNU Cライブラリバージョンと互換性がない場合、ApsaraDB RDS for PostgreSQLインスタンスの文字セットは、クラウド移行後に予期しない順序になる可能性があります。

解決策:

以下の手順を実行します。

  1. テーブルの照合順序を確認します。

    begin;
    create temp table testcollation(id varchar(20) collate "en_US.utf8") on commit drop;
    insert into testcollation values('-1'),('1');
    select id='1' from testcollation order by id limit 1;
    rollback;

    次の結果を返すことができます。

    • trueが返された場合、それ以上のアクションは必要ありません。 クラウド移行にはリスクはありません。

    • falseが返された場合は、以降の手順に進みます。

  2. データベースの照合順序を確認します。

    SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');

    次の結果を返すことができます。

    • 結果が返されない場合、それ以上のアクションは必要ありません。 クラウド移行にはリスクはありません。

    • 結果が返された場合は、次の手順に進みます。

  3. すべてのデータベースをチェックして、照合順序がCまたはPOSIXでないインデックスを見つけます。

    WITH result AS (
        WITH defcoll AS (
            SELECT datcollate AS coll
            FROM pg_database
            WHERE datname = current_database()
        )
        SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname,
            CASE WHEN c.collname = 'default'
                THEN defcoll.coll
                ELSE c.collname
            END AS collation
        FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s
            JOIN pg_collation c ON coll=c.oid
            CROSS JOIN defcoll
        WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX')
    )
    SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX');

    次の結果を返すことができます。

    • 結果が返されない場合、それ以上のアクションは必要ありません。 クラウド移行にはリスクはありません。

    • 結果が返された場合、クラウド移行にはリスクがあります。

ディスクサイズの確認 (ApsaraDB RDS for PostgreSQLインスタンスの使用可能なストレージが十分かどうかを確認)

チェックアイテム:

ディスクサイズを十分に確認する

一般的なエラー:

error:source_db_size > disk_size * 0.95

説明:

自己管理型PostgreSQLインスタンスの使用済みストレージが、ApsaraDB RDS for PostgreSQLインスタンスの使用可能なストレージの95% を超えています。 これは、ApsaraDB RDS for PostgreSQLインスタンスの使用可能なストレージが不足していることを意味します。

解決策:

  1. 次のコマンドを実行して、自己管理型PostgreSQLインスタンスの使用済みストレージを表示します。

    SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;
    説明

    返される使用済みストレージは、MB単位で測定されます。

  2. クラウド移行を成功させるためにApsaraDB RDS for PostgreSQLインスタンスが提供する必要がある利用可能なストレージを計算します。

    たとえば、自己管理型PostgreSQLインスタンスの使用済みストレージが100 GBの場合、ApsaraDB RDS For PostgreSQLインスタンスの使用可能なストレージは110 GB以上である必要があります。

  3. ApsaraDB RDS for PostgreSQLインスタンスの仕様を変更して、ストレージ容量を拡張します。 詳細については、「インスタンス仕様の変更」をご参照ください。

Check wal keep size (wal_keep_sizeパラメータの値を確認してください)

チェックアイテム:

チェックwalはサイズを十分に大きく保つ

一般的なエラー:

warning:wal_keep_size X MB is too small. Try to set wal_keep_segments or wal_keep_size large enough ensure pg_basebackup success

説明:

wal_keep_sizeまたはwal_keep_segmentsパラメーターの値は小さいです。

解決策:

  • セルフマネージド型PostgreSQLインスタンスがPostgreSQL 13以降のバージョンを実行している場合は、ApsaraDB RDS for PostgreSQLインスタンスのwal_keep_sizeパラメーターの値を大きくします。 これにより、クラウド移行中の完全バックアップと増分バックアップの成功率を高めることができます。

  • セルフマネージド型PostgreSQLインスタンスがPostgreSQL 13より前のバージョンを実行している場合は、ApsaraDB RDS for PostgreSQLインスタンスのwal_keep_segmentsパラメーターの値を大きくします。 これにより、クラウド移行中の完全バックアップと増分バックアップの成功率を高めることができます。

    説明

    PostgreSQL 13より前のバージョンのPostgreSQLを使用する場合、wal_keep_sizeパラメーターの値は、wal_keep_segmentsパラメーターの値にwal_segment_sizeパラメーターの値を掛けた値に等しくなります。

仕様パラメータの確認 (仕様関連パラメータの設定を確認)

チェックアイテム:

spec paramsが大きすぎるかどうかを確認する

一般的なエラー:

error:max_connections too large, value=XXX
error:max_prepared_transactions too large, value=XXX

説明:

セルフマネージド型PostgreSQLインスタンスのmax_connectionsおよびmax_prepared_transactionsパラメーターの値は、ApsaraDB RDS for PostgreSQLインスタンスのこれらのパラメーターの値の100倍を超えています。 この場合、ApsaraDB RDS for PostgreSQLインスタンスがレプリケーションリンクの確立中に起動しないことがあります。

解決策:

セルフマネージド型PostgreSQLインスタンスのmax_connectionsおよびmax_prepared_transactionパラメーターの値を減らします。

説明

セルフマネージドPostgreSQLインスタンスのmax_connectionsおよびmax_prepared_transactionパラメーターを再設定した後、セルフマネージドPostgreSQLインスタンスを再起動する必要があります。

rdsユーザーを確認する (ApsaraDB RDS for PostgreSQLインスタンスのシステムアカウントが自己管理型PostgreSQLインスタンスで使用されているかどうかを確認する)

チェックアイテム:

rdsシステムユーザーが占有されているかどうかを確認する

一般的なエラー:

warning:Check if rds system user is occupied ...XXX will be reused in rds

説明:

自己管理型PostgreSQLインスタンスでは、ApsaraDB RDS for PostgreSQLインスタンスのシステムアカウントaurorareplicator、およびpgxxxが使用されます。

解決策:

自己管理型PostgreSQLインスタンスで上記のアカウントを使用しないようにしてください。

拡張機能の確認 (プラグインの互換性の確認)

  • チェックアイテム1:

    サポートされている拡張機能の確認

    一般的なエラー:

    error:Check source supported extensions XXX not supported

    説明:

    ApsaraDB RDS for PostgreSQLインスタンスのプラグインは、自己管理型PostgreSQLインスタンスのプラグインと互換性がありません。

    解決策:

    自己管理型PostgreSQLインスタンスから互換性のないプラグインを削除します。

  • チェックアイテム2:

    上位バージョンのソース拡張機能を確認する

    一般的なエラー:

    error:Check source extensions with higher version XXX

    説明:

    セルフマネージド型PostgreSQLインスタンスの特定のプラグインのバージョンは、ApsaraDB RDS for PostgreSQLインスタンスのこれらのプラグインのバージョンよりも後のバージョンです。

    解決策:

    セルフマネージドPostgreSQLインスタンスにこれらのプラグインを再インストールし、セルフマネージドPostgreSQLインスタンスのこれらのプラグインのバージョンがApsaraDB RDS for PostgreSQLインスタンスのこれらのプラグインのバージョンと同じであることを確認します。

  • チェックアイテム3:

    下位バージョンのソース拡張を確認する

    一般的なエラー:

    warning:Check source extensions with lower version XXX

    説明:

    セルフマネージド型PostgreSQLインスタンスの特定のプラグインのバージョンは、ApsaraDB RDS for PostgreSQLインスタンスのこれらのプラグインのバージョンよりも前のバージョンです。

    解決策:

    アクションは必要ありません。 プラグインのバージョンは、クラウド移行後に自動的に更新されます。

Postgresシステムカタログの確認 (ApsaraDB for PostgreSQLインスタンスのシステムカタログの確認)

  • チェックコンテンツ1:

    ソースインスタンスが、ターゲットインスタンスでサポートされていない言語 (pg_language) を使用しているかどうかを確認します。

    一般的なエラー:

    error: disallowed language exist in databases [xxx, xxx], the languages allowed are [c, internal, sql, plpgsql, pltcl, plperl].

    説明:

    ApsaraDB RDS for PostgreSQLインスタンスは、C、internal、SQL、PL/pgSQL、PL/Tcl、およびPL/Perlの言語のみをサポートしています。 ソースインスタンスで使用されるサポートされていない言語は、ターゲットインスタンスでは使用できません。

    解決策:

    ターゲットインスタンスでサポートされていない言語をソースインスタンスから削除します。

  • チェックコンテンツ2:

    ソースインスタンスにラージオブジェクトが含まれているかどうかを確認します。

    一般的なエラー:

    error: large object exist in databases [xxx, xxx].

    説明:

    ApsaraDB RDS for PostgreSQLインスタンスは、ラージオブジェクトをサポートしていません。 したがって、ソースインスタンスの大きなオブジェクトは、ターゲットインスタンスでは使用できません。

    解決策:

    ソースインスタンスのラージオブジェクトを削除します。

  • チェックコンテンツ3:

    ALTER default PRIVILEGESを実行して、ソースインスタンスにデフォルトの権限が付与されているかどうかを確認します。 グラント... ステートメント。 このチェックは、システムテーブルpg_catalog.pg_default_aclが空でないデータベースがソースインスタンスに含まれているかどうかを確認することで実装されます。

    一般的なエラー:

    error: default acl settings exist in databases [xxx, xxx].

    説明:

    ALTER DEFAULT PRIVILEGESの場合... グラント... ソースインスタンスのデータベースで文が実行されている場合、データベースのシステムテーブルpg_catalog.pg_default_aclは空ではありません。

    解決策:

    ALTER DEFAULT PRIVILEGESを実行します... リヴォーク... ソースインスタンスのすべてのデータベースでステートメントをして、すべてのデータベースのシステムテーブルpg_catalog.pg_default_aclが空であることを確認します。 移行が完了したら、ALTER DEFAULT PRIVILEGESを実行します... グラント... 既定の権限を復元するためのデータベースの文。

  • チェックコンテンツ4:

    システムテーブル (pg_parameter_aclおよびpg_db_role_setting) が空でないかどうかを確認します。

    一般的なエラー:

    warning: Invalid system tables: [pg_parameter_acl, pg_db_role_setting], these system tables should be empty.

    説明:

    システムテーブルpg_parameter_aclは、カーネルパラメータに対するユーザーのアクセス許可を記録します。 ApsaraDB RDS for PostgreSQLは、これらのパラメーターの変更をサポートしていません。 システムテーブルpg_db_role_settingは、異なるデータベースに対するユーザーのデフォルトの権限を記録します。

    解決策:

    1. ソースインスタンスで次のステートメントを実行して、pg_parameter_aclおよびpg_db_role_settingテーブルのデータを消去します。

      DELETE FROM pg_parameter_acl;
      DELETE FROM pg_db_role_setting;
    2. DRのデプロイが完了したら、ターゲットインスタンスのさまざまなデータベースに対するユーザーのデフォルトの権限を設定します。

予約ロールの権限の確認 (予約ロールの権限の確認)

コンテンツの確認:

移行先インスタンスで許可されていないリザーブドロールの権限が、移行元インスタンスのアカウントに付与されているかどうかを確認します。

一般的なエラー:

error: some disallowed reserved roles [pg_write_server_files] are granted to user. you should revoke these roles from their members

説明:

ApsaraDB RDS for PostgreSQLでは、pg_write_server_filesなどの予約ロールの権限をアカウントに付与することはできません。 GRANT pg_write_server_files TO "user"; などのステートメントを実行してソースインスタンスの権限を付与する場合、REVOKEステートメントを実行して権限を取り消す必要があります。

解決策:

REVOKEステートメントを実行して、ソースインスタンスのアカウントに付与された権限を取り消します。 例: REVOKE pg_write_server_files "user";