1

プライマリ サーバー

# postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_timeout = 10
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f'

待機サーバー

hot_standby = on

/archive/*プライマリ サーバーをスタンバイ サーバーにコピーしまし$PGDATA/pg_xlogたが、何も起こりません。スタンバイ サーバーを再起動すると、サーバー ログから次のエラー メッセージが表示されました。

2016-11-21 17:56:09 CST [17762-3] LOG:  invalid primary checkpoint record
2016-11-21 17:56:09 CST [17762-4] LOG:  record with zero length at 0/6000100
2016-11-21 17:56:09 CST [17762-5] LOG:  invalid secondary checkpoint record
2016-11-21 17:56:09 CST [17762-6] PANIC:  could not locate a valid checkpoint record
2016-11-21 17:56:09 CST [17761-1] LOG:  startup process (PID 17762) was terminated by signal 6: Aborted
2016-11-21 17:56:09 CST [17761-2] LOG:  aborting startup due to startup process failure

質問:

  1. /archive/*プライマリ サーバーをスタンバイ サーバーにコピーするだけで、データをスタンバイ サーバーに同期するだけで十分$PGDATA/pg_xlogですか?

  2. ホット スタンバイ サーバーで WAL ファイルの復元はいつ、どのようにトリガーされますか? スタンバイサーバーは定期的に$PGDATA/pg_xlogディレクトリをチェックして、新しい WAL ファイルを探しますか? または、手動でトリガーする必要がありますか?

  3. ストリーミング レプリケーションではなく、ホット スタンバイについて話しています。したがって、構成する必要はないと思います。私は正しいですか?conninfo

  4. hot_standby = onサーバーを構成して再起動した後も、INSERTエラーなしで実行できます。本当に読み取り専用にするように構成するにはどうすればよいですか?

4

2 に答える 2

3

これは、スタンバイ データベースを正しく初期化していないようです。

ログ ファイルには、開始する有効なチェックポイントが見つからないため、PostgreSQL がレプリケートを開始することさえできないことが示されています。

backup_labelスタンバイのデータ ディレクトリ内のファイルには何が含まれていますか? そのファイルが存在しない場合は、おそらくそれが問題です。

そのスタンバイは突然機能しなくなりましたか、それとも一度も機能しませんでしたか? スタンバイをどのように正確に作成しましたか?

于 2016-11-21T12:03:55.217 に答える
2

まず、マスターの低レベルのベース バックアップからスタンバイを作成する必要があります。新しいインスタンスを作成して と を使用することはできません。それがあなたがやろうとしたことだと思います。pg_dumppg_restore

適切な基本バックアップを行う最も簡単な方法は、pg_basebackup. 他のオプションについてはマニュアルで説明されていますが、実際には以下を使用してください。

pg_basebackup -X stream -D standby_datadir_location -h master_ip

または類似。

有効なベース バックアップを取得して初めて、アーカイブ リカバリまたはストリーミング レプリケーションを開始できます。最も簡単な方法は、ストリーミング レプリケーションを有効にすることです。フラグpg_basebackupを渡すことで、あなたのためにそれをしましょう。-R

アーカイブのリカバリが必要な場合は、アーカイブの場所からスタンバイにアーカイブをコピーする をrestore_commandスタンバイに追加する必要があります。recovery.conf

それはすべてマニュアルでカバーされています。

于 2016-11-21T12:54:42.400 に答える