現象
LifeKeeper for Linux のデータレプリケーション(DataKeeper)環境において
スタンバイ側のファイルシステム(データ)に不整合が発生する可能性があります。
現象の詳細
Replication Type が非同期モード(Async mirror)に設定されている場合に、
並列的に送られたデータの書き込み順序がまれに前後する可能性が確認されています。
ミラーリングのデータ転送はブロック単位で行われており、この書き込み順序が前後すると、
ファイルシステムの整合性に問題が生じ得ます。
影響を受けるバージョン
以下の2 点を満たす環境が対象です。
・LifeKeeper for Linux v6.0 ~ LifeKeeper for Linux v8.1.1 のバージョンを使用している
・DataKeeper for Linux の非同期モード(Async mirror)構成を使用している
原因
LifeKeeper for Linux のデータレプリケーション(DataKeeper)のミラーリングの動作において、
スタンバイ側のデータ不整合が生じうる問題が確認されました。
DataKeeper ではミラーリングを実現する仕組みとして、Linux カーネルの nbd
モジュールを用いてネットワークの先にあるスタンバイ側のディスクを /dev/nbdX
としてバインドし、更に /dev/nbdX とローカルディスクを md デバイスに束ねる
ことで複数ノード間のミラーリングを実現します。
nbd は、nbd server と nbd client という形で実装されており、nbd client から
nbd server にデータを送信することでミラーを実現します。つまり DataKeeper
リソースがアクティブであるノード上では “nbd client” プロセスが、スタンバイ側は
“nbd server” プロセスがそれぞれ実行され、通信を行うことになります。
この nbd server はマルチスレッド処理で動作しておりますが、このマルチスレッド
動作に問題がある可能性が確認されました。
同期モードが非同期(Async mirror)に設定されている場合に、並列的に送られた
データの書き込み順序がまれに前後する可能性が確認されています。
ミラーリングのデータ転送はブロック単位で行われており、この書き込み順序が前後
すると、ファイルシステムの整合性に問題が生じ得ます。
注記:
・データの不整合が生じるのはスタンバイ側のみです。アクティブ側のデータが不整合と
なることはありません。
・LifeKeeper および DataKeeper は、データ不整合が生じていることを検知できません。
切り替え後に OS の fsck や、アプリケーション側のデータチェックによって不整合の発生を
検知することになります。
修正予定
2013 年 4 月 23 日にリリースされたLifeKeeper for Linux v8.1.2において、本問題が修正されました。
この問題への対策として、LifeKeeper for Linux v8.1.2 以降では、非同期レプリケーションは、シングル
スレッドにて処理する仕様としました。
対処方法
LifeKeeper for Linux v8.1.2以降のバージョンをご利用ください。
既に LifeKeeper for Linux v8.1.1 以下のバージョンで DataKeeper for Linux の非同期モード(Async mirror)
構成をご利用のお客様は、以下にご案内いたします回避策の適用をお願いいたします。
以下の1), 2) いずれかの回避策を適用することで、本問題を抑制できます。
1) DataKeeper for Linux の同期モード(Sync mirror)構成を使用する
2) nbd-server のスレッド数を1にする(シングルスレッド処理)
※後述の<付録2>をご参照ください
上記のいずれかの回避策を適用いただいた後で、データの完全同期を行ってください。
これは潜在的なデータ不整合の可能性を払しょくするために必要な作業です。
また、現在の状況はスタンバイ側のデータの整合性が保証されておりません。LifeKeeper
のリソース切り替えを行うと、正常なデータ(切り替え前のアクティブ側データ)に破損が及ぶ
可能性があるため、上記回避策を適用するまではスタンバイ側の LifeKeeper を停止してください。
<付録1> 同期・非同期モードの確認方法
mirror_status コマンドを実行し、Type 項目が Asynchronous と表示されていれば
非同期モード、Synchronous と表示されていれば同期モードで設定されていると判断できます。
# /opt/LifeKeeper/bin/mirror_status
[出力例] # /opt/LifeKeeper/bin/mirror_status datarep-oradata
Mirror Configuration:
[X] pd006.labs.sios.com -> pd007.labs.sios.com (10.1.6.7)
Status: Paused
Type: Asynchronous
Bitmap: 819189 bits (chunks), 40302 dirty (4.9%)
<付録2> nbd-server のスレッド数を1 にするための変更方法と留意点
以下の設定を実施することで、nbd-server のスレッド数を 1 にできます。
a) 両ノードの /etc/default/LifeKeeper に以下のパラメータを追記してください。
NBD_SERVER_ARGS=-t1
b) GUI で Source ステータスの DataKeeper リソースを右クリックし、一時停止(PauseMirror)
と再開(Resume Replication)を実施して、設定を反映させてください。
c) ターゲットノードで以下のコマンドを実施して、”-t1″ が含まれていることを確認
してください。
[出力例] # ps auwx | grep nbd
/usr/local/bin/nbd-server 10258 /dev/xvdb5 -t1
d) ソースノードで明示的に全同期を行ってください。
<全同期の方法>
# /opt/LifeKeeper/bin/mirror_action <TAG名> pause <稼動系ノード名> <待機系ノード名>
# /opt/LifeKeeper/bin/mirror_action <TAG名> fullresync <稼動系ノード名> <待機系ノード名>
e) スイッチオーバを実施し、新ターゲットノード(元ソースノード)で以下のコマンド
を実施して、”-t1″が含まれていることを確認してください。
[出力例] # ps auwx | grep nbd
/usr/local/bin/nbd-server 10257 /dev/xvdb5 -t1
※a),b),c),d)の作業ではサービスは停止しません。但し、b)の “Pause Mirror” を行った
時点でクラスタシステムの冗長性が失われた状態となります。”Resume Relication”
を実施するまでは、スイッチオーバ・フェイルオーバを行うことができません。
また、d)の”Pause Mirror” を行った際も同様にクラスタシステムの冗長性が失われた
状態となります。”fullresync” による全同期処理が完了するまでは、スイッチオーバ・
フェイルオーバを行うことができません。”fullresync” の完了には、データレプリケーション
のパーティションサイズに応じた時間が掛かります。
e) のスイッチオーバを実施する際に、一時的にサービスの停止を伴います。お客様の環境
にあわせて実施タイミングをご検討ください。
※弊社テスト環境において、非同期レプリケーションをマルチスレッド(32スレッド)で
処理する場合と、 シングルスレッドにて処理する場合について、パフォーマンスの測定を
行いました。結果として、非同期レプリケーションにおいて、マルチスレッド処理とシングル
スレッド処理のレスポンスには大差が無いことを確認済みです。
<付録3> スタンバイ側の LifeKeeper の停止
a) ターゲットノードで LifeKeeper を停止してください。
# /opt/LifeKeeper/bin/lkstop
b) ミラーリング構成が解除されていることを確認してください。
ソースノードで mirror_status コマンドを実行し、Status が Out of Sync と表示されて
いれば、ミラーリング構成が解除されていると判断できます。
# /opt/LifeKeeper/bin/mirror_status
[出力例] # /opt/LifeKeeper/bin/mirror_status datarep-oradata
Mirror Configuration:
[X] pd006.labs.sios.com -> pd007.labs.sios.com (10.1.6.7)
Status: Out of Sync
Type: Asynchronous
Bitmap: 819189 bits (chunks), 40302 dirty (4.9%)
本件に関するメールでのお問い合せ先
本件に関するメールでのお問い合せについては、以下の URL にあるお問い合わせ専用フォーム
からご送付ください。
お問い合わせ先一覧
http://lk.sios.com/?page_id=26