[Dev] Hivimind データベースをレプリケーションしてみる
こんにちは、@yasuです。
Postgresqlの学習をしています。
レプリケーションを理解しようと、いろいろ調べています。
レプリケーション用ユーザを追加
CREATE USER repl WITH REPLICATION;
レプリケーション用ユーザを接続許可
/var/lib/postgresql/data/pg_hba.conf
/var/lib/postgresql/data/postgresql.conf
変更前 | 変更後 |
---|---|
# wal_level = replica | wal_level = replica |
# max_wal_senders = 10 | max_wal_senders = 10 |
# synchronous_standby_names = '' | ynchronous_standby_names = '*' |
# synchronous_commit = on | synchronous_commit = off |
現在、バックアップ中です。
昨夜からバックアップを開始して、
docker-compose -f docker-compose.yml up -d db3
今朝は80%ほどでした。
データが大きいので、もう少しかかりそうです。
レピュテーションの確認は、その後です。
docker-compose.yml
設定ファイルのデフォルトは、/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
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
バックアップが終わったようです。
プライマリ
レプリカ
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