このトピックでは、セルフマネージド型PostgreSQLインスタンスからApsaraDB RDS for PostgreSQLインスタンスへのクラウド移行の評価レポートについて説明します。 このトピックでは、レポートの一般的なエラーとエラーの解決策についても説明します。
クラウド移行評価レポートのステータスが失敗の場合、操作列の [レポートの表示] をクリックして、レポートの詳細を表示できます。 レポートには次の詳細が含まれています。
rdsを空にする (ApsaraDB RDS for PostgreSQLインスタンスのデータベースが空かどうかを確認する)
ソース接続の確認 (セルフマネージドPostgreSQLインスタンスとApsaraDB RDS for PostgreSQLインスタンス間の通信が正常かどうかを確認)
ソースglibcバージョンの確認 (セルフマネージドPostgreSQLインスタンスのGNU Cライブラリバージョンの確認)
ディスクサイズの確認 (ApsaraDB RDS for PostgreSQLインスタンスの使用可能なストレージが十分かどうかを確認)
rdsユーザーの確認 (ApsaraDB RDS for PostgreSQLインスタンスのシステムアカウントが自己管理型PostgreSQLインスタンスで使用されているかどうかを確認)
Postgresシステムカタログの確認 (ApsaraDB 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インスタンスのポートへのアクセスを許可しません。
解決策:
自己管理型postgresqlインスタンスのPostgreSQL. confファイルに
listen_addresses = '*'
の内容を追加します。 詳細については、「セルフマネージドpostgresqlインスタンスのPostgreSQL. confファイルの設定」をご参照ください。ポート5432へのアクセスを許可するようにファイアウォールを設定します。 または、クラウド移行を開始する前にファイアウォールを無効にします。 詳細については、「サーバーのファイアウォールの設定」をご参照ください。
チェックアイテム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インスタンスの文字セットは、クラウド移行後に予期しない順序になる可能性があります。
解決策:
以下の手順を実行します。
テーブルの照合順序を確認します。
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が返された場合は、以降の手順に進みます。
データベースの照合順序を確認します。
SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');
次の結果を返すことができます。
結果が返されない場合、それ以上のアクションは必要ありません。 クラウド移行にはリスクはありません。
結果が返された場合は、次の手順に進みます。
すべてのデータベースをチェックして、照合順序が
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インスタンスの使用可能なストレージが不足していることを意味します。
解決策:
次のコマンドを実行して、自己管理型PostgreSQLインスタンスの使用済みストレージを表示します。
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;
説明返される使用済みストレージは、MB単位で測定されます。
クラウド移行を成功させるためにApsaraDB RDS for PostgreSQLインスタンスが提供する必要がある利用可能なストレージを計算します。
たとえば、自己管理型PostgreSQLインスタンスの使用済みストレージが100 GBの場合、ApsaraDB RDS For PostgreSQLインスタンスの使用可能なストレージは110 GB以上である必要があります。
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インスタンスのシステムアカウントaurora
、replicator
、および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は、異なるデータベースに対するユーザーのデフォルトの権限を記録します。
解決策:
ソースインスタンスで次のステートメントを実行して、pg_parameter_aclおよびpg_db_role_settingテーブルのデータを消去します。
DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting;
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";