SoftLayer上でResource-as-a-Service (RaaS) Cloudっぽい動作をするクラウドを作ってみる

本記事はSoftLayer Advent Calendar 2014のために書いたものです.21日に作成する予定でしたが,予定が重なり遅くなってしまいました.お詫び申し上げます.

RaaSクラウドとは?

Resource-as-a-Service Cloud[1] は,2012年にIBMが提唱した新しいクラウド形態です.現在多くのIaaSクラウドでは,VM単位で計算資源が貸し出されていますが,VMの負荷状況は一定ではありません.このため,低負荷な状況下においても(計算資源を利用していないにもかかわらず)一定額の料金が請求されます.RaaSクラウドでは,「計算リソースを売る」という考え方のもと,必要なときに必要なだけ計算資源を利用し,利用した分だけ課金される形態のクラウドを提案しています.

利用する計算資源の粒度は,たとえばCPUなら1サイクル単位,メモリなら1バイト単位,ディスクなら1ブロック単位など様々考えられますが,この記事では文献[2][3]を参考に,CPUとメモリの使用に着目してRaaSっぽいクラウドをつくってみます.

RaaSっぽいクラウドを実現するために必要なこと

RaaS型のクラウドは,(1) 少ない計算資源を割り当てたVMと,(2) VMに割り当てる計算資源から構成されます.VMは負荷状況に応じて(2)を利用し,(3) 利用した計算資源量を計測することで課金します.VMに割り当てる計算資源は固定ですが,割当量が小さいため課金額は小さくなります.

実装方法

幸いにも,電気通信大学の中島拓真さん他が文献[2][3]で実装方法を提示してくれています.これらの文献とその時の発表スライドを参照すると,以下のようなフローでVMから計算ホストに高負荷な処理を依頼することで,強力な計算資源を利用した計算の実行と,VM領域へのディスクI/Oを提供しています.

  1. VMは計算ホストにコマンドの実行を依頼する
  2. VMは計算ホストから実行ディレクトリをマウントできるように設定を行う
  3. 計算ホストはVMの実行ディレクトリをマウントする
  4. 計算ホストはマウントしたディレクトリで依頼されたコマンドを実行する
  5. コマンドの実行出力をVMに転送する
  6. 計算ホストは計算終了後,ディレクトリのマウントを解除する


実験環境

実験にあたり,SoftLayerの東京リージョンでベアメタルインスタンスを1つ注文しました.クラウドインスタンスも注文しようとしたのですが,クーポンの上限を超えていると言われたのであきらめました.なるほど確かにそのような記述がありますね.

しかしながら,かなり高性能なマシンがデプロイされたので,VMはこのベアメタルインスタンス上で動作させることにします.ベアメタルインスタンスの構成は以下の通りです.

その上で動作させるVMの構成は以下の通りです.

OS Ubuntu 14.04 Server (64bit)
CPU 1vCPU @2.4GHz
RAM 1GB
HDD 20GB

実験

VMからベアメタルインスタンスに向けて高負荷な画像処理を依頼します.その際の実行時間を比較してみます.まず,ベアメタルインスタンス上にKVMVMを作成できるようセットアップし,上記構成のVMを作成しました.その後,先に紹介したような動作をするプログラムを作成し(詳細は論文参照),実行してみました.実行結果を以下に示します.

対象とした画像ファイルは21600x10800のJPGファイルです.
$ identify src.jpg
src.jpg JPEG 21600x10800 21600x10800+0+0 8-bit PseudoClass 256c 6.18MB 0.000u 0:00.000

まず,5%に縮小する作業を行ってみました.

$ convert src.jpg -resize 5% out.jpg

計測対象 時間
VM内での実行時間(5回平均) 55.84秒
計算ホスト上での実行時間(5回平均) 3.12秒(VMよりも16.5倍高速)
VMから計算ホストを利用した実行時間(5回平均) 3.38秒(VMよりも17.9倍高速)
実行に要するオーバヘッド 0.26秒

次に,各ピクセルを近傍120x120ピクセルでぼかす処理を行ってみました.

$ convert src.jpg -blur 120x120 out.jpg

計測対象 時間
VM内での実行時間 (データ取得していません)
計算ホスト上での実行時間(5回平均) 59.97秒
VMから計算ホストを利用した実行時間(5回平均) 60.08秒
実行に要するオーバヘッド 0.11秒

オーバヘッドはCPUの計算負荷によらず0.1〜0.3秒程度で,計算ホスト上で直接実行したものとほぼ同等の性能が得られています.

まとめ

・Resource-as-a-Serviceクラウドは,計算資源を効率的に利用できるクラウド形態です.
・SoftLayerでRaaSっぽい動作をするクラウドを作って実験してみました.
・0.3秒程度のオーバヘッドで物理マシンの計算性能をほぼそのまま利用できることを確認しました(文献[2][3]の通り).
・ほら,電気通信大学に入りたくなったでしょう?

参考文献

[1] Orna Agmon Ben-Yehuda, Muli Ben-Yehuda, Assaf Schuster, Dan Tsafrir. "The Resource-as-a-Service (RaaS) Cloud,” in Proceedings of 4th USENIX Workshop on Hot Topics in Cloud Computing, pp. 12-12, May 2012.
[2] Takuma Nakajima, Masato Yoshimi, Hidetsugu Irie, Tsutomu Yoshinaga. "Sharing Computing Resources with Virtual Machines by Transparent Data Access,” in Proceedings of First International Conference on Computing and Networking (CSA ’13), pp.359-364, Dec. 2013.
[3] 中島拓真, 吉見真聡, 入江英嗣, 吉永努, "クラウド環境における透過的データアクセスと計算リソースの動的共有手法,” 電子情報通信学会技術研究報告, pp.91-96, Nov. 2013.

物理ノード1台+IPアドレス1個でCloudStack

本記事はCloudStack Advent Calendar 2014のために書いたものです.「CloudStackをサスペンドしてみる」という内容で書く予定でしたが,そちらの内容はろまのふさん(@kamiya344)にお願いすることになりました.本記事では1台構成のCloudStackをIPアドレス1個で実現する方法について紹介します.

概要

サーバ1台でCloudStackを構築します.通常,CloudStackでクラウドを構築する際は,(1)クラウド管理サーバ,(2)VMを動作させるコンピューティングホスト,(3)VMのHDDを格納するNFSサーバの3つが必要になります.しかし,(1)〜(3)を1台に集約することで,物理サーバ1台でCloudStackを構築することもできます.

CloudStackを使って物理サーバ1台構成のクラウドを構築する方法(http://bit.ly/AutoInstallCloudStack)が既にあります.しかし,この方法では(作成するVM数にもよりますが)IPアドレスが10-30個程度必要になります.既存のネットワークで利用できるIPアドレスが少ない場合や,利用申請が必要など手続きが煩雑な環境において,IPアドレス1個でCloudStackを構成する方法を考えてみました.この記事では,基本ネットワーク構成のCloudStackを構築する方法を紹介します.

ネットワーク構成の概要

通常,1台構成のCloudStackのネットワーク(基本ネットワーク構成)は下図のようになっています.物理サーバで稼働しているVMNIC(vnet0, vnet1, …)は,cloudbr0という名前のブリッジに追加されています.eth0は外部ネットワークと接続されていて,各VMには外部ネットワークと同じネットワークセグメントのIPアドレスが割り当てられます.その結果,外部ネットワークのIPアドレスVMで使用するだけ必要になるので,十分な数のIPアドレスが用意できない場合,クラウドを構築できません.

外部ネットワークのIPアドレスが1個しか利用できない場合,物理サーバ内部でVM用のネットワークを用意することで,クラウドを構成できます.先ほどと同じようにcloudbr0にVMNICが追加されますが,このブリッジにはeth0を追加しません.eth0とcloudbr0を別系統で用意してNATすることで,VMと外部のネットワークを分離します.

1台構成クラウドの構築手順

ここからは,上で示した構成のクラウドの構築手順を説明します.ネットワークの設定方法を変更するだけなので,CloudStack自体のインストール方法は公式のインストール手順とほぼ同じです.なお,ネットワーク情報は以下の内容で設定します.

外部ネットワークのCIDR 192.168.0.0/24
VMIPアドレスのCIDR 10.100.0.0/24
物理サーバのIPアドレス(eth0) 192.168.0.101
物理サーバのIPアドレス(cloudbr0) 10.100.0.1

今回対象とする物理サーバのスペックは以下のとおりです.

CPU Intel Core i7-3770
RAM 32GB
HDD 2TB
NIC 1GbE x 1
CentOSのインストール

構築対象とするサーバは,CentOS 6.5 のディスクでminimal構成でインストールしました.インストール後,外部からSSHできるようにネットワーク設定を済ませておきます.なお,OSインストール後にパッケージの更新を行ったため,CentOS 6.6になっています.

ネットワークの設定

この記事で最も重要となるネットワークの設定を行います.

bridge-utilsのインストール

yum install bridge-utils tunctl -y

NICの設定
/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="static"
UUID=“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
HWADDR=“XX:XX:XX:XX:XX:XX"
IPADDR="192.168.0.101"
NETMASK="255.255.255.0"
BROADCAST="192.168.0.255"
GATEWAY="192.168.0.1"
DNS1="192.168.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"

/etc/sysconfig/network-scripts/ifcfg-cloudbr0

DEVICE="cloudbr0"
BOOTPROTO="static"
BROADCAST="10.100.0.255"
IPADDR="10.100.0.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NETMASK="255.255.255.0"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Bridge"

ネットワークを再起動して適用

service network restart

NATとFORWARDの設定を行います.

iptables -I FORWARD -o eth0 -j ACCEPT
iptables -I FORWARD -o cloudbr0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -d 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.100.0.0/24 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

CloudStackでは,VMが起動するタイミングでNIC間の転送がOFFになってしまうため,/proc/sys/net/ipv4/ip_forwardに1を書き続けるように設定します./etc/rc.localに以下を追記してくことで,1秒毎にNIC間転送をONにするようにします.

while true; do echo 1 > /proc/sys/net/ipv4/ip_forward; sleep 1; done &

CloudStackのインストール

既存の1台構成CloudStackのインストールスクリプトhttp://bit.ly/AutoInstallCloudStack)と公式マニュアルを参考に,CloudStackのインストールを行います.インストール対象ホストが1台に集約されるだけで,手順および設定内容は通常と変わりません.

SystemVM,仮想ルータ,CentOSテンプレートのダウンロード,テンプレート/ISOイメージからのインスタンスの作成,各VMからのネットワーク接続について確認済みです.1台構成のためライブマイグレーションはできませんが,CloudStackの基本的な機能は問題なく使用できると思います.

まとめ

  • 1台構成のCloudStackでは,通常多数のIPアドレスが必要になります
  • ネットワークの構成を工夫することで,IPアドレス1個でクラウドを構築できるようになります

xbindkeysで捗るお話

xbindkeysについて

xbindkeysは,キーボードのinputをフックして適当なコマンドを発行できるデーモンです.自分だけのキーボードショートカットを作ったりするとき便利ですね.使い方は,xbindkeys -kでキーを取得して,そいつを~/.xbindkeysrcに書いてxbindkeysを動かせばOKです.例えば,Control+Shift+F11したときに音声のミュートをトグルするようなショートカットを作ってみましょう.まずはキーを取得します.

xbindkeys -k

上記コマンドを入力した上でControl+Shift+F11とか入力すると,以下のように出力されます.

Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x5 + c:95
    Control+Shift + F11

この出力を参考に,~/.xbindkeysrcを編集します.

"amixer sset Master toggle"
	Control+Shift + F11

設定が書けたらxbindkeysを立ち上げます.複数動いていると面倒なので,先に既存のxbindkeysを殺しておきます.

killall xbindkeys; xbindkeys

この状態でControl+Shift+F11するとミュートのトグルが効くと思います.これで,適当なキーにコマンドを割り当てることができるので,Control+Mod4*1+[aenpfb]でどこでもEmacsキーバインドが使えるようにします.

まずは以下のファイルを/usr/local/bin/enter_keystroke.shとかに保存します.

#!/bin/bash

base=`basename $0 | sed -e 's/\.sh$//g'`
cmd=`echo $base | awk -F '_' '{print $1}'`
keystroke=`echo $base | sed -e 's/^[^_]\+_//g'`

id=`xdotool getwindowfocus`
case $cmd in
key)
  xdotool key --window $id "$keystroke" > /dev/null 2>&1
  ;;
type)
  echo -n "$keystroke" | xclip -i -selection clipboard
  xdotool key --window $id "ctrl+v" > /dev/null 2>&1
  ;;
*)
	echo "usage: ln -s $0 {key|type}_<keystroke>.sh"
	exit 1;;
esac

キー入力ができるようにシンボリックリンクを作成します.

chmod +x /usr/local/bin/enter_keystroke.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Right.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Left.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Up.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Down.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_Home.sh
ln -s /usr/local/bin/enter_keystroke.sh /usr/local/bin/key_End.sh

~/.xbindkeysrcに以下を追記します.

"/usr/local/bin/key_Home.sh"
	Control+Mod4 + a
"/usr/local/bin/key_End.sh"
	Control+Mod4 + e
"/usr/local/bin/key_Down.sh"
	Control+Mod4 + n
"/usr/local/bin/key_Up.sh"
	Control+Mod4 + p
"/usr/local/bin/key_Right.sh"
	Control+Mod4 + f
"/usr/local/bin/key_Left.sh"
	Control+Mod4 + b

xbindkeysを再起動します.

killall xbindkeys; xbindkeys

これで,Control+Mod4 + [aenpfb]が効くようになりました.~/.profileとかにxbindkeysって書いておきましょう.

*1:superキーとか.WindowsキーやCommandキーがそれに相当.

GentooInstallBattleするときに無線LANとかに繋ぎたいよね

ことはじめ

Gentoo入れたいけどEthernetポートがないっていうことはよくあると思います.その際に無線LANを利用することを考えると思いますが,なんだか難しそう…と思っている方も多いのではないでしょうか.実はGentooはデバイスさえちゃんと認識していれば簡単に無線LAN接続できます.

無線LANを使う

まずはデバイスが認識されているかどうか確認しましょう.

# ifconfig

最近はudevが勝手にデバイス名をつけてくれるので,wl*から始まる名前が出てきたら,おそらくそいつが無線LANバイスです.ちなみにen*から始まるのはEthernetポートです.ここでは無線LANバイスをwlp3s0として進めます.まずはアクセスポイントを探します.

# iwlist wlp3s0 scan | grep ESSID

候補が出てきたでしょうか.ここでは接続したいAPのESSIDが"my_essid"だとして進めます.また,APはWPA2とかで暗号化されており,パスフレーズは"my_passphrase"だとします.無線LANアクセスポイントに接続する際にはwpa_supplicantを使用するので,設定ファイルを作ります.

# wpa_passphrase "my_essid" "my_passphrase"
network={
	ssid="my_essid"
	#psk="my_passphrase"
	psk=c287a1721c84e7fe5d9bdcf0c251ab5f78ff1988734682a56b89e5178851f341
}

こんな感じで設定ファイルが吐かれるので,ファイルに書きましょう.

# wpa_passphrase "my_essid" "my_passphrase" > my_essid.conf

設定ファイルができたら,そのファイルを使って接続します.

# wpa_supplicant -i wlp3s0 -D wext -c my_essid.conf

接続できたら,Ctrl+Alt+F2とかで別のttyに移動して確認してみましょう.

# ifconfig wlp3s0

自動的にIPが振られていなければ,DHCPで取得したり静的にIPを割り当てます.

# dhcpcd wlp3s0
# ifconfig wlp3s0 192.168.1.240/24
# echo "nameserver 8.8.8.8" > /etc/resolv.conf

最後にpingで疎通確認します.

# ping www.google.com

簡単ですね.

USBテザリングする方法

この方法は無線LANよりも比較的簡単です.Android端末とかをUSBで接続してUSBテザリングをONにしてdhcpcdするだけです.その辺に飛んでるWifiAndroid→インストール対象マシンという感じで利用できるので,通信量が気になる方も安心ですね.

さいごに

年末年始には忘年会や新年会でのGentooInstallBattleもあるかと思いますので,ぜひ試してみてください.

自宅CloudStackを構築してみたメモ

ことはじめ

SSDってやっぱり壊れるんですね.ある日僕が帰宅すると,なんだか様子がおかしいのです.いつもと挙動が違うなーとか思っていたら,ディスクに何も書けないではありませんか.僕のfstabには

/dev/sda2 / ext4 discard,noatime,errors=remount-ro 0 1

みたいな感じでエラーを検知したら自動的にroで再マウントするように設定してあるのですが,これに引っかかったのでしょうか.しかし,rebootしようとするとそもそもディスク自体を認識していないようだったので,僕は突然SSDを別れを告げることになってしまったのでした.

CloudStackを入れよう

さて,そんなこんなで僕は自宅CloudStackを作ることにしました.1台構成なので冗長性などという文言はかけらもありませんが.

まずはUbuntu 12.04のServer版を入れます.パーティションは適当に切ってもらって,あとはVMを置くための領域をどっかに確保します.
僕の場合は別のHDDに確保することにしました.
インストールできたら,ブリッジが作成できるようにbridge-utilsを入れます.

sudo apt-get install bridge-utils

ネットワークの設定はこんな感じです.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet dhcp
auto cloudbr0
iface cloudbr0 inet static
	bridge_ports eth0
	bridge_fd 5
	bridge_maxwait 1
	address 192.168.1.24
	netmask 255.255.255.0
	network 192.168.1.0
	broadcast 192.168.1.255
	gateway 192.168.1.1
	dns-nameservers 129.250.35.250
	dns-search mikunchu.net

基本的にはインストールドキュメントに沿った形で進めます.
http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html-single/Installation_Guide/index.html

とりあえずNFSを入れます.

sudo apt-get install nfs-kernel-server

NFS関係の設定は/etc/exportsしか書いていません.

/mnt/localhdd/cloudstack/primary *(rw,async,no_root_squash,no_subtree_check)
/mnt/localhdd/cloudstack/secondary *(rw,async,no_root_squash,no_subtree_check)

fstabの設定も忘れずに.

/dev/sdb1 /mnt/localhdd ext4 defaults 0 0

また,1台構成だし今後の拡張予定も今のところないので,VMのCPUはホストのCPUをパススルーすることにしました./etc/cloudstack/agent/agent.propertiesあたりを編集します.

guest.cpu.mode=host-passthrough

インストールが終了したら,次はWebUIにログインして構成します.今回は1台構成なのでPrimaryStorageはNFSを介さない形で作ります.とりあえず初回ログインを済ませたあと,最初のセットアップウィザードはスキップして,自分でゾーンを構成します.「インフラストラクチャ」→「ゾーン」→「ゾーンの追加」から基本ネットワークを構成します(拡張ネットワーク構成にもできます).途中で「ローカルストレージを有効にする」というオプションが出てきますが,今回はSharedMountPointでも同様の構成ができるはずなので,そちらを利用しました.

おわりに

全部手動インストールでもCloudStackなら2時間半もあれば構築できるのでラクラクですね.
あと,この記事の投稿日時はUTCです.

これが本当のMBAだ

MBAって何の略だろう

みなさんの中にもMBAを持っている方がいると思いますが,そもそもこれは何の略でしょうか.
MacBookAir?ふふふ,本当は分っているんでしょう?
そうですね,MikutterBookAirですね.そのMBAはmikutterを動かすために生まれて来ましたね.
違う?いやいや,どうせTwitterしてるんだから変わらないじゃないですか.

MikutterBookAirを作ろう

とりあえず .xinitrc に exec ruby mikutter.rb みたいなことを書いてみました.

source /home/penguin/.xprofile
exec /home/penguin/local/bin/ruby /home/penguin/bin/mikutter/mikutter.rb

1行目は.xprofileを読んでいます.この中でibus-daemonとかを叩いているので,こいつを書いておかないと日本語入力できなかったりします.
2行目でmikutterを起動していますね.Rubyがこの場所にあるのは自分でコンパイルしてるからです.

上記のような状態でstartxするとこうなります.

ブラウザとかは

Alt+xとか叩くとコンソールが出てくるので,

Thread.new{`chromium`}

とか入力してCtrl+RETするとChromeが立ち上がりますね.

同様に

Thread.new{`urxvt`}

とかでターミナルを立ち上げることもできます.もはやWindowsManagerとかいらんかったんや…

研究室におけるCloudStackの運用や障害対応に関する話

僕は研究室でCloudStackでプライベートクラウドを構成していますが,本記事ではその運用上必要になった対応に関するお話をしたいと思います.研究を進めるにあたり新しい環境が必要な場合,通常は物理サーバのセットアップを行いますこないますが,面倒くさいだけでなく,操作ミスや設定の不整合により,もう一度新しい環境を作り直す必要がある可能性があります.このため我々の研究室では,CloudStackを利用することによりこのような際にかかるコストを削減しています.

さて,クラウド運用していて必ずしも安定動作しているわけではありません.というのは,CloudStackのバグ以外にも,敵はたくさんいるからです.今回は次の4つに関するお話をします.

  • Ethernetモジュールのバグ
  • LANケーブルの接触不良
  • 不安定な電源
  • 停電対応

Ethernetモジュールのバグ

比較的レアなケースだと思いますが,現在利用しているマシンのNICのドライバモジュールにバグがあり,ネットワーク上が不要なパケットで溢れてダウンしたことがあります.症状としては,復帰してから数時間から数日程度で環境が落ちて,アクセスできなくなります.また,tcpdump等のコマンドでパケットを監視すると,同じようなパケットが流れ続けているため,原因の特定はそこまで難しくないと思います.ディストリビューション側でモジュールのアップデートが降ってきていたので,それを利用したら解決しました.

LANケーブルの接触不良

これはよくあるケースですね.ネットワークの構成を変更していない場合でも,何らかの形でスイッチを動かしたり,LANケーブルに触れた場合に接触が悪くなってネットワークが疎通できなくなることがありました.リンクアップしているかどうかにかかわらず,疎通がとれない場合はLANケーブルを抜き差ししてみると良いかもしれません.また,大掃除やネットワーク環境を把握するためにスイッチ付近をうろうろしたあとに障害が発生した場合,この可能性も濃厚なので,注意が必要です.LANケーブルを挿し直したり,質の良いLANケーブルやスイッチを利用することで対応が可能です.

不安定な電源

多数のサーバを稼働させる場合,安定した電源が必要になります.特に,サーバは起動する際に電力を食うので,安定運用していると思っていても,何らかの問題が発生してサーバがダウンし,同時に電源を入れようとすると復帰しない可能性があります.問題の特定は難しいですが,そもそもサーバ置き場に何らかのうしろめたいことがあると思うので,「もしかしたら…」という場面がよくあるのかもしれません.

停電対応

大学は必ず1年に数回停電します.この際,マシンの電源を入れたままにしておくと,データが吹っ飛ぶ可能性があります.このため,停電があるときは事前にマシンの電源を落としておく必要があります.手順は次の通りです.

  • 起動中のすべての仮想マシンの電源を落とす
  • ゾーンを無効にする
  • すべてのシステムVMを落とす(セカンダリストレージVM,コンソールプロキシVM,仮想ルータ)
  • すべてのホストをメンテナンスモードにする(1台ずつ設定する必要がある.複数のホストを並行してメンテナンスモードにすることはできないので注意)
  • すべてのホストの電源を落とす
  • 管理サーバを落とす
  • NAS等のストレージの電源を落とす

復帰するときは逆順で作業します.

落雷等で予期しない停電が発生した場合,上記の逆順で復帰します.復帰の際に,以下の項目を確認します.

  • ゾーンを無効にする
  • すべてのホストにおいて virsh list --all して,リストがあれば virsh destroy 1 とかする
  • 管理サーバ側からVMが停止していることを確認する(停電前の状態が残っているので,更新されるのを待つ)
  • システムVMを破棄する(HAが有効なので必要に応じて再作成される)
  • ゾーンを有効にする

この方法で概ね復帰が可能かと思われます.

おわりに

12月25日には自宅CloudStack立ててみた,みたいなトピックで書きます