SLOGが失われた場合にZFSをZIL SLOGと一貫性にする方法は?

SLOGが失われた場合にZFSをZIL SLOGと一貫性にする方法は?

HDDにはZFSがあり、SSDにはZIL SLOGがあります。

関連がある場合は、SSDにLARCキャッシュもあります。

write()SSD障害が原因でデータの不整合が発生しないようにするには(どのように単一のスレッドで2つのタスクの内容を混合して1つずつ実行するなどのPOSIXファイルシステム呼び出しの結果ルールに準拠しない)、どのように再構成する必要がありますか?

SSDを復元せずにHDDのバックアップスナップショットを復元する場合は、ZFSのPosgreSQL DBが一貫していないことを確認したいと思います。 (私はPostgreSQLを同期するための措置を講じました(Postgreにバグがないと仮定します)。

答え1

ZILには、安定したディスクへの短期コミットされていない書き込みのみが含まれると想定されます。停電とSSDエラーが同時に発生すると問題になる可能性があります。ただし、通常のSSDにエラーが発生した場合、zfsはraid書き込み保存と同等のモードからraid write-throughモードに切り替える必要があります。パフォーマンスが低下する可能性がありますが、すぐに破損することはありません。

ZILの鍵は、変更を不揮発性ストレージにすばやく記録し、アプリケーションが続行するようにすばやく指示できるようにすることです。これらのデータが安定したストレージ(ディスク)に書き込まれる前に電源が切れると、次に電源が供給された後にzfsボリュームがマウントされると、ZILから安定したストレージにコピーされます。

ファイルシステムスナップショットの要点は、現在作成されていないファイルシステムの安定版をコピーできることです。スナップショットは書き込み可能ではないため、ZILには保留中の書き込みがないため、これはZILとは関係ありません。

しかし、postgreSQLはファイルシステムのスナップショットを復元するのが好きではないかもしれません。 ZFSスナップショットの前にpostgreSQLにスナップショットを撮るか一時停止するように指示されていない場合は、zfsスナップショットにいくつかの部分的なpostgreSQL書き込みが含まれる可能性があり、これは問題になる可能性があります。 postgreSQLデータベースを正しくバックアップする方法について別の質問をしたいかもしれません。 (…他の人がここでこの内容を扱いたくない限り)

答え2

SLOGはデータセットに依存しないと見なすことができます。つまり、pgデータがディスクにフラッシュされると、データセットをスナップショットとして作成してバックアップでき、ログデバイスの有無にかかわらず、スナップショットを同じプールおよび/または別のプールに復元できます。

logプールから(SLOG)または(L2ARC)デバイスを物理的に削除する場合は、cacheまず論理的に削除する必要があります。

zpool remove [poolname] [logdevice|cachedevice]

(望むよりman zpool-remove

SLOGが正しく削除されないと、次の再起動時にプールをインポートできない可能性があります。これからの回復はかなり簡単な場合があります(SLOGにフラッシュされていないデータがない場合)、データの破損を許可しないと困難または不可能です。一般に、2つのSLOGデバイスをミラーペアとして追加することが推奨される理由があります。これはこの問題を防ぐためです。これは、プールを損傷する可能性がある単一の障害点を防ぐためです。


私はテキストダンプがバイナリファイルよりも安定していると思うので(自分のスナップショットとバックアップスケジュールを持つ他のデータセットで)定期的なpg_dumpバックアップを実行します。特に、postgresqlサーバーの実行中にバイナリスナップショットが作成された場合(サーバー可能スナップショットを撮ると、メモリの内容はまだディスクに書き込まれていません。ただし、サーバーをシャットダウンすると、同じ状態で再起動するために必要なすべての内容が記録されます。また、重要なデータの場合、バックアップが多いほど良いです。

しかし、私は数年前にすべてをダンプし、pgグローバル変数(役割など)、各データベースとテーブルのスキーマ、データ(COPY ... FROMなど)をダンプする簡単なpostgresqlバックアップスクリプトを作成しました。データは再び列に挿入されます。私は約20年間その変形を使ってきました。 ServerFaultにそのバージョンを公開しました。PostgreSQLデータベースを自動的にバックアップする最良の方法は何ですか?2009年に戻ります。

このバージョンでは少し調整が必要になる場合があります(特にDBS=( $($PSQL --list --tuples-only ...) )データベースのリストを取得する行)。バックアップディレクトリが独自のスナップショットスケジュールを持つzfsデータセットの場合、YMDサブディレクトリは必要なく、find ... -mtime +30 ...削除する必要もありません。パイプを接続またはpg_dumpエクスポートするpg_dumpallには、gzipバックアップデータセットに圧縮を使用できます。

関連情報