Database Support Blog

  • PostgreSQL
  • EDB
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セグメントをプライマリで保持することができ、本メッセージの発生を予防できますので、まだ予防策を実施されていない方はぜひこの機会に設定してみてください。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2024.01.16

EDBがもたらすデータベースの新たな価値 ~ EDB社Field CTO Ajit Gadge氏来日、セミナー講演レポート ~

EDB社のAjit Gadge氏を招き「PostgreSQLユーザーに捧ぐ、EDBを使ったDB機能向上とコスト削減の両立」セミナーを開催しました。DB市場の現状やトレンド、EDBの最新動向について紹介しております。アシストセッションのアーカイブ配信の視聴申し込みも可能です。ぜひご覧ください。

  • PostgreSQL
  • EDB
2023.12.20

PostgreSQLのSQLチューニングを体験してみよう!

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載最終回となる9回目の記事では、「PostgreSQL SQLチューニング実践」のワークショップ主管である 田中 健一朗 にインタビューしました。

  • PostgreSQL
  • EDB
2023.10.30

データベースの健康診断! ~ PostgreSQL DB稼働分析体験 ~

35年以上教育事業を展開しているアシストが新たに取り組み始めた「ポスグレ学園」。連載8回目となる今回の記事では、PostgreSQL DB稼働分析ワークショップの主管である保田 公貴にインタービューしました。

ページの先頭へ戻る