[Linux]稼動系ノードハングアップからの回復方法
稼動系において、DBなどのサービスが停止しているのに、それを検知するLifeKeeperのリソース監視(quickCheck)スクリプトが正常に動作できないという状況に陥ることがあります。
OSがこのような異常となった場合、通常は待機系からのノード監視(ハートビート)に稼動系が応答しなくなり、待機系は稼動系の異常を検知します。最終的には、サービスを待機系に切り替えるフェイルオーバー処理が行われ、サービスを回復します。
しかし過去の事例では、OSの異常により、システムがほぼ停止に近い状態であるにも関わらず、ネットワークの一部の機能のみが有効な状態を維持してしまい、結果として待機系が稼動系の異常を検知できないという問題の報告がありました。
LifeKeeperのハートビートはTCPを使用したセッションを作成しますが、上記の事例では、OSがハートビートに応答できる状態であったため、ハートビートの切断に至りませんでした。但し、これは発生頻度としては非常に稀なものです。
【回復方法】
万一このような状況に陥った場合には、稼動系ノードの電源を切断してください。それにより待機系が稼動系の異常を検知し、フェイルオーバー処理が行われます。
【参考情報】
技術情報の以下のページに掲載しております例は、「pingにのみ応答する状態」でカーネルが半停止状態となり、IPアドレスの重複が発生するという問題です。
これは「pingには応答するが、TCPによる通信には応答しない」状態であるため、ハートビートの切断は問題なく検出することができ、またIPアドレスの重複を回避することで正しくフェイルオーバを続行することが出来ます。
IPリソースの衝突によるリカバリの失敗について
https://lkdkuserportal.sios.jp/hc/ja/articles/360037326672