web-dev-qa-db-ja.com

スタンバイpostgresデータベースを開始できません

状況

2つの個別のインスタンスがあります。どちらもUbuntu 14.04サーバーで実行されています。

どちらも以下の方法でpostgres 9.5をインストールしています。

Sudo apt-get install software-properties-common python-software-properties
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | Sudo apt-key add -
Sudo apt-get update
apt-get -y install postgresql-9.5

バージョンは9.5.10です

次に、マスターデータベースを表すインスタンスにflanders、スタンバイを表すインスタンスにwillieという名前を付けました

私は両方のインスタンスをpsqlでpostgresユーザーでテストしました。

バージョン2.0はpostgres 10用であるため、両方のインスタンスに omnipitr-1.3.3のtarファイル をダウンロードしました。

flanders/etc/postgresql/9.5/main/postgresql.confで、次のように設定しました。

wal_level = hot_standby
archive_mode = on
archive_command = '/var/lib/postgresql/omnipitr-1.3.3/bin/omnipitr-archive -D /var/lib/postgresql/9.5/main -l /var/log/omnipitr/archive-^Y-^m-^d.log -dr willie-postgres:/var/lib/postgresql/master_wal_archive -s /var/lib/postgresql/.omnipitr/ "%p"'
archive_timeout = 120
max_wal_senders = 2

omnipitr-archiveスクリプトは、2分ごとにwillieを使用してpostgresにWALファイルを正常に送信し、/var/lib/postgresql/master_wal_archive内に残します

次に、pg_basebackupを使用してflandersでマスターデータベースをバックアップし、postgresを停止して2分ごとの継続的なアーカイブを停止します

flanders

postgres@flanders:~$ pg_basebackup -D backup -Ft -z -P -x

これにより、base.tar.gz内に/var/lib/postgresql/backupが作成されます

次に、rsyncを使用してベースファイルをwillieに送信します。

service postgresql stopを使用して、rootとしてウィリーでpostgresを停止しました。次に、postgresユーザーとして次を実行します。

rm -rf /var/lib/postgresql/9.5/main/*

tar -xvC /var/lib/postgresql/9.5/main -f /var/lib/postgresql/base.tar.gz

rootユーザーとして戻って、service postgresql startを使用してpostgresをオンにしました

Postgresユーザーとpsqlとして参加し、はい、データベースデータはマスターデータベースとまったく同じミラーになりました。

ここまでは順調ですね。

復元を続行します

ここで私は問題を抱え始めます。

Postgresを停止して/var/lib/postgresql/9.5/mainに移動し、recovery.confを作成しました

このrecovery.conf内には、次のものしかありません。

standby_mode = on
restore_command='/var/lib/postgresql/omnipitr-1.3.3/bin/omnipitr-restore -l /var/log/omnipitr/restore.log -s /var/lib/postgresql/master_wal_archive/ %f %p'

どちらから取得するか https://github.com/omniti-labs/omnipitr/blob/master/doc/omnipitr-restore.pod#minimal-setup

次に、rootユーザーに移動してpostgresを起動します。通常より時間がかかりましたが、OKサインが出ました。

次に、postgresとpsqlに行ってみました。データベースの起動に関する致命的なエラーが発生しました。

次に、postgresログファイルを確認したところ、次のようになりました。

2018-02-10 17:34:53.185 CST [3896] LOG:  could not bind IPv6 socket: Cannot assign requested address
2018-02-10 17:34:53.185 CST [3896] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2018-02-10 17:34:53.197 CST [3897] LOG:  database system was shut down at 2018-02-10 17:30:10 CST
2018-02-10 17:34:53.198 CST [3897] LOG:  entering standby mode
2018-02-10 17:34:53.679 CST [3900] [unknown]@[unknown] LOG:  incomplete startup packet
2018-02-10 17:34:54.184 CST [3903] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:54.690 CST [3906] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:55.197 CST [3909] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:55.703 CST [3912] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:56.209 CST [3915] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:56.716 CST [3918] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:57.222 CST [3921] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:57.728 CST [3924] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:58.235 CST [3927] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:58.741 CST [3930] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:59.248 CST [3933] postgres@postgres FATAL:  the database system is starting up
2018-02-10 17:34:59.250 CST [3934] [unknown]@[unknown] LOG:  incomplete startup packet

さて、私はhot_standby内で/etc/postgresql/9.5/main/postgresql.confをオンにする必要があることに気付きました

 hot_standby = on

次に、ルートとしてservice postgresql startを実行すると、OKサインが表示されませんでしたが、

2018-02-10 18:05:15.024 CST [4127] LOG:  could not bind IPv6 socket: Cannot assign requested address
2018-02-10 18:05:15.024 CST [4127] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2018-02-10 18:05:15.037 CST [4128] LOG:  database system was interrupted while in recovery at 2018-02-10 18:03:55 CST
2018-02-10 18:05:15.037 CST [4128] HINT:  This probably means that some data is corrupted and you will have to use the last backup for recovery.
2018-02-10 18:05:15.518 CST [4129] [unknown]@[unknown] LOG:  incomplete startup packet
2018-02-10 18:05:15.924 CST [4128] LOG:  entering standby mode
2018-02-10 18:05:15.924 CST [4128] LOG:  database system was not properly shut down; automatic recovery in progress
2018-02-10 18:05:15.926 CST [4128] WARNING:  WAL was generated with wal_level=minimal, data may be missing
2018-02-10 18:05:15.926 CST [4128] HINT:  This happens if you temporarily set wal_level=minimal without taking a new base backup.
2018-02-10 18:05:15.926 CST [4128] FATAL:  hot standby is not possible because wal_level was not set to "hot_standby" or higher on the master server
2018-02-10 18:05:15.926 CST [4128] HINT:  Either set wal_level to "hot_standby" on the master, or turn off hot_standby here.
2018-02-10 18:05:15.927 CST [4127] LOG:  startup process (PID 4128) exited with exit code 1
2018-02-10 18:05:15.927 CST [4127] LOG:  aborting startup due to startup process failure

では、スタンバイサーバーを起動するときにどこで問題が発生したのでしょうか。

更新

回答の1つで示唆されているように、recovery.conf/var/lib/postgresql/9.5/mainに追加して、postgresをユーザーrootとして起動しようとしました。

同じ結果。

2
Kim Stacks

recovery.confファイルを作成する前に、データベースを起動して停止してはなりません。 recovery.confを使用せずにデータベースを起動すると、書き込み使用のために開かれるか、または試みられ、それ以上ログファイルを再生する資格がなくなります。 (なぜそれがwal_level = minimalに関する正確なエラーメッセージにつながったのか理解していませんが)。

recovery.confの直後にtar -xを作成します。

1
jjanes