PostgreSQLインスタンスでストリーミングレプリケーションを構成する方法

この記事では、Postgresqlのインストールと、異なるホスト上の2つのPostgreSQLインスタンスのストリーミングレプリケーション構成について説明します。 私たちの目標は、マスターホストにPostgres 9.5をインストールし、スレーブホストにPostgres 9.5をインストールし、それらの間でストリーミングレプリケーションを構成することです。

インストールと構成

まず、CentOSを実行しているマスターホストにPostgreSQL9.5をインストールして準備します。 まず、rpmコマンドを使用してcentos-releaseパッケージのクエリを実行し、CentOSのバージョンを明らかにする必要があります。

rpm --query centos-release

私たちの中で example x86_64アーキテクチャを備えたCentOSリリース6.8を検討します。 ここで、yum installコマンドを実行するために、rpmパッケージをインストールする必要があります。

rpm -i https://yum.postgresql.org/9.5/redhat/rhel-6.8-x86_64/pgdg-redhat95-9.5-3.noarch.rpm

次のコマンドを実行して、すべてが適切な場所にあることを確認してください。

yum list postgresql95*

これで、PostgreSQL9.5をインストールできます。

yum install postgresql95-server.x86_64

必要に応じて、他のパッケージをインストールできます。

Postgresql-9.5サーバーをインストールしたら、データベースを初期化して構成する必要があります。 最初のコマンド(1回だけ必要)は、PGDATAでデータベースを初期化することです。

/etc/init.d/postgresql-9.5 initdb

また

service postgresql-9.5 initdb

OSの起動時にPostgreSQLを自動的に起動する場合は、次の手順を実行します。

chkconfig postgresql-9.5 on

この時点でサービスを開始する準備ができていますが、その前に/var/lib/pgsql/9.5/data/postgresql.confファイルを更新します。 listen_addresses行のコメントを解除し、ローカルホストと一緒にIPアドレスを入力してください。

listen_addresses="your IP, 127.0.0.1"

次に、/ var / lib / pgsql / 9.5 / data /pg_hba.confファイルを次のように変更してください。

# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all your IP md5

データベースサービスを制御するには、

service postgresql-9.5 [command]

どこ [command] することができます:

start-データベースを開始します
stop-データベースを停止します
restart-データベースを停止/開始します。 通常、コア構成ファイルへの変更を読み取るために使用されます。
リロード-データベースの実行を維持しながらpg_hba.confファイルをリロードします

サービスを開始してください。マスターホストへのPostgresql9.5のインストールが完了します。

次のステップでは、Postgresql9.5をスレーブホストにインストールします。 手順はほとんど同じです。 まず、rpmパッケージをインストールする必要があります。

注意:次の手順は、別のホスト、いわゆるスレーブホストで実行する必要があります。

rpm -i https://yum.postgresql.org/9.5/redhat/rhel-6.8-x86_64/pgdg-redhat95-9.5-3.noarch.rpm

Postgresql9.5をインストールします

yum install postgresql95-server.x86_64

次にそれを初期化します

service postgresql-9.5 initdb

スタートアップ時に自動的に起動するようにする

chkconfig postgresql-9.5 on

そして、構成ファイル/var/lib/pgsql/9.5/data/postgresql.confを次のように変更します。

listen_addresses="your IP, 127.0.0.1"

次に、/ var / lib / pgsql / 9.5 / data /pg_hba.confファイルを更新します。

# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all your IP md5

これで、サービスを開始する準備が整いました

service postgresql-9.5 start

レプリケーション構成

ストリーミングレプリケーションは、最新の状態を維持するために、WAL XLOG(先行書き込みログ)レコードをいくつかのスタンバイサーバーに継続的に送信して適用する機能を提供します。 この機能はPostgresSQL9.0に追加されました。
さて、異なるホストに2つの異なるPostgreSQLインスタンスがインストールされています。 次に、マスターホストでREPLICATION権限を持つreplicationという名前のユーザーを作成する必要があります。

さて、異なるホストに2つの異なるPostgreSQLインスタンスがインストールされています。 次に、マスターホストでREPLICATION権限を持つreplicationという名前のユーザーを作成する必要があります。

su - postgres
psql
CREATE ROLE replication WITH REPLICATION PASSWORD 'password' LOGIN

スタンバイ(スレーブホスト)がプライマリ上のレプリケーション疑似データベースに正常に接続できるように、マスターホストで接続と認証を設定します。 /var/lib/pgsql/9.5/data/pg_hba.confを編集します

host replication replication slave host IP md5

次に、masters構成ファイル/var/lib/pgsql/9.5/data/postgresql.confを次のように更新する必要があります。

# Add settings for extensions here
max_connections = 200
shared_buffers = 15GB
effective_cache_size = 45GB
work_mem = 39321kB
maintenance_work_mem = 2GB
checkpoint_segments = 32
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100

#logging settings
log_directory = '/var/log/pg_log95'
log_filename="postgresql-%d_%H%M%S.log"
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
log_min_duration_statement = 30000
log_connections = true
tcp_keepalives_idle = 30

# Streaming replication
# To enable read-only queries on a standby server, wal_level must be set to
# "hot_standby". But you can choose "archive" if you never connect to the
# server in standby mode.
wal_level = hot_standby

# Set the maximum number of concurrent connections from the standby servers.
max_wal_senders = 5

# Enable WAL archiving on the primary to an archive directory accessible from
# the standby. If wal_keep_segments is a high enough number to retain the WAL
# segments required for the standby server, this is not necessary.
archive_mode = on
archive_command = 'rsync -a %p postgres@[SLAVE IP]:/db/psql95_wal_archive/%f'

スレーブホストのデータディレクトリを移動する必要があります

mv /var/lib/pgsql/9.5/data /var/lib/pgsql/9.5/data_bkp

次に、マスターホストのデータディレクトリをスレーブホストにコピーして、ベースバックアップを作成する必要があります。 スレーブホストでpg_basebackupコマンドを使用して実行できます。

pg_basebackup -h [MASTER IP] -D /var/lib/pgsql/9.5/data -P -U replication --xlog-method=stream

次に、スレーブホストの/var/lib/pgsql/9.3/data/postgresql.confを次のように変更する必要があります

# Add settings for extensions here
max_connections = 200
shared_buffers = 15GB
effective_cache_size = 45GB
work_mem = 39321kB
maintenance_work_mem = 2GB
checkpoint_segments = 32
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100

#logging settings
log_directory = '/var/log/pg_log93'
log_filename="postgresql-%d_%H%M%S.log"
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
log_min_duration_statement = 30000

# Streaming replication
hot_standby = on

スレーブホスト/var/lib/pgsql/9.5/data/recovery.confにリカバリコマンドファイルを作成します。 ストリーミングレプリケーションには、次のパラメータが必要です

# Specifies whether to start the server as a standby. In streaming replication,
# this parameter must to be set to on.
standby_mode="on"

# Specifies a connection string which is used for the standby server to connect
# with the primary.
primary_conninfo = 'host=[MASTER IP] user=replication password=[PASSWORD]'

# Specifies a trigger file whose presence should cause streaming replication to
# end (i.e., failover).
trigger_file="/var/lib/pgsql/9.5/data/trigger_file"

# Specifies a command to load archive segments from the WAL archive. If
# wal_keep_segments is a high enough number to retain the WAL segments
# required for the standby server, this may not be necessary. But
# a large workload can cause segments to be recycled before the standby
# is fully synchronized, requiring you to start again from a new base backup.
restore_command = 'cp /db/psql95_wal_archive/%f "%p"'
archive_cleanup_command = '/usr/pgsql-9.5/bin/pg_archivecleanup /db/psql95_wal_archive/ %r'

/var/lib/pgsql/9.5/dataの両方のホストの所有者とそのサブディレクトリがpostgresユーザーであることを確認してください。 また、スレーブホストにpostgres所有者を含むディレクトリ/ db / psql93_wal_archive /を作成する必要があります。
そして、PostgreSQLインスタンスを再起動する前の最後のステップは、postgresユーザーのスレーブホストでRSAキーを生成し、それをマスターにコピーすることです。

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa postgres@[MASTER IP]

これで、最初にマスターで、次にスレーブでpostgresサービスを再起動する準備が整いました。

結論

ストリーミングレプリケーションを構成して、スタンバイサーバーがファイルベースのログ配布で可能な場合よりも最新の状態を維持できるようにしました。 スタンバイはプライマリに接続します。プライマリは、WALファイルがいっぱいになるのを待たずに、生成されたWALレコードをスタンバイにストリーミングします。