レプリケーションサーバーが起動しません。私はここの指示に従いました:
http://opensourcedbms.com/dbms/setup-replication-with-postgres-9-2-on-centos-6redhat-el6Fedora/
同様にPostgres Wikiを含む他のいくつかの場所も同じ情報を持っています。
これが起こることです:/9.2/data
フォルダーの完全バックアップを実行して、それをレプリケーション/スレーブサーバーに移動し、解凍します。 PostgreSQLとpgAdminを起動して、すべてのデータに問題なくアクセスできます。
次に、スレーブサーバーのpg_hba.conf
およびpostgresql.conf
を編集する手順に移動します。起動しようとすると、失敗します(赤のエラー[fail]。理由を示すログがどこにも見つかりません。
データフォルダーにpostmaster.pid
がないことも確認しました。
また、ログファイルが見つかりません。構成でログファイルを「アクティブ化」する必要がありますか?
だから、もし誰かが私の漠然とした説明を暗闇で試してみたいと思ったら、私はどんな提案も聞きたいです。それが役立つ場合は、Pastebinにconfファイルを置くことができます。
まず、PostgresqlデータディレクトリとWAL
(ログの書き込み)ディレクトリのマウントポイントを決定します。パフォーマンスのために、$PGDATA
およびpg_xlog
ディレクトリは別のボリュームにある必要があります。
以下の例では、次のように定義されています。
archive_command
からWALセグメントが送信される場所です。理想的には、$ PGDATAとは別のボリュームにあります。仮定:
mkdir -p /pgdata/WAL_Archive
chown postgres:postgres /pgdata/WAL_Archive
$PGDATA/postgresql.conf
を編集しますwal_level = hot_standby
archive_mode = on
## /pgdata/WAL_Archive is a staging directory on the slave
archive_command = 'rsync -W -az %p postgres@$SLAVE_IP_HERE:/pgdata/WAL_Archive/'
max_wal_senders = 5
wal_keep_segments = 5000 # If you have the room, to help the pg_basebackup
# not fail due to WAL segments being removed from master.
# For clusters will very little traffic, 100 is probably fine
psql -U postgres -d postgres -c "CREATE USER replication WITH replication ENCRYPTED PASSWORD 'changeme' LOGIN"
# TYPE DATABASE USER ADDRESS METHOD
#hostssl replication replication $SLAVE_IP_HERE/32 md5
Host replication replication $SLAVE_IP_HERE/32 md5
例えば:
pg_ctl -D $PGDATA restart -m fast
## The master cluster MUST be restarted before the pg_basebackup command is executed.
## --Host=IP_OF_MASTER -> The master's IP
## --pgdata=$PGDATA -> The slave's $PGDATA directory
## --xlog-method=stream -> Opens a second connection to the master to stream the WAL segments rather than pulling them all at the end
## --password will Prompt for the replication role's password
## Without compression, "stream" gets the changes via the same method as Streaming Replication
time pg_basebackup --pgdata=$PGDATA --Host=IP_OF_MASTER --port=5432 --username=replication --password --xlog-method=stream --format=plain --progress --verbose
## Alternate version with compression, note "--xlog --gzip --format=tar"
#time pg_basebackup --pgdata=$PGDATA --Host=IP_OF_MASTER --port=5432 --username=replication --password --xlog --gzip --format=tar --progress --verbose
hot_standby = on #off # "on" allows queries during recovery
max_standby_archive_delay = 15min # max delay before canceling queries,
# set to hours if backups will be taken from here
max_standby_streaming_delay = 15min # max delay before canceling queries
hot_standby_feedback = on #off
$PGDATA/recovery.conf
を作成します。standby_mode = on
## To promote the slave to a live database, issue "touch /tmp/promote_db"
## Warning: If multiple slaves share the same /tmp/ directory,
## then the trigger file must be named uniquely, else multiple slaves
## could attempt to be promoted in the presence of the trigger file.
trigger_file = '/tmp/promote_db_slave'
## Host can be the master's IP or hostname
primary_conninfo = 'Host=IP_OF_MASTER port=5432 user=replication password=CHANGEME'
## Log the standby WAL segments applied to a standby.log file
## TODO: Add the standby.log to a log rotator
## The paths must be explicitly defined, including the path to pg_archivecleanup
restore_command = 'cp /pgdata/WAL_Archive/%f "%p" 2>>/pgdata/9.3/data/pg_log/standby.log'
## XXX: If multiple slaves share the staging WAL directory,
## do not use pg_archivecleanup as WAL segments could be removed
## before being applied to other slaves.
archive_cleanup_command = '/usr/pgsql-9.3/bin/pg_archivecleanup /pgdata/WAL_Archive %r'
## On hot standby clusters, set to 'latest' to switch to the newest timeline in the archive
recovery_target_timeline = 'latest'
pg_ctl -D $PGDATA start
以下は、テスト用に何度もスタンバイを再作成するときに実行するコマンドです。これらを/root/recreate_standby.shというスクリプトに追加します。 rootとして実行しますが、これは必要ありません。postgresとして実行する場合は、「Sudo su-postgres -c」コマンドを削除してください。
#!/bin/bash
## This script runs on the standby.
## Executed as root, else remove the "Sudo - postgres -c" commands.
## Assumes you have a valid recovery.conf saved at
## $PGDATA/../recovery.conf.bkp
export PGDATA=/path/to/data/dir ## Must be set correctly
export PGPORT=5432
export MASTER=192.168.x.x ## IP or Host entry for the master Postgresql server
export PGBIN=/usr/pgsql-9.3/bin
service postgresql-9.3 stop -m immediate
if [ $? != 0 ]; then
service postgresql-9.3 start
echo "Could not shut down PostgreSQL. Aborting."
exit 1
fi
rm -rf $PGDATA
if [ $? != 0 ]; then
echo "Could not remove the PostgreSQL $PGDATA dir. Aborting."
exit 1
fi
## If the replication role is not set to "trust" in the master's
## pg_hba.conf file, the password will need to be passed into the command below,
## and "--no-password" will need to be removed or revised to be "--password"
su - postgres -c "$PGBIN/pg_basebackup --pgdata=$PGDATA --Host=$MASTER --port=$PGPORT --username=replication --no-password --xlog-method=stream --format=plain --progress --verbose"
su - postgres -c "cp -p $PGDATA/../recovery.conf.bkp $PGDATA/recovery.conf"
service postgresql-9.3 start
su - postgres -c "$PGBIN/pg_isready -U postgres -p $PGPORT -t2"
while [ $? != 0 ]; do
echo "Sleep 1 second, check if slave is up yet. If not, sleep again."
sleep 1;
su - postgres -c "$PGBIN/pg_isready -U postgres -p $PGPORT -t2"
done
su - postgres -c "$PGBIN/psql -d postgres -U postgres -qXc 'select pg_is_in_recovery() as is_pg_in_recovery'"
exit 0
詳細については、現在のPostgresqlドキュメント: