PostgreSQL でレプリケーション
PostgreSQL 9.2 でレプリケーション
CentOS 7で運用しているPostgreSQLでレプリケーションをおこないました。CentOS 7なので最新ではないので需要は少ないと思いますが、その際の手順をまとめておきます
マスター側は「192.168.0.10」で、スレーブ側は「192.168.0.11」で手順を作成しています
マスター側のPostgreSQLの設定
設定ファイルを編集(pg_hba.conf)に、レプリケーションで実行するサーバーのIPアドレスを追加して通信できるようにします
# vim /var/lib/pgsql/data/pg_hba.conf # replication host replication repl_user localhost trust host replication repl_user 192.168.0.11/32 trust
設定ファイルを編集(postgresql.conf)にレプリケーションに関する設定を追加します
# vim /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' wal_level = hot_standby max_wal_senders = 2 wal_keep_segments = 5 synchronous_standby_names = 'slave01' synchronous_commit = local
パラメータの意味は以下のようになります
listen_addresses = '*’ | 外部からの接続を許可 |
wal_level = hot_standby | WALに出力される情報を「hot_standby」設定。9.6では「replica」と同じです |
max_wal_senders=2 | DBサーバで起動するwal_senderプロセスの最大数 |
wal_keep_segments=5 | WAL ログファイルセグメントの最大数 |
synchronous_standby_names=’slave01′ | 同期スタンバイとして扱うスタンバイ名 |
synchronous_commit=local | トランザクションのコミットの完了報告のタイミング |
設定を反映させるために、PostgreSQLを再起動します
# systemctl restart postgresql
再起動したら、レプリケーション用のユーザー(repl_user)を作成します
# su pgsql $ psql postgres postgres=# CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'パスワード';
スレーブサーバーの設定
マスター側の設定が終わったら、スレーブサーバ側の設定を行います。
PostgreSQLをインストールします
# yum install postgresql-server
既存のデータベースのディレクトリを削除してから、マスター側よりデータベースの内容をコピーします
# data領域のデータを削除 # rm -Rf /var/lib/pgsql/data/* # データを削除したら、マスターよりコピーして所有者を変更 # pg_basebackup -h 192.168.0.10 -U repl_user -D /var/lib/pgsql/data/ --xlog --progress # chown -R postgres:postgres /var/lib/pgsql/data/す
スレーブ側のpostgre.conf の不要な設定を削除して、必要な設定を追加します
# vi /var/lib/pgsql/data/postgresql.conf # レプリケーション関係 hot_standby = on # 不要なのでコメントアウト # synchronous_standby_names = 'slave01'
recovery.conf にレプリケーションに必要な設定を追加します
# cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf # chown postgres:postgres /var/lib/pgsql/data/recovery.conf # vim /var/lib/pgsql/data/recovery.conf standby_mode = 'on' primary_conninfo = 'host=192.168.0.10 port=5432 user=repl_user password=[パスワード] application_name=slave01'
自動起動を有効にして、PostgreSQLを起動します
# systemctl enable postgresql.service # systemctl start postgresql.service
レプリケーションができているか確認
マスター側で以下のコマンドを実行します。sync_stateがsyncとなっていればレプリケーションができています
$ psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;" application_name | state | sync_priority | sync_state ------------------+-----------+---------------+------------ slave01 | streaming | 1 | sync
もう少し詳細にレプリケーションの情報が知りたい場合は以下になります
$ psql -x -U postgres -c 'select * from pg_stat_replication;' -[ RECORD 1 ]----+------------------------------ pid | 29233 usesysid | 93439 usename | repl_user application_name | slave01 client_addr | 192.168.0.11 client_hostname | client_port | 33094 backend_start | 2021-12-05 22:58:55.916501+09 state | streaming sent_location | 3/B5B294C0 write_location | 3/B5B294C0 flush_location | 3/B5B294C0 replay_location | 3/B5B29410 sync_priority | 1 sync_state | sync
スレーブ側では、最終に同期された時間が確認できます
$ psql -U postgres -c "SELECT pg_last_xact_replay_timestamp()" pg_last_xact_replay_timestamp ------------------------------- 2021-12-09 14:00:08.236253+0
ディスカッション
コメント一覧
まだ、コメントがありません