6.9. RBD ミラーニング
すべてのイメージの last_copied_object_number
値が適切に更新される
以前は、実装上の欠陥により、last_copied_object_number
の値が、完全に割り当てられたイメージに対してのみ適切に更新されていました。これにより、last_copied_object_number
の値がスパースイメージに対して正しくなくなり、rbd-mirror デーモンが突然再起動した場合にイメージレプリケーションの進行状況が失われました。
今回の修正により、すべてのイメージの last_copied_object_number
値が適切に更新され、rbd-mirror デーモンの再起動時に、イメージのレプリケーションが以前に停止した場所から再開されます。
イメージがプライマリーにプロモートされると、既存のスケジュールが有効になる
以前は、最適化が適切に考慮されていなかったため、イメージがプライマリーにプロモートされた後、既存のスケジュールが有効にならず、最近プロモートされたイメージに対してスナップショットベースのミラーリングプロセスが開始されませんでした。
このリリースでは、この問題の原因となっている最適化が削除され、イメージがプライマリーにプロモートされ、スナップショットベースのミラーリングプロセスが期待どおりに開始されたときに既存のスケジュールが有効になります。
スナップショットベースのミラーリングプロセスがキャンセルされなくなる
以前は、内部の競合状態の結果として、rbd mirror snapshot schedule add
コマンドがキャンセルされていました。他の既存のスケジュールが適用できない場合、影響を受けるイメージのスナップショットベースのミラーリングプロセスは開始されません。
このリリースでは、競合状態が修正され、スナップショットベースのミラーリングプロセスが期待どおりに開始されます。
リモートイメージがプライマリーでない場合、再生または再同期は試行されなくなる
以前は、実装上の欠陥により、リモートイメージがプライマリーでなくても、つまり、再生または再同期する場所がない場合でも、再生または再同期が試行されていました。これにより、スナップショットベースのミラーリングでライブロックが発生し、ローカルピアをリモートイメージからリンク解除できませんでしたというエラーが継続的に報告されました。
今回の修正により、実装上の問題が修正され、リモートイメージがプライマリーイメージでない場合は再生または再同期が試行されなくなり、エラーが報告されなくなりました。
セカンダリークラスターの rbd-mirror デーモンによって使用されているミラースナップショットが削除されない
以前は、内部競合状態の結果として、セカンダリークラスターで rbd-mirror デーモンによって使用されていたミラースナップショットが削除され、影響を受けるイメージのスナップショットベースのミラーリングプロセスが停止し、split-brain エラーが報告されていました。
今回の修正により、ミラースナップショットキューの長さが拡張され、それに応じてミラースナップショットのクリーンアップ手順が修正されました。セカンダリークラスターの rbd-mirror デーモンによって使用されているミラースナップショットは削除されなくなり、スナップショットベースのミラーリングプロセスは停止しなくなりました。
schedule_request_lock()
中に所有者がロックされている場合、ロジックによって RBD ミラーがクラッシュしなくなる
以前は、すでにロックされている所有者の schedule_request_lock()
中に、ブロックデバイスミラーがクラッシュし、イメージの同期が停止していました。
今回の修正により、所有者がすでにロックされている場合、schedule_request_lock()
は正常に中止され、ブロックデバイスのミラーリングがクラッシュしなくなりました。
イメージの複製が、incomplete local non-primary snapshot
エラーで停止しなくなる
以前は、実装上の欠陥により、突然の rbd-mirror デーモンの再起動時に、イメージのレプリケーションが incomplete local non-primary snapshot
エラーで停止していました。
今回の修正により、イメージレプリケーションが incomplete local non-primary snapshot
エラーで停止することがなくなり、期待どおりに機能するようになりました。