Database Support Blog

Database Support Blog>【SR+HS環境の落とし穴】スタンバイのリカバリに必要なWALが上書きされる障害の予防策

  • PostgreSQL
2016.12.01

【SR+HS環境の落とし穴】スタンバイのリカバリに必要なWALが上書きされる障害の予防策

【SR+HS環境の落とし穴】スタンバイのリカバリに必要なWALが上書きされる障害の予防策

PostgreSQL9.0以降でStreaming Replication + Hot Standby(SR+HS)が本体に組み込まれてから、「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージに関するお問い合わせを多数いただくようになりました。

このメッセージは、SR+HS環境においてプライマリがスタンバイにWALレコード(更新履歴)を送信しようとした時に、プライマリのpg_xlog配下に対象のWALが存在しなかった場合などに出力されます。

アーカイブWAL運用を行っていない環境で本メッセージが発生した場合、スタンバイ側で同期を取るために必要なプライマリ側の更新内容を適用することができないため、SR+HSを再構成する必要があります。

そこで、今回は「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージ発生の予防策についてご紹介します。


SR+HSとは

SR+HSとは、PostgreSQL9.0以降で本体に組み込まれたレプリケーション機能であるSRと、WALの適用中にクエリの実行を可能にする機能であるHSを組み合わせた冗長構成のことです。プライマリのWAL Senderプロセスが、スタンバイのWAL ReceiverプロセスにWALレコードを送信し、スタンバイでWALレコードが適用されることでプライマリとスタンバイの同期が取られます。

SR+HSの詳細については、 マニュアル もご参考ください。


「FATAL: requested WAL segment <WALセグメント名> has already been removed」発生の予防策

WALセグメントは循環利用されますが、スタンバイのリカバリに必要なWALセグメントは削除されないよう保持しておく必要があります。予防策として3つの方法がありますが、アシストでは、WALセグメントをプライマリで確実に保持できる方法を推奨します。

PostgreSQL 9.4以降なら レプリケーションスロット を使用する方法、PostgreSQL 9.3以前ならアーカイブモードを有効にする方法をお薦めしています。


レプリケーションスロットを使用する(PostgreSQL 9.4以降の場合)

レプリケーションスロット を使用することで、スタンバイが必要としているWALレコードを含むWALセグメントがプライマリで保持されるようになります。そのため、リカバリに必要なWALセグメントが消されてしまうことを防げます。


アーカイブモードを有効にする

プライマリでアーカイブモードを有効にして、スタンバイのPGDATA/recovery.confに restore_command パラメータを設定することにより、スタンバイのリカバリに必要なWALレコードがプライマリのPGDATA/pg_xlog配下から無くなってもアーカイブWALから補完できるため、本メッセージの発生を予防できます。


wal_keep_segmentsに十分な値を設定する

pg_xlogディレクトリに保持しておくWALセグメント数の最小値を設定する wal_keep_segments に、スタンバイのリカバリに必要なWALレコードを含むWALセグメントを保持できるくらい大きな値を設定することにより、本メッセージの発生を予防できます。ただし、お客様環境によってマシンの性能や処理量が異なるため、一概にwal_keep_segmentsに設定すべき設定値を紹介することはできません。 トライアンドエラーで本メッセージの発生を予防するために十分な設定値を見積もる必要があります。


まとめ

今回は、「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージ発生の予防策について紹介しました。この記事で紹介した予防策を実施することでスタンバイのリカバリに必要なWALレコードを含むWALセグメントをプライマリで保持することができ、本メッセージの発生を予防できますので、まだ予防策を実施されていない方はぜひこの機会に設定してみてください。


執筆者情報

家島 拓也

サービス事業部 サポートセンター

2007年にアシストに入社して以来、ORACLE製品やPostgreSQL・EDB Postgres製品のサポートに従事してきました。このブログではサポート対応で得た知識を元に、お客様がお困りになることが多い問題や各製品の新機能 に関する検証結果などを紹介します。


アシスト データベース ウェビナー

関連している記事

  • PostgreSQL
  • EDB Postgres
2019.04.16

【PostgreSQL/EPAS11 新機能】autoprewarmでPostgreSQL再起動後の性能劣化を予防しよう

PostgreSQL/EDB Postgres Advanced Server 11にて、PostgreSQL/EPAS停止前の共有バッファの内容を復元する autoprewarm機能が実装されました。

  • PostgreSQL
  • EDB Postgres
2018.12.12

レプリケーションスロットを使用する際の4つの注意点

レプリケーションスロットを使用する際の4つの注意点を紹介します。

  • PostgreSQL
  • EDB Postgres
2018.10.19

【PostgreSQL/EPAS11 新機能】バックアップと同時にデータ破損チェック!

pg_basebackupにチェックサムの検証機能が付きました。

ページの先頭へ戻る