■現象
LifeKeeperが稼働しているサーバー上で、レプリケーション領域に対するディスクI/Oの応答がなくなり、その結果、稼働系ノードで動作するアプリケーションのサービス停止が発生する可能性があります。
現象が発生すると稼働系ノードのOSのログ(/var/log/messages)に、mdの処理の一部であるd_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日] 古い記述を修正しました。