DELOGs
アプライスDBのリードレプリカの作成

アプライスDBのリードレプリカの作成

さくらのクラウドのアプラアンスDBのリードレプリカを作成する方法

初回公開日

最終更新日

今回は、さくらのクラウドのDBアプラアンスのリードレプリカを作成してみます。
現在のサーバ構成は下記の通りです。 サーバ構成
ここからリードレプリカを作成してDBをマスター・スレーブの構成にしたいと思います。SELECT系のリクエストは全てリードレプリカに集約することで、マスタDBの負荷を下げることができます。

1. マスタDBのレプリカ設定の確認

サーバ構築編 #2 さくらクラウドでPostgreSQLのアプライアンスDBを作るでも紹介した通り、マスタDBを構築した際に、レプリカの設定を行なっています。
念の為、レプリカ設定が有効になっているかを確認します。さくらのクラウドの管理画面でアプライアンスDBの一覧を表示します。 DB一覧
上記のように構成欄「レプリケーション有効」となっていればOKです。
もし、レプリケーションを有効にしていない場合は、DBの詳細画面から上部メニューの「データベースの変更」からレプリケーションを有効にできます。ただし、「データベースの変更」でレプリケーション設定を追加する場合は、DBを一度シャットダウンしないといけないようです。 DB詳細
DBの設定変更
レプリケーション設定の変更
上記で「レプリケーション」を有効、「レプリカユーザパスワード」を設定します。

2. マスタDBの送信元IPにリードレプリカのIPを含める

私はマスタDBの送信元ネットワークを制限していたのですが、これにリードレプリカのIPを含めずに、レプリカ作成を行なってしまい失敗しました。。 特に送信元IPで制限していないとかプライベートネットワークは全て許可しているという場合は、このステップは不要です。
もし私と同じようにIPを制限している場合は、リードレプリカのIPを予め決めて、マスタDBの送信元IPへ追加しておくようにしてください。マスタDBの送信元IPの変更は、マスタDBを稼働したままで可能です。 マスタDBの詳細から「データベースの変更」をクリックします。
DBの設定変更
編集画面の「送信元ネットワーク」にこの後作成するリードレプリカのIPを予め決めて追加します。
DBの送信元ネットワーク編集
この送信元IPの入力は少しクセがあって、IPを入力してエンターキーを入力すると入力完了になるようです。何度か入力に手間取りました。

3.リードレプリカDBの作成

※クローンDBとは異なり、リードレプリカはバックアップから作成されるわけではなく、マスタDBと直接接続され、リアルタイムに同期される構成です。
マスタDBの詳細画面でレプリケーションタブに移動します。 「追加」ボタンがあるのでこれをクリックします。
レプリカ作成
下記のようにレプリカDBの作成画面が表示されます。 レプリカ作成の詳細
  • 「リードレプリカのマスターDB」:対象のマスタDBが選択されていることを確認
  • 「レプリカユーザパスワード」:マスタDB側で設定したパスワードを入力
  • 「接続スイッチ」:マスタDBが接続しているスイッチを選択
レプリカ作成の詳細2
  • 「ポート番号」:マスタDBと同じポートを指定
  • 「IPv4アドレス」:任意のIPアドレスを指定、他のDBやサーバとバッティングしないようにしましょう。またマスタDBの送信元に予めレプリカのIPを含めた場合は、そのIPを間違えないように入力します。
  • 「ゲートウェイ」:マスタDBと同じゲートウェイIPを指定
  • 「送信元ネットワーク」:これは任意項目ですが、設定する場合は、マスタDBのIPアドレスを加えることを忘れないようにしましょう
必要情報を入力したら、「作成」ボタンをクリックします。 確認のポップアップ後に作成が始まります。作成完了まで少し時間がかかります。私の環境では、データが少ないからか4分ほどで完了しました。
レプリカ作成の完了
これでレプリカの作成は完了です。下記のように負荷分散可能な構成が構築できました。
レプリカ作成後のサーバ構成
このあとの作業はこのリードレプリカを利用していく設定をおこって行きますが、それぞれの環境によって異なると思います。 私の環境ですとPostfix、Dovecot、Next.js回りになります。

4.リードレプリカの設定と動作確認

当サイトではDB接続については、/etc/hostsで設定することを推奨しています(サーバ構築編#2サーバ構築編#10参照)。/etc/hostsでリードレプリカのIPを記載します。
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を学んで少しずつできることが広がりつつあります。その実践記録をできるだけ共有していければと思っています。