apache cloudstack のコンソールプロキシが動かなくなった。 以前から利用できなくなっていたのだが、一部インスタンスが動かなくなり VNC 接続などでターミナルを確認する必要があったので調査して応急処置はできた。
環境
- ApacheCloudstack 4.8
- サーバー 3 台構成
- KVM を利用
状況
- 正常なインスタンスは立上り通信可能
- 動かなくなったインスタンスは ping は通るが SSH 不能
- systemvm は 2 台どちらも running だが Agensstatus が Disconnect
- Console proxy VM
- Secondary Storage VM
ConsoleProxyVM の再起動
手始めに ConsoleProxyVM を再起動してみた。 cloudstack の管理画面に管理者権限でログイン Home -> Infrastructure -> System VMs Console Proxy VM のインスタンスをクリック reboot system VM をクリックして再起動した。
再起動では解決しなかった。
Console Proxy VM の再作成
既にある VM がおかしい状態に陥っている可能性があったので Console Proxy VM の再作成を行った。 再起動とほぼ同様の手順で cloudstack の管理画面に管理者権限でログイン Home -> Infrastructure -> System VMs Console Proxy VM のインスタンスをクリック destroy system VM をクリックして VM を削除した。
SystemVM は削除されると必要に応じて再作成されてくる。 vm 名の通し番号が 1 上がる、IP 等の情報が設定している範囲でランダムに置き換わる。 再作成後、running になったが情況に変化がなかった。
Console Proxy VM へのログイン方法と Console Proxy VM の構成
Console Proxy VM にログインして原因を調査した。
console Proxy VM へのログイン Link Local IP Addressは管理画面から確認できる。
ssh -i /var/lib/cloudstack/management/.ssh/id_rsa -p 3922 <Link Local IP Address>
Console Proxy VM は以下の構成でした。
- CPU 1 コア
- メモリ 1GB
- OS debian 7.9
起動時に動くものたち
# chkconfig |grep on$
acpid on
bootlogs on
bootmisc.sh on
checkfs.sh on
checkroot-bootclean.sh on
checkroot.sh on
cloud-early-config on
cron on
hostname.sh on
hwclock.sh on
iptables-persistent on
ipvsadm on
irqbalance on
kbd on
keyboard-setup on
killprocs on
kmod on
motd on
mountall-bootclean.sh on
mountall.sh on
mountdevsubfs.sh on
mountkernfs.sh on
mountnfs-bootclean.sh on
mountnfs.sh on
mtab.sh on
networking on
ntp on
open-vm-tools on
postinit on
pppd-dns on
procps on
rc.local on
rmnologin on
rpcbind on
rsync on
rsyslog on
setkey on
ssh on
sudo on
sysstat on
udev on
udev-mtab on
urandom on
xe-linux-distribution on
cloud-early-config が Console Proxy VM の中身と思われる。
Console Proxy VM の Port80 の LISTEN の成功と表示崩れ
cloud-early-config の起動で java が port80 を LISTEN し始めました。
/etc/init.d/cloud-early-config start
しかし画像や JS が 404 になり表示崩れしてしまい利用することができませんでした。
Console Proxy VM の表示崩れの修正
java は動いているためドキュメントルートの場所が違うのかと、github のコードを読んだり、VM 内の config を調べたがそれらしいものは見つからない。
苦し紛れにいろいろ調べていると
ls -l /proc/<javapid>|grep cwd
lrwxrwxrwx 1 root root 0 May 12 05:33 cwd -> /usr/local/cloud/systemvm (deleted)。
実行したディレクトリが消えてる状態でした。 しかし、/usr/local/cloud/systemvm 以下にはファイルやディレクトリがちゃんと存在しました。
実験してみると
/etc/init.d/cloud-early-config start
これを実行した直後はディレクトリが消えていて ディレクトリ遷移すると復活しているようでした。
/etc/init.d/cloud-early-config がディレクトリを消しているため /usr/local/cloud/systemvm 直下の js,css,images が読み込めず表示崩れが起きていたようです。
/etc/init.d/cloud-early-config の中身を読んでみたところ、私には複雑ですぐに問題箇所がわかりませんでした。 時間を置いて解読したいと思います。
応急処置として chattr でディレクトリこと書き込み禁止にしてみました
chattr +i /usr/local/cloud/systemvm/images
chattr +i /usr/local/cloud/systemvm/js
chattr +i /usr/local/cloud/systemvm/css
pkill -9 <javapid>
/etc/init.d/cloud start
/etc/init.d/cloud-early-config start
cloud-early-config start した際に images js css が削除できない旨のエラーが出て console の表示崩れが解消しました。
原因ではなかったが試してみたこと&調べたこと
時間のずれ
host と systemVM の時間がずれているとうまくいかないそうなので調査しました。わたしの場合には時間のずれはありませんでしたが timezone がずれていたので揃えました。
HOST Tue May 11 21:08:44 JST 2021
SYSTEM VM Tue May 11 12:09:08 UTC 2021
in the systemvm
cp /usr/share/zoneinfo/Japan /etc/localtime
SSL 証明書の問題
わたしの環境は SSL を利用していないので関係なかったのですが、 cloudstack で利用していた証明書(realhostip.com)が 2014 年に切れておりその影響で繋がらない場合があるそうです。 cloudstack 4.3 以上の場合はデフォルトで SSL 無効になっているようです。
証明書を利用している場合には管理パネルから下記の設定をすると SSL を無効にでき るようです。
Home -> Global Settings
secstorage.encrypt.copy "false"
consoleproxy.url.domain 空
本番環境で SSL 接続を off にすることは推奨されていません。ご注意ください。
参考
おしまい