OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行したいサンプルワークロード
日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。
移行検討するサービス: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として作業します。
作業の流れ
①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」に変更します
RDSの作成画面では以下に注意してインスタンス作成を実施します
エンジンバージョン:PostgreSQL15.3-R2
パブリックアクセス:あり
パラメータグループ(追加設定):先ほど作成したカスタムパラメータグループを指定
②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月に一般提供が予定されているとのことです。
一般提供され次第、いろいろ触ってみたいと思います。