本文書は、2020年10月以降にご購入もしくはv9.5.1にアップグレードをされたお客様(主にRHELについては)で、LifeKeeper for Linux + DataKeeperを導入されたHAクラスタシステムのメンテナンスをご検討中のお客様に向けたご利用上の注意喚起となります。また、メンテナンス計画が無いお客様におかれましても、運用に関してご注意いただきたい事項がございますのでご一読ください。
問題:
LifeKeeper for Linux + DataKeeperの構成において、同期が不完全になりTarget側(待機側)に格納されたミラーデータに破損が生じる場合がございます。お客様のシステムが本問題に該当するかどうかは、後述の「対象となるシステム:」をご参照ください。
お願いしたい対処:
Target側(待機側)のデータ破損の可能性はDataKeeperの部分同期のタイミングで発生します。そのため、部分同期が発生する操作を極力減らし、また部分同期が発生した後はミラー・ボリュームの全同期を実施してください。
- システムメンテナンス等を実施する場合は、必ずLifeKeeperを停止した状態で行ってください。
- LifeKeeperを止める手順は以下の通り実施してください。
- DataReplicationのリソースを停止します。
- 各サーバーでlkstopを実行します。(DataReplicationリソースが停止しているため、どのサーバーから停止を行っても問題ありません)
- メンテナンス終了後は、必ず元Source側(稼働側)をメンテナンス後のSourceとしてLifeKeeperを復旧してください。LifeKeeper稼働後は、安全のため完全再同期(Full Resync)を実施してください。
- LifeKeeperの起動は以下の手順で実施してください。
- 各サーバーでlkstartを実行します。
- Source側(停止前にSource側だったサーバー)のDataReplicationリソースを起動します。(DataReplicationリソースを停止してからlkstopを行っているため、リソースは自動的に起動しません)
- 通常運転時にはデータ破損は生じませんが、何らかの障害発生に際してFailoverが発生した場合は、部分同期が生じ得ます。Failoverが発生した後は、以下の確認を行ってください。
- Failover後のデータ(現在ISPとなっているサーバーのデータ)が正常であることを確認してください。もしもここで異常が検知された場合は、Backupからデータを戻す必要があります。
- Failover後のデータに異常が無い場合は、現在のSource側データは正常です。この状態でTarget側に完全再同期(Full Resync)を行ってミラーを完全な状態に保ってください。
- 運用中に”pause the mirror”を実行しないでください。差分同期が発生します。
- 上記2のように、Failover後のデータに異常が生じていた場合はBackupからデータを戻す以外の復旧方法がありません。そのため、バックアップは可能な限り頻繁に取得いただくことをお勧めいたします。
また、システムメンテナンスの予定が無いお客様であっても、Failover後にデータ破損が生じる可能性があります。そのため、上記の2、3に関してはメンテナンス予定の有無に関わらず同様である点にご注意ください。
現状のデータ健全性の確認:
lifekeeper.logの記録より、過去に差分同期が行われているか確認することができます。
$ grep 104009 /var/log/lifekeeper.log* (出力例) node1 mirror_action[20052]: INFO:dr:resume:datarep-dk-mirror:104009:/dev/md0: bitmap merged, resyncing 2.9 GB node1 mirror_action[21865]: INFO:dr:resume:datarep-dk-mirror:104009:/dev/md0: bitmap merged, resyncing 662.2 MB node1 recover[3535]: INFO:dr:recover:datarep-dk-mirror:104009:/dev/md0: bitmap merged, resyncing 2.2 MB node1 restore[25641]: INFO:dr:restore:datarep-dk-mirror:104009:/dev/md0: bitmap merged, resyncing 0.0 B |
メッセージ中に “resyncing 0.0 B” と出力されている場合には、差分がなかったため同期が行われず、本事象の影響はありません。それ以外の、"2.9GB"、"662.2MB" や "2.2MB" のように差分のサイズが出力されていた場合は、差分同期が行われているため、本事象の影響を受けてターゲット側の内容が一部欠損している可能性があります。
上記の結果にて、Target側(待機側)のデータ破損が生じている可能性がある場合は、完全再同期(Full Resync)を実行して修正を行ってください。完全再同期を実施する場合は、Data Replicationを一時停止(Pause)する必要があります。
mirror_actionコマンドでDataReplicationを一時停止します。
mirror_action <tag> pause
一時停止完了後、mirror_actionコマンドでDataReplicationを完全再同期します。
mirror_action <tag> fullresync
[参考] コマンドラインからのミラー管理
https://docs.us.sios.com/spslinux/9.5.1/ja/topic/command-line-mirror-administration
※Source側(稼働側)のデータは本不具合で破損することはありません。
本件の原因:
Linux Kernelのmd/raid1カーネルモジュールに起因する不具合です。DataKeeperの部分再同期が行われた場合に、Target側(待機側)のデータに破損が生じる可能性があります。
対象となるシステム:
以下のカーネルを利用しているシステムが対象となります。
OS |
影響を受けるカーネル |
左記OSをサポートしているLifeKeeper/DataKeeperのバージョン |
RHEL/CentOS/OL 8.2 |
全て |
v9.5.1 |
RHEL 8.3 |
全て |
v9.5.1 |
SLES 12 SP4 |
4.12.14-95.51以降 |
v9.3.2 ~ v9.5.1 |
SLES 12 SP5 |
4.12.14-122.20以降 |
v9.5.0 ~ v9.5.1 |
SLES 15 SP1 |
4.12.14-197.37.1以降 |
v9.4.1 ~ v9.5.1 |
SLES 15 SP2 |
全て |
v9.5.1 |
OL 7.x UEK R5 |
4.14.35-2025.400.8 (U4)以降 |
v9.4.0 ~ v9.5.1 |
対象システムであるかの確認方法:
お客様のご利用のシステムが上記の”影響を受けるカーネル”に含まれるかを調べるには、 ”uname -r” コマンドでカーネルのバージョンをご確認ください。
問題の修正:
修正パッチを5月18日(火)よりご提供しています。パッチを未適用の期間は、上記の「お願いしたい対処」項にある事項にご留意いただき、データ破損を可能な限り回避いただくようお願いいたします。パッチを希望されるお客様はLifeKeeper/DataKeeper for Linux の特定環境向けパッチのダウンロード申請よりご申請ください。
* 2021/8/11にリリースされたLifeKeeper for Linux v9.5.2からpatchは適用済みとなります。
なお、本件はLinux Kernelの問題であるため、我々の調査結果および修正内容をLinux Kernel開発コミュニティに提供し、カーネル側が正式にこの問題を修正できるよう協力しております。
以上です。
更新履歴
2021/9/28 : LifeKeeper for Linux v9.5.2からpatchは適用済みであることを追記