
アプライスDBのリードレプリカの作成
さくらのクラウドのアプラアンスDBのリードレプリカを作成する方法
初回公開日
最終更新日
今回は、さくらのクラウドのDBアプラアンスのリードレプリカを作成してみます。
現在のサーバ構成は下記の通りです。


ここからリードレプリカを作成してDBをマスター・スレーブの構成にしたいと思います。SELECT系のリクエストは全てリードレプリカに集約することで、マスタDBの負荷を下げることができます。
1. マスタDBのレプリカ設定の確認
サーバ構築編 #2 さくらクラウドでPostgreSQLのアプライアンスDBを作るでも紹介した通り、マスタDBを構築した際に、レプリカの設定を行なっています。
念の為、レプリカ設定が有効になっているかを確認します。さくらのクラウドの管理画面でアプライアンスDBの一覧を表示します。


上記のように構成欄「レプリケーション有効」となっていればOKです。
もし、レプリケーションを有効にしていない場合は、DBの詳細画面から上部メニューの「データベースの変更」からレプリケーションを有効にできます。ただし、「データベースの変更」でレプリケーション設定を追加する場合は、DBを一度シャットダウンしないといけないようです。




上記で「レプリケーション」を有効、「レプリカユーザパスワード」を設定します。
2. マスタDBの送信元IPにリードレプリカのIPを含める
私はマスタDBの送信元ネットワークを制限していたのですが、これにリードレプリカのIPを含めずに、レプリカ作成を行なってしまい失敗しました。。
特に送信元IPで制限していないとかプライベートネットワークは全て許可しているという場合は、このステップは不要です。
もし私と同じようにIPを制限している場合は、リードレプリカのIPを予め決めて、マスタDBの送信元IPへ追加しておくようにしてください。マスタDBの送信元IPの変更は、マスタDBを稼働したままで可能です。
マスタDBの詳細から「データベースの変更」をクリックします。

編集画面の「送信元ネットワーク」にこの後作成するリードレプリカのIPを予め決めて追加します。

この送信元IPの入力は少しクセがあって、IPを入力してエンターキーを入力すると入力完了になるようです。何度か入力に手間取りました。
3.リードレプリカDBの作成
※クローンDBとは異なり、リードレプリカはバックアップから作成されるわけではなく、マスタDBと直接接続され、リアルタイムに同期される構成です。
マスタDBの詳細画面でレプリケーションタブに移動します。
「追加」ボタンがあるのでこれをクリックします。

下記のようにレプリカDBの作成画面が表示されます。


- 「リードレプリカのマスターDB」:対象のマスタDBが選択されていることを確認
- 「レプリカユーザパスワード」:マスタDB側で設定したパスワードを入力
- 「接続スイッチ」:マスタDBが接続しているスイッチを選択

- 「ポート番号」:マスタDBと同じポートを指定
- 「IPv4アドレス」:任意のIPアドレスを指定、他のDBやサーバとバッティングしないようにしましょう。またマスタDBの送信元に予めレプリカのIPを含めた場合は、そのIPを間違えないように入力します。
- 「ゲートウェイ」:マスタDBと同じゲートウェイIPを指定
- 「送信元ネットワーク」:これは任意項目ですが、設定する場合は、マスタDBのIPアドレスを加えることを忘れないようにしましょう
必要情報を入力したら、「作成」ボタンをクリックします。
確認のポップアップ後に作成が始まります。作成完了まで少し時間がかかります。私の環境では、データが少ないからか4分ほどで完了しました。

これでレプリカの作成は完了です。下記のように負荷分散可能な構成が構築できました。

このあとの作業はこのリードレプリカを利用していく設定をおこって行きますが、それぞれの環境によって異なると思います。
私の環境ですとPostfix、Dovecot、Next.js回りになります。
4.リードレプリカの設定と動作確認
bash
1sudo vi /etc/hosts
bash : hosts
1# -------------------------------
2# DB サーバー名エイリアス
3192.168.xx.xx db-master.local
4192.168.yy.yy db-read.local
5# ⚠ Postfix は chroot 環境でこのファイルを参照できないため、
6# 編集したら以下のコマンドで手動でコピーすること!
7# sudo cp /etc/hosts /var/spool/postfix/etc/hosts
8# -------------------------------
上記のように予めリードレプリカ用に
db-read.local
を用意していた場合は、そのIPアドレスを今回作成したリードレプリカのIPへ変更してください。当サイトの環境の用にPostfixでDBを利用している場合は編集完了後に sudo cp /etc/hosts /var/spool/postfix/etc/hosts
の実行もお忘れなく。リードレプリカにはマスタDB利用していたユーザ情報も引き継がれますので、
db-read.local
でPostfixとDovecotの設定を行なっている場合は、上記の設定だけで終わりです。/var/spool/postfix/etc/hosts
の変わってもPostfixをリロードする必要はありません。DBeaver
などのクラアントツールでDBの接続確認、当サイトの場合はメールの送受信でテストを行なって動作確認を行います。以上で、リードレプリカの作成は完了です。
Next.jsでWebアプリを構築されている方向けのPrisma等の設定や利用方法は別途下記にて実践記録を参照してください。
この記事の執筆・編集担当
DE
松本 孝太郎
DELOGs編集部/中年新米プログラマー
ここ数年はReact&MUIのフロントエンドエンジニアって感じでしたが、Next.jsを学んで少しずつできることが広がりつつあります。その実践記録をできるだけ共有していければと思っています。