LoginSignup
2
4

【OCI クラウド移行ガイド】RDS for PostgreSQLからOCI Computeへのレプリケーションを設定してみた~PostgreSQL編~

Last updated at Posted at 2023-10-27

OCIクラウド移行ガイドとは

オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。

移行したいサンプルワークロード

日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。

image.png

移行検討するサービス:RDS for PostgreSQL

今回、移行検討対象とするのはAmazon RDS for PostgreSQLです。
移行先はOracle CloudのCompute(=IaaS)です。
残念ながら2023/10/27時点ではOracle Cloud上でPostgreSQLのPaaSがないためComputeとします。
IaaSでDBを動かすメリットとしては圧倒的なコスト削減が挙げられます。
PostgreSQLの利用コスト削減目的の方の一助になれば幸いです。

PostgreSQLの移行準備として今回はレプリケーション設定を実施してみます。
PostgreSQLのレプリケーションには、データベース全体を複製する ストリーミングレプリケーション(物理レプリケーション) と、テーブルやデータベースごとに複製する ロジカルレプリケーション(論理レプリケーション) があります。

今回はRDS for PostgreSQLとOCI Compute上のPostgreSQLのロジカルレプリケーションを試してみたいと思います。
パブリッシャー(=連携元DB)をRDS、サブスクライバー(=連携先DB)をPostgreSQL on Computeとして作業します。

image.png

作業の流れ

①RDS for PostgreSQLの構築
②OCI Compute上でのPostgreSQLの構築
③RDS for PostgreSQLとPostgreSQL on Computeのロジカルレプリケーション設定

①RDS for PostgreSQLの構築

ソース元となるRDS for PostgreSQLを構築します

事前にpostgreSQL15のカスタムパラメータグループを作成します
「rds.logical_replication:1」に変更します
「rds.force_ssl:0」に変更します
image.png

image.png

RDSの作成画面では以下に注意してインスタンス作成を実施します
エンジンバージョン:PostgreSQL15.3-R2
パブリックアクセス:あり
パラメータグループ(追加設定):先ほど作成したカスタムパラメータグループを指定
image.png

image.png

image.png

②OCI Compute上でのPostgreSQLの構築

まずOracle Cloud Computeを作成します。

最新のyumリポジトリのインストール
こちらから利用OSに応じたURLを指定します
今回はOracleLinux8にしたのでREHL8系のものを利用します

sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

デフォルトのPostgreSQLのモジュールを無効化

sudo yum -qy module disable postgresql

どのバージョンがインストールできるかの確認
今回は11-16までがインストールできることを確認

[root@postgresql-server opc]# yum search postgresql*-server
Last metadata expiration check: 0:00:41 ago on Wed 25 Oct 2023 06:50:47 AM GMT.
============================================== Name Matched: postgresql*-server ===============================================
postgresql11-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql12-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql13-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql14-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql15-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql16-server.x86_64 : The programs needed to create and run a PostgreSQL server

PostgreSQLのインストール
今回はRDS for PostgreSQLに合わせるため15を選択します。

sudo yum install -y postgresql15-server

バージョン確認

[root@postgresql-server opc]# psql --version
psql (PostgreSQL) 15.4

PostgreSQLの初期設定
以下コマンドを実行すると登録パスワードを2回求められますので任意のものを入力します

sudo su - postgres -c '/usr/pgsql-15/bin/initdb -E UTF8 --locale=C -A scram-sha-256 -W'

systemdのサービスとして有効化

sudo systemctl enable postgresql-15.service

PostgreSQLの起動

sudo systemctl start postgresql-15.service

PostgreSQLへのアクセス確認
データベースクラスタ作成時に入力したパスワードを入力します

psql  --username=postgres

③RDS for PostgreSQLとPostgreSQL on Computeのロジカルレプリケーション設定

③-1 RDS for PostgreSQL(=パブリッシャー)の設定

OCI ComputeRDS for PostgreSQLにアクセスします
※この際、エラー等が出る際AWSのセキュリティグループや、OCIのセキュリティリストなどネットワーク疎通を確認してください

psql --host=endpoint --port=5432 --username=postgres

問題なくアクセスできれば検証用データベースを作成します
DBの作成:test_db

postgres=> CREATE DATABASE test_db;
CREATE DATABASE

作成したtest_dbにアクセス

postgres=> \c test_db
psql (15.4, server 15.3)
You are now connected to database "test_db" as user "postgres".

テーブル作成:test_table

test_db=> CREATE TABLE test_table (id char(4) not null, name text not null,  PRIMARY KEY(id));
CREATE TABLE

test_tableにレコード作成

test_db=> INSERT INTO test_table(id,name) VALUES (1,'hoge');
INSERT 0 1

テーブル確認

test_db=> SELECT * FROM test_table;
  id  | name
------+------
 1    | hoge
(1 row)

パブリケーションの作成

test_db=> CREATE PUBLICATION testpub FOR ALL TABLES;
CREATE PUBLICATION

③-2 PostgresSQL on Compute(=サブスクライバー)の設定

OCI Compute上のPostgreSQLにアクセス

psql -U postgres

DBの作成:test_db

CREATE DATABASE test_db;

test_dbにアクセス

\c test_db

テーブル作成:test_table

CREATE TABLE test_table (id char(4) not null, name text not null,  PRIMARY KEY(id));

サブスクリプションの作成

CREATE SUBSCRIPTION testsub CONNECTION 'host=<RDS エンドポイント> port=5432 dbname=testdb user=postgres password=<パスワード>' PUBLICATION testpub;

テーブルの中身がパブリッシャーと同様になっていることを確認

postgres=# SELECT * FROM test_table;
  id  | name
------+------
 1    | hoge
(1 row)

③-3 レプリケーションの動作確認
レプリケーション設定後に再度、連携元であるRDSを更新して連携先であるPostgreSQL on Computeでも反映されているか確認します
RDSへアクセス

psql --host=endpoint --port=5432 --username=postgres

test_dbにアクセス

\c test_db

追加レコードをインサート

INSERT INTO test_table(id,name) VALUES (2,'fuga');

テーブル内容確認

SELECT * FROM test_table;	
	test_db=> SELECT * FROM test_table;
	  id  | name
	------+------
	 1    | hoge
	 2    | fuga
	(2 rows)

OCI Compute上のPostgreSQLにアクセス

psql -U postgres

test_dbにアクセス

\c test_db

RDSと同様のテーブル内容になっているか確認
問題なくレプリケーションされていることを確認

SELECT * FROM test_table;	
	test_db=> SELECT * FROM test_table;
	  id  | name
	------+------
	 1    | hoge
	 2    | fuga
	(2 rows)

※うまく動かない際は「/var/lib/pgsql/15/data/log」にログが吐かれているので確認してください

最後に

今回はRDS for PostgreSQLをパブリッシャー、PostgreSQL on Computeをサブスクライバーとしてロジカルレプリケーション設定を実施してみました。

現時点ではOracle Cloud側にPostgreSQLのPaaSがないため、IaaSを対象としましたが、「OCI Database for PostgreSQL」が2023年12月に一般提供が予定されているとのことです。

一般提供され次第、いろいろ触ってみたいと思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4