[Dev] Hivimind データベースをレプリケーションしてみる

in #japanese11 months ago (edited)

image.png

こんにちは、@yasuです。

Postgresqlの学習をしています。

レプリケーションを理解しようと、いろいろ調べています。

レプリケーション用ユーザを追加
CREATE USER repl WITH REPLICATION;
image.png

レプリケーション用ユーザを接続許可
/var/lib/postgresql/data/pg_hba.conf
image.png

/var/lib/postgresql/data/postgresql.conf

変更前変更後
#wal_level = replicawal_level = replica
#max_wal_senders = 10max_wal_senders = 10
#synchronous_standby_names = ''ynchronous_standby_names = '*'
#synchronous_commit = onsynchronous_commit = off

現在、バックアップ中です。

昨夜からバックアップを開始して、
docker-compose -f docker-compose.yml up -d db3

今朝は80%ほどでした。

データが大きいので、もう少しかかりそうです。

レピュテーションの確認は、その後です。


docker-compose.yml
image.png

設定ファイルのデフォルトは、/var/lib/postgresql/dataですが、command: -c 'config_file=/etc/postgresql/postgresql.conf' -c 'hba_file=/etc/postgresql/pg_hba.conf'は、postgresql.confやpg_hba.confをデフォルト位置から変更しています。

実行開始のデフォルトは、/docker-entrypoint-initdb.dディレクトリにあるshファイルやsqlファイルですが、entrypoint:で開始するファイルを変更しています。

entrypoint.shでは、データベース開始前に、バックアップを開始するようにしています。バックアップする際に、dataディレクトリがあるとエラーとなるための対策です。


entrypoint.sh
image.png

pg_basebackup -R -h 126.89.220.5 -p 25432 -U repl -D /var/lib/postgresql/data --progress -X stream
は、2度目の起動でエラーで中断します。
後ろに|| trueを付けることで、エラーを無視して処理を続行します。
pg_basebackup -R -h 126.89.220.5 -p 25432 -U repl -D /var/lib/postgresql/data --progress -X stream || true


バックアップが終わったようです。

プライマリ
image.png

レプリカ
image.png


Hivemindのデータを取得できました!

Hivemindのsyncコマンドは実行せず、serverコマンドのみを実行してみました。

プライマリにレプリカに、同期が行われているようです!

curl --data '{"jsonrpc":"2.0","id":0,"method":"hive.db_head_state","params":{}}' http://172.100.2.4:8080

curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_discussions_by_blog", "params":[{"tag":"yasu","limit":1}], "id":1}' http://172.100.2.4:8080

image.png

次の記事
[Dev] Hivemind データベースが同期しています