[Linux]データレプリケーション構成においてレプリケーション領域に対するディスクI/O の応答がなくなる問題について

■現象
LifeKeeperが稼働しているサーバー上で、レプリケーション領域に対するディス
クI/Oの応答がなくなり、その結果、稼働系ノードで動作するアプリケーション
のサービス停止が発生する可能性があります。

現象が発生すると稼働系ノードのOSのログ(/var/log/messages)に、mdの処理の
一部であるmd_write_startを含むコールトレースが記録されます。

■影響を受けるバージョン
以下の2点を満たす環境が対象です。

・DataKeeper for Linux構成を使用している
・Red Hat Enterprise Linux 6系(以降 RHEL6) / SUSE Linux Enterprise Server
11系(以降 SLES11)を使用している

■原因
LifeKeeper for Linuxのデータレプリケーション(DataKeeper)は、ローカルディ
スクデバイスとnbdデバイスとの間でRAID1を構成することによって、ターゲット
のディスクとのミラーリングを実現しています。DataKeeperではOSカーネルが提
供するmdの仕組みを使用していますが、このOSカーネルに含まれるmdの処理の問
題が起因となり、MD_CHANGE_PENDINGというフラグがクリアされずに残った場合、
I/Oを停止させる要因となることが分かりました。

RAIDを構成した場合に作成されるmdデバイスドライバのなかでは、mdを構成する
全ての書き込みの開始や終了を制御するためのファンクションが存在しています。
今回の問題が発生した際に/var/log/messagesのコールトレースからmd_write_start
の処理が停止していることが確認できていますが、md_write_startはmd.c内の
ファンクションの一つです。このmd_write_startでは、mdを構成するディスクへ
の書き込み開始や完了を制御するためのフラグの一つであるMD_CHANGE_PENDING
フラグのセットを行っています。
MD_CHANGE_PENDINGフラグはmdを構成しているディスクへの書き込みが完了する
と、md_update_sbという別のファンクションによってクリアされ、次のI/Oの処
理を継続できるようになります。

通常、md_write_startが行うフラグのセットとmd_update_sbが行うフラグのクリ
アの処理はシーケンシャルに行われますが、マルチプロセッサ環境下では
md_write_startとmd_update_sbが同時に動作する場合があります。しかし、これ
らのファンクションの排他処理の仕組みが不完全であるため、同時に動作した場
合にMD_CHANGE_PENDINGフラグのクリアが行われなくなる場合があります。この
ケースに陥った場合にI/Oの応答がなくなる問題が生じ得ます。

注記:
根本原因がOSカーネルの問題であるため、本事象に対する根本解決については、
md自体の修正を各ディストリビューターにて対応いただく必要がございます。
弊社としましては、本事象の早期解決を促すため、ディストリビューターに対し
て本事象に関する調査レポートを報告しております。

尚、RHELに関しては6.6から新たにMD_UPDATE_SB_FLAGSが新設され、md_update_sb
はこのフラグが有効になっている場合にのみ起動されるように変更されました。
これにより、md_write_stateとmd_update_sbの競合状態を防ぐようになっています。

■対処方法
今回の問題に該当する構成をご利用のお客様は、以下にご案内いたします対策の
実施をお願いいたします。

以下の1), 2) いずれかの対策を適用することで、本問題を抑止できます。

 1) LifeKeeper for Linux v8.2へアップデートする
 2) DataKeeper for Linux向けの対策パッチを適用する

RHEL6とSLES11環境でDataKeeper for Linuxをご利用の場合は、以下の組み合わ
せに対してDataKeeper for Linux向けの対策パッチを提供しております。

・LifeKeeper for Linux v7.5とRHEL6/SLES11の組み合わせ
・LifeKeeper for Linux v8.0とRHEL6/SLES11の組み合わせ
・LifeKeeper for Linux v8.1.1とRHEL6/SLES11の組み合わせ
・LifeKeeper for Linux v8.1.2とRHEL6/SLES11の組み合わせ

対象バージョンより下位のLifeKeeperのバージョンを使用している場合は、
LifeKeeperのアップデートを行った後にパッチを適用していただく必要がありま
す。

円滑な製品サポートをご提供するため、パッチのご提供先は弊社にて管理させて
いただいております。パッチをご希望の際は、以下の情報とともにサポートまで
申請をお願いいたします。

・パッチ導入に際しての作業ご担当者様の以下の情報
-PSC No.
-氏名
-会社名
-メールアドレス
-ご連絡先電話番号
・導入先エンドユーザ名


改訂履歴

[公開日:2013年10月28日]

[更新日:2015年04月06日]

[更新日:2016年06月29日]
古い記述を修正しました。

return top