libvirt が落ちた

へいYou! とっととトラブル解決しちゃいなよ!

本日、システム管理用の Nagios が アラートを上げていた ( KVMゲストが落ちている ) ため、KVMホスト にssh接続し、いつものように virsh コマンドにてゲストOSの状態をチェックしてみたところ、エラーが発生してしまいました。
社内の備忘録兼ねて、解決方法に関して記しておきます。

はじめに

今日libvirtが死んだ。もしかすると昨日かも知れないが、私には分からない。

また 異邦人ネタか?と思った方もいるかもしれない、今日この頃、みなさまいかがお過ごしですか?

弊社では、殆どの社内サーバはKVMを利用して仮想化しているのですが、たまにゲストが落ちる事があります。
これらサーバはNagiosを利用して死活監視をしているので、アラートに従って対応 ( 再起動 ) するわけですが、今日はいつもの手順だけではダメな状態になってしまっていました。

※写真:写真素材ぱくたそ

いつもの手順

KMVゲストが落ちた場合、UIでKVMの仮想マシンを管理する#仮想マシンの起動/再起動/シャットダウン/電源OFF の方法を使って GUI でゲストを ( 再 ) 起動してもいいですが、私の場合は通常は以下の手順で対応しています。

  1. KVMホストに SSHでログインする
  2. virsh コマンドで KVMゲストの状態確認
    $ sudo virsh list --all
     Id    名前                         状態
    ----------------------------------------------------
     3     xxxxx                        実行中
     4     yyyyy                        実行中
     -     zzzzz                        シャットオフ
    
  3. KVMゲストを起動する ( 以下では上でシャットオフ状態だった zzzzz を起動している )
    $ sudo virsh start zzzzz
    

今日の状態

いつもは上の手順でさくっと起動完了するのですが、今日は以下のエラーが発生してしまいました。

$ sudo virsh list --all
エラー: ハイパーバイザーへの再接続に失敗しました
エラー: 有効な接続がありません
エラー: ソケットの '/var/run/libvirt/libvirt-sock' への接続に失敗しました: そのようなファイルやディレクトリはありません

※実は以前にも2度程遭遇した問題で、社内サーバに解決方法は記載してあったりするのですが、この社内サーバもKVMゲスト上で動いているため、いざという時に解決方法を参照できない可能性があったりします (-_-;。再発ついでに、こちらでも記事化

事象

どうやら libvirtが落ちたようです。
libvirtが落ちても問題があったゲスト以外は無事に動いています。

対応方法

この場合、libvirtdを再起動する事で復旧するようです。

$ sudo /etc/rc.d/init.d/libvirtd restart
libvirtd デーモンを停止中:                                 [失敗]
libvirtd デーモンを起動中:                                 [  OK  ]

再起動後は、virsh コマンドで作業可能になりました。