麻姑掻痒 〜まこそうよう〜

かゆいところに手が届く、もうちょっとその先が知りたいに応えたい

XenServerでゲストOSが生きているのにXenCenterが繋がらなくなった上にxe vm-listも応答しなくて泣きそうだった事態をサーバ再起動せず復旧させた話

time 2022/08/06

XenServerでゲストOSが生きているのにXenCenterが繋がらなくなった上にxe vm-listも応答しなくて泣きそうだった事態をサーバ再起動せず復旧させた話

いや、まいりました。
数日前からホストOSのメモリが減少していて枯渇しそうな勢い。
ホストOSにログインしてみると、なにやら cron のプロセスが大量に溜まっている。
対象のホストの様子を伺おうとXenCenterで接続しようとしたら、接続しにいったまま帰ってこない。
結果、XenCenterが対象のホストに接続できない。

「うーむ、これは、ホストを再起動しないとダメなやつか?」

ということで、どんなゲストOSが起動しているか確認すべく、ホストOSにログインして、コンソールで以下を実行。

# xe vm-list

しかし、このコマンドも結果が返らない…。

泣きそうになりながらググっていると、どうも、xenのapiが死んでいるっぽい情報を得たため、以下を実行。
ゲストOSに影響がないかドキドキしましたが、大丈夫です。

# xe-toolstack-restart

異常が発生しているからだと思うのだが、再起動に結構時間はかかったものの、プロンプトが返り、どうやら再起動は実行された模様。
再度、xe vm-list を実行したところ、応答が返るように。

「おお!直った!?よーし、XenCenterも繋がるかな」

と、ウキウキして、XenCenter で接続を試みたところ、以下のようなメッセージが出て、もう完全に接続できていない模様。

Unable to connect to server, Check that XenServer is configured correctly on ‘xxx.xxx.xxx.xxx’ and try again

「おいおいおいおい、こっちはむしろ悪化した…?」

xe vm-list が応答を返すようになったわけなので、api は復活した気配なのに、何故にそこまで接続を拒否するのか…。

さらに情報を得るべくググっていると、以下も必要かも、ということになり実行。
これも、ゲストOSには影響はありません。

# service xapi restart

しかし、解消せず…。
再度、以下を実行しても事態は変わらず…。

# xe-toolstack-restart

「最悪、xe でゲストOSを止めて、ホストOSの再起動しかないか…」

と思いながらも、そうそう簡単にゲストOSを停止することもできないので、半べそをかきながらググっていると新たな情報が。

「タスクがなんか詰まってんじゃね?」

ということで、以下を実行。

# xe task-list

すると以下のような結果が。

uuid ( RO)         : 835b8a3e-237a-0a6f-726d-44c0b719b10e
     name-label ( RO): dbsync (update_env)
  name-description ( RO):
        status ( RO): pending
      progress ( RO): 0.000

正常に動作しているホストOSでは返らない結果。

「このタスクをキュンセルすればいいか?」

と思ったものの、容易にキャンセルしてよいタスクなのかわからず、さらにググっていると以下の情報が。

「 dbsync (update_env) がどこかでハングアップしてんじゃね?」

そして、これを確認するために以下を実行してステータスを確認せよとのこと。

# systemctl status message-switch

「起動してない場合は起動せよ」ということでしたが、結果が以下。

● message-switch.service – LSB: Start up the xapi toolstack message switch
 Loaded: loaded (/etc/rc.d/init.d/message-switch)
 Drop-In: /etc/systemd/system/message-switch.service.d
     └─slice.conf
 Active: active (exited) since Fri 2017-09-29 12:45:57 JST; 4 years 10 months ago
  Docs: man:systemd-sysv-generator(8)
 Process: 1990 ExecStart=/etc/rc.d/init.d/message-switch start (code=exited, status=0/SUCCESS)

「うーん、active だ…」

しかし、ここで、念のため再起動を敢行。

# systemctl restart message-switch

すると、なんと、active は active でも状態が変化!
active (running) に!

● message-switch.service – LSB: Start up the xapi toolstack message switch
 Loaded: loaded (/etc/rc.d/init.d/message-switch)
 Drop-In: /etc/systemd/system/message-switch.service.d
     └─slice.conf
 Active: active (running) since Sat 2022-08-06 15:42:48 JST; 2s ago
 Docs: man:systemd-sysv-generator(8)
 Process: 3110 ExecStop=/etc/rc.d/init.d/message-switch stop (code=exited, status=0/SUCCESS)
 Process: 3117 ExecStart=/etc/rc.d/init.d/message-switch start (code=exited, status=0/SUCCESS)

「おお!」

そして、xe task-list を実行したら、pending になっていた
dbsync (update_env) のタスクが消えている。

そして、以下を実行。

# xe-toolstack-restart

恐る恐る XenCenter での接続を試みると…

「きたー!接続できたー!」

見事に復旧しました!

調査の過程でわかったんですが、/var/log/kern.log に以下のような記録があり、数日前に oom-killer が発動して、xcp-rrdd というプロセスが kill されたことが原因のよう。

Out of memory: Kill process 2396 (xcp-rrdd) score 519 or sacrifice child

xcp-rrdd というプロセスの詳細は調べていませんが、これが kill されたことで api が正しく動作しなくなり、その影響でいろいろと(cronのタスクがやたら発生していたこと等も)不具合が発生していたのでしょう。

とにかく、これで問題は解消しました。

あーよかった。

どなたかのお役に立てれば幸いです。

sponsored link

down

コメントする






sponsored link