Amazon Web Services ブログ
Bucardo を使用して従来の PostgreSQL データベースを Amazon RDS または Aurora PostgreSQL に移行する
9.4 より前の PostgreSQL を使用している場合、サポートされていない PostgreSQL バージョンを使用していることになります。Amazon RDS または Amazon Aurora PostgreSQL でデータベースを移行または複製するためのオプションが制限されている場合があります。これは主に、9.4 よりも古いバージョンの PostgreSQL では論理複製を実行できないのが原因です。
Bucardo は、データの変更を非同期で複数のセカンダリまたは複数のマスターに複製できるオープンソースユーティリティです。これはトリガーベースのレプリケーションであり、より広範囲の移行や継続的なレプリケーションに対して一貫性と安定性が実証されています。Bucardo は、プライマリキーなしでテーブルの全ロードを実行できます。ただし、デルタデータの変更をプライマリから複製するには、セットアップを開始する前にプライマリキーを作成します。
この記事では、Bucardo をセットアップし、PostgreSQL 8.4 から PostgreSQL 9.6 にデータ変更を複製する方法を示しています。
前提条件
開始する前に、次のものが必要です。
- Bucardo 用 Ubuntu 16.04 を使用する 1 つの EC2 インスタンス (Bucardo サーバー: 172.31.88.4)
- PostgreSQL 8.4.2 で RHEL 6 を使用する 1 つの EC2 インスタンス (PostgreSQL 8.4.2: 172.31.16.177)
- us-east-1 に 1 つの RDS PostgreSQL 9.6 (RDS 9.6)
この記事では、Amazon EC2 で PostgreSQL 8.4.2 を使用しています。ただし、PostgreSQL データベースはオンプレミスで実行されている場合があります。
このソリューションでは、Ubuntu 16.04 に Bucardo 5.4.1 をインストールします。つまり、Bucardo のリポジトリは、PostgreSQL 9.6 インスタンスで実行されている同じホスト上にあります。次の図は、データ複製フローのアーキテクチャを示しています。

図: Bucardo を使用して PostgreSQL 8.4 を RDS PostgreSQL 9.6 に移行するためのレプリケーションアーキテクチャ。
Bucardo バイナリのインストール
Bucardo をインストールする前にインストールする必要のあるパッケージがいくつかあります。次のコードを参照してください。
CPAN に接続し、DBI,DBD::Pg,DBIx::Safe
をインストールします。次のコードを参照してください。
Bucardo バイナリをローカルディレクトリにダウンロードし、展開
します。次のコードを参照してください。
スーパーユーザーとリポジトリデータベースの作成
環境間のレプリケーションを制御して追跡するには、Bucardo スーパーユーザーとリポジトリデータベースを作成する必要があります。PSQL クライアントまたは pgadmin4
を使用して DB-APP1
に接続し、DR-App1
にスーパーユーザーとリポジトリを作成します。次のコードを参照してください。
スーパーユーザーとリポジトリデータベースを作成したら、PSQL を終了し、Bucardo ソフトウェアがステージングされているターミナルから “bucardo install” を実行します。これにより、Bucardo データベースに一連のテーブルが作成されます (データベース所有者は Bucardo スーパーユーザーでなければなりません)。
Bucardo リポジトリのインストール
Bucardo リポジトリをインストールするには、次のコードを入力します。
これにより、Bucardo データベースが既存の PostgreSQL クラスターにインストールされます。Perl サポートを使用して PostgreSQL をコンパイルし、スーパーユーザーとして接続する必要があります。次のコードを参照してください。
相互接続するために Bucardo と PostgreSQL データベースサーバーをホワイトリストに追加
pgpass
を使用してパスワードのない認証を設定し、ソースデータベースとターゲットデータベースを安全に接続します。Bucardo サーバーで、次のコードを入力します。
次のコードを使用して、パスワードなしで Bucardo サーバーがソースデータベースとターゲットデータベースに接続できることを確認します。
アクセス許可拒否エラーの解決
RDS はマネージドサービスであるため、AWS はセキュリティ上の理由からスーパーユーザーの権限を提供しません。トリガーベースのレプリケーションを実行するには、パラメータ session_replication_role
を有効にする必要があります。
セキュリティ定義関数 rds_session_replication_role
を使用できます。これは、イベントが発生したときにレプリカ
にパラメータを設定するのに役立ちます。すべての環境で一貫性を保つために、この記事では EC2 PostgreSQL (8.4.2) および RDS でセキュリティ定義関数を作成します。
次のコードで言語 plpgsql;
を作成します。
また、5397 行と 5330 行で bucardo.pm ファイルを次のコードに変更します。
あるいは、更新された bucardo.pm ファイルをダウンロードして、/usr/local/share/perl/5.22.1/Bucardo.pm
で Bucardo が実行されているサーバーにファイルを移動することもできます。本番環境で実行している場合は、使用する前にテストを行ってください。
サンプルソースデータベースの生成とターゲットの全ロードの開始
ソースデータベースで、pgbench
を使用していくつかのテストデータを生成します。この記事では、4 つのテーブルが生成されます。3 つはプライマリキーが有効で、もう 1 つはプライマリキーが無効です。次のコードを参照してください。
次のコードは、repdb
で生成されたサンプルデータです。
データ数とテーブル構造を確認します。次のコードを参照してください。
pg_dump および pg_restore を使用したソースデータベースからの repdb 移行
pg_dump
を使用してソースデータベースをバックアップします。次のコードを参照してください。
RDS PostgreSQL にログインして、データベース repdb
を作成します。次のコードを参照してください。
pg_restore
を使用して、RDS PostgreSQL で新しく作成された repdb
で生成されたダンプファイルを復元します。次のコードを参照してください。
詳細については、Amazon RDS で PostgreSQL にデータをインポートするを参照してください。
プライマリキーでテーブルを複製するための Bucardo 構成
従来の Bucardo セットアップは、ソースデータベースとターゲットデータベースを追加し、プライマリキーを持つテーブルをグループに追加し、同期を作成して有効化し、ソースからの変更を複製する手順で構成されています。
ソースデータベースを追加するには、次のコードを入力します。
ターゲット RDS データベースを追加するには、次のコードを入力します。
群れにテーブルを追加するには、次のコードを入力します。
データベースグループを追加するには、次のコードを入力します。
特定のデータベースグループに複数のデータベースを含めることができます。
開始する前に Bucardo の同期ステータスをチェックして、作成されたパラメータが表示されることを確認します。次のコードを参照してください。
Bucardo を起動して、ステータスを確認します。次のコードを参照してください。
現在の状態
は良好
であり、現在、ソースデータベースでは、挿入、更新、削除は行われていません。
レプリケーションをテストするには、pgbench
を使用してソースデータベースにテストロードを生成し、ターゲットの変更をモニタリングします。次のコードを参照してください。
pgbench
を実行すると、いくつかのトランザクションが生成されますが、アクセス許可の問題により Bucardo をターゲットに移動できません。したがって、現在の状態
のステータスは不良
です。次のコードを参照してください。
このエラーが発生した場合は、手順通りに実行してアクセス許可拒否エラーを解決してください。この例では、ソースデータベースとターゲットデータベースでセキュリティ定義関数が作成されず、前述のエラーが発生しました。セキュリティ定義者を実装した後、Bucardo を再起動します。次のコードを参照してください。
現在の状態
は良好
で、データベースで 294 回の削除と挿入が発生しました。これで、Bucardo が正常であることを確認できます。最終エラー
のエントリは無視できます。次のコードを参照してください。
複製をデバッグするために、Bucardo ログは /var/log
ディレクトリに存在しています。次のコードを参照してください。
まとめ
この記事では、非同期トリガーベースのレプリケーションユーティリティ Bucardo を使用して、9.4 より古い従来の PostgreSQL データベースを Amazon RDS PostgreSQL または Aurora PostgreSQL に移行するという課題を克服する完全なソリューションを示しました。
このソリューションに関するコメントやご質問は、以下のコメントセクションからお送りください。
著者について
Rajeshkumar Sabankar は、アマゾン ウェブ サービスのデータベース専門アーキテクトです。 Amazon の内部顧客と連携して、AWS クラウドで安全でスケーラブルで復元力のあるアーキテクチャを構築し、顧客がオンプレミスデータベースから Amazon RDS および Aurora データベースに移行するように支援しています。
Samujjwal Roy はデータベース専門アーキテクトで、アマゾン ウェブ サービスのプロフェッショナルサービスチームの一員です。Amazon に 15 年以上勤続し、Amazon 内外のお客様の移行プロジェクトを主導して、オンプレミスデータベース環境から AWS クラウドデータベースソリューションへの移行を手がけてきました。