過去問ドリル

LinuCレベル4 システムアーキテクト 可用性の設計 問16

可用性の設計/データレプリケーションと災害対策

PostgreSQLのストリーミングレプリケーションを使って、プライマリとスタンバイによる冗長化と災害対策を設計する。説明として適切でないものはどれか。

当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「可用性の設計」に対応。実際の試験問題ではありません)

正解:A

解説

PostgreSQLの同期レプリケーションでは、synchronous_standby_namesで指定した同期スタンバイの応答が得られるまで、プライマリのコミットは待たされます。同期スタンバイが1台だけでそれが停止すると、標準の機能では非同期へ自動的には切り替わらず、更新が止まってしまいます。これを避けるには、同期スタンバイの候補を複数台指定し、そのうち所定の台数の応答で確定させる(ANYによる指定など)構成にするか、クラスタ管理ツールで設定を切り替えます。同期レプリケーションはデータ損失を防ぐ代わりに、スタンバイとの往復遅延を更新の応答時間に加えるトレードオフがあります。

選択肢ごとの解説

  • A正しい(誤っている記述)。標準の機能では、同期スタンバイが応答しない間、プライマリのコミットは待たされ続けます。同期スタンバイの候補を複数台にするなどの設計が必要です。
  • B誤り(正しい記述)。レプリケーションスロットはスタンバイが受信するまでWALの削除を防ぐため、停止したスタンバイのスロットが残るとWALが溜まり続けます。max_slot_wal_keep_size(PostgreSQL 13以降)で保持量に上限を設けるか、不要なスロットを削除します。
  • C誤り(正しい記述)。ホットスタンバイでは、WALの適用が参照中のデータと競合すると、検索が取り消されるか、max_standby_streaming_delayなどの設定に応じて適用が遅らされます。
  • D誤り(正しい記述)。旧プライマリには新プライマリへ送られていない更新が残っていることがあるため、pg_rewindで巻き戻すか作り直してから、スタンバイとして組み込みます。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く