2012年6月13日水曜日

CloudStack 3.0.2 簡単導入 (7/31更新)

CloudStackが人気になって久しいけど、すぱっと導入しているページが無いので書いてみた。
ただ、クラウドが簡単に運用できるとは思わないほうがいいと思う。少なくとも本番運用には2セット(本番、検証環境)は必要。それを理解した上で構築することをおすすめする。
下手なベンダーに騙されるぐらいなら、自分で事前検証をすることをおすすめする。もし、ベンダーに頼むのであれば、間違いなく大手SIerに頼むべし!彼らの価格提示が高いのは、最初に大きく、正しく絵を描いているからだ。

さて、まずは構成図(物理構成)

あくまでも、こじんまりと最小限の環境で構築をするようにしている。
F/W・ルーターは、Buffaloなどの家庭用のでも検証は可能。ただし、インターネットへの接続は必ず必要。また、グローバルIPは、あっても無くても(ケーブルテレビ環境など)いい。また、ルーターでのDHCPは、無くても良い。

このCloudStackの構成をBasic Networkモードという。VLANは使わないが、CloudStack付属のファイアーウォールやロードバランサーは利用できない。

必要機材は、基本的にCloudStackの必要要件に準じるが
  • ルータ・ファイアーウォールやネットワークHUB(普通のSWITCH)
  • ストレージサーバ (NFSが利用できればなんでもいい)
  • CloudStack管理サーバ  
  • 計算機ノード(Intel VTあるいは、AMD-Vが利用できるマシン。メモリは4GBくらい必要)
 ストレージサーバは、CloudStack管理サーバと同居させても構わない(ただし、あくまでも検証目的であれば。)

・ルータ・ファイアーウォール Buffaloの有線LANルーター
・ストレージサーバ  CentOS 6.2 x86_64  2GB Memory HDD 500GB
・CloudStack管理サーバ CentOS 6.2 x86_64  2GB Memory HDD 20GB
・計算機ノード Intel Xeon E3 4core/8Thread 16GB Memory HDD 160GB

計算機ノードのディスクは、本来20GB程度で構わないが、計算機ノードのストレージもプライマリストレージとして使えるので、付いていると便利。また、CPUは、AMDだとHyperthreadingが使えないので、リソースが厳しくなる。(本来Hyperthreadingは、偽のCPU-パワーなので期待できないが、KVMの場合は有効に使える。)

つまり、計算機ノードは、贅沢に、残りはしょぼくても構わない。


OS仮想環境は、以下のようにする。
OS:    CentOS 6.2 x86_64
仮想環境:  KVM

このチョイスにした理由は、お金をかけたくないからである。また、KVMを利用した理由は、XenServerだと、パワーマネージメントが使えないため電気代が大量にかかる。一方KVMは、パワーマネージメントが有効的に使える上に、KSMというメモリシェアリングの機構が使えるため、同じOSを複数台起動するという条件付きだが、見た目以上のリソースを動作させることが可能。

以下構築手順だが、肝心なGUIでの入力値が抜けているが後日追加する。
ネットワーク空間は、192.168.100.0/24に構築することとする。

1.ストレージサーバの構築

●OSのインストール
CentOS 6.2 x86_64
インストールしたパッケージグループは、Baseのみ。
/export配下に高速かつ大容量ストレージをマウントする。

●IPv6の無効化とホストの設定
# vi /etc/sysconfig/network
以下を追加。
  -> NETWORKING_IPV6=no

# vi /etc/modprobe.d/disable-ipv6.conf
以下を追加。
  -> options ipv6 disable=1

# vi /etc/hosts
  -> ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
をコメントアウト。また、ホスト名を設定
  -> 192.168.100.X   yourhost.yourdomain.com yourhost

# chkconfig ip6tables off

●その他、設定、アップデート
# yum -y update
# yum -y install acpid ntp nfs-utils wget
# service acpid start
# service ntpd start
# chkconfig acpid on
# chkconfig ntpd on
# vi /etc/selinux/config

以下を変更。
 SELINUX=enforcing
  -> SELINUX=permissive

# setenforce permissive
# vi /etc/idmapd.conf
以下を変更。(サーバのドメイン名に)
  -> Domain = company.com

NFSサーバの設定
# mkdir -p /export/primary
# mkdir -p /export/secondary
# vi /etc/exports
以下を追加。
  -> /export *(rw,async,no_root_squash)

# exportfs -a
# vi /etc/sysconfig/nfs
以下の設定を変更(コメントアウトを外す)
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

# vi /etc/sysconfig/iptables
INPUT chainの下に以下を追加
-A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -p udp --dport 662 -j ACCEPT

# /etc/init.d/iptables restart
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# chkconfig rpcbind on
# chkconfig nfs on

# rpcinfo -p localhost
rpcが動作しているか確認
# showmount -e
エキスポートが正しくされているか確認


これでストレージサーバの構築は終了

2.  CloudStackの構築

設定例
管理サーバ 192.168.100.4
ストレージサーバ 192.168.100.5
 ストレージパス
プライマリストレージ 192.168.100.5:/export/primary
セカンダリストレージ 192.168.100.5:/export/secondary

CloudStackの構成は、ベーシックネットワークモード
mysqlのrootのパスワード dbpassword
mysqlのcloudのパスワード cloudpassword
とすると

<共通設定>
●OSのインストール
CentOS 6.2 x86_64
インストールしたパッケージグループは、Baseのみ。

●IPv6の無効化とホストの設定
# vi /etc/sysconfig/network
以下を追加。
  -> NETWORKING_IPV6=no

# vi /etc/modprobe.d/disable-ipv6.conf
以下を追加。
  -> options ipv6 disable=1

# vi /etc/hosts
  -> ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
をコメントアウト。また、ホスト名を設定
  -> 192.168.100.X   yourhost.yourdomain.com yourhost

# chkconfig ip6tables off

●その他、設定、アップデート
# yum -y update
# yum -y install acpid ntp nfs-utils wget
# service acpid start
# service ntpd start
# chkconfig acpid on
# chkconfig ntpd on
# vi /etc/selinux/config
以下を変更。
 SELINUX=enforcing
  -> SELINUX=permissive

# setenforce permissive
# vi /etc/idmapd.conf
以下を変更。(サーバのドメイン名に)
  -> Domain = company.com

# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# chkconfig rpcbind on
# chkconfig nfs on


●インストール前のネットワーク構成のコピー (アンインストールした時に楽)
cp /etc/sysconfig/iptables /root

●再起動
# reboot

●確認
# ifconfig 
 IPv6が表示されていないことを確認
# ping `hostname`
 正しくpingがループバックアドレス以外で返ってくることを確認
 外部への名前解決ができていて応答が返ってくるかを確認

CloudStackのパッケージをダウンロードしておく。
<管理サーバ>
# tar xfz CloudStack-oss-3.0.2-1-rhel6.2.tar.gz
# cd CloudStack-oss-3.0.2-1-rhel6.2
# ./install.sh
>M

# ./install.sh
>D

# vi /etc/my.cnf
[mysqld]セクションの最後に以下を追加
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'

# service mysqld restart
# mysql -u root
  mysql> SET PASSWORD = PASSWORD('dbpassword');
  mysql> exit
# cloud-setup-databases cloud:cloudpassword@localhost --deploy-as=root:dbpassword
# cloud-setup-management
# mount -o vers=3 192.168.100.5:/export/secondary /mnt
以下の行は1行で実行
# /usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -F
このコマンドを実行すると、管理VMの仮想マシンイメージがダウンロードされる。

これでCloudStack管理サーバの構築は完了

<計算機サーバ -- KVMの場合>
●インストール前のネットワーク構成のバックアップ(アンインストールした時に楽)
# cp /etc/sysconfig/network-script/ifcfg-eth* /root

●ローカルディスクを使う場合の設定(オプション)
# mkdir -p /home/images
# mkdir -p /var/lib/libvirt/images
# vi /etc/fstab
以下を追加
-> /home/images          /var/lib/libvirt/images ext3     bind,defaults    0 0

# mount -a

●Agentのインストール
# tar xfz CloudStack-oss-3.0.2-1-rhel6.2.tar.gz
# cd CloudStack-oss-3.0.2-1-rhel6.2
# ./install.sh
>A

# vi /etc/libvirt/qemu.conf 
以下のコメントアウトを外す
  -> "vnc_listen = 0.0.0.0"

# /etc/init.d/libvirtd restart
# chkconfig libvirtd on


●vhostモジュールは無効にしておく!
# vi /etc/modprobe.d/blacklist-kvm.conf
以下を追加。
  -> blacklist vhost-net

●DNSマスカレード停止
# /etc/init.d/dnsmasq stop
# chkconfig dnsmasq off


●KSMの有効化(オプション)

# /etc/init.d/ksm start
# /etc/init.d/ksmtuned start
# chkconfig ksm on
# chkconfig ksmtuned on

●管理ツールのインストール(オプション)
# yum install virt-manager virt-top

一旦再起動したほうがいい

<計算機サーバ -- XenServerの場合>

特に特別な指定はない。インストールはかなり楽。ただし、IPアドレスは固定アドレスを使う。
インストールが完了したらXenServerのコンソールにログインをして以下を実行する
# tar xf xenserver-cloud-supp.tgz
# xe-install-supplemental-pack xenserver-cloud-supp.iso
# xe-switch-network-backend bridge

●念のためCPUのmicrocode update (Intel CPUを利用している人のみ)
# cp /etc/firmware/microcode.dat  /etc/firmware/microcode.dat.orig
# tar xfz microcode-20120606.tgz
# mv /etc/firmware/microcode.dat  /etc/firmware/
# /etc/init.d/microcode_ctl restart

updaterがあればXenCenterから当てておく。
が2012/6/5時点でリリースされている。一つづつインストールしないとダメッだった。
XenCenterからactivation codeをインストール
CloudStack Agentなどのインストールはない。これで完了。CloudStack管理コンソールから追加する。



3.Webコンソールで設定
http://192.168.100.4:8080/client/
初期ユーザ名/パスワードは admin/password

システムのネットワークは、192.168.100.21-39
ゲストのネットワークは、192.168.100.40-99
とした。ネットマスクは、255.255.255.0

セットアップ完了したら、Secondary Storage VMが稼働して、built-inのCentOSイメージのtemplateのダウンロードが開始される。このダウンロードが終わるまで、一旦環境を放置しておく。(一時間程度まっても完了しない場合は、Secondary Storage VMに問題がある可能性がある。一度、Secondary Storage VMをdestroyして、もう一度確認する。)



4. パラメータの変更
Built-inのTemplateが利用可能になったら(ダウンロード終了したら)、パラメータの変更をする。

●変更するパラメータ
-以下の値を小さくしないと、なかなかリソースが解放されない。
expunge.delay 86400 -> 7200
expunge.interval 86400 -> 7200

-ローカルストレージ(ハイパーバイザーのストレージ)を使うようにする設定
設定を変更した場合、一度virtual routerとsecondary storage VMをdestroyする。
また、通常のインスタンスでローカルストレージを利用する場合は、Servicingの変更を行う。
system.vm.use.local.storage true
use.local.storage true

●cloud-managmentの再起動
# service cloud-managment stop
# service cloud-managment start

●動作確認
- Security Groupを新規作成して、sshでアクセスできるようにする。
Built-inのCentOS テンプレートでインスタンスを起動する。
コンソールログイン (root/password)

- ifconfigを実行して、本来割当られるべきアドレス空間がアサインされているかを確認
(他のDHCPなどのアドレス空間から割当られている場合は、vhost-netがハイパーバイザでロードされている可能性がある。)

 - yum -y updateを実行して正常終了したらOK

- インスタンスの起動でErrorになる場合は、計算機ノードのCPU/Memoryリソースが足りない可能性がある。


[備考]インストールしておくと便利なイメージ
Windows用Paravirtual Driver
CentOS
利用時には、インストールソースURLを以下にする。



Ubuntu


はじめに

まずは、自己紹介
クラウド業界の卒業生。以前までCloudどっぷりだったが、あまりにもバズワードばかりで、話も雲をつかむような話ばかり。今は地道な下請けの生活。

はっきり言って、クラウドを使うなら、Amazon AWSあるいはAzureで十分かと。値段と性能を比較すると、それ以外の選択肢はもはやお布施になってしまうのでと感じる。

このブログは、クラウド業界に真っ向対決するブログである。しかし、批判ばっかりではなく、実際にクラウド製品のトライアルをして公平に評価をしていこうと思う。雲をつかむような話をする輩に騙されるまえにこのブログを読んでみてほしいと思う。
もちろん、正しくクラウド扱いビジネスをしている会社やベンダーもある。
全てを否定するわけではない。読者に正しいクラウドビジネスを指摘するだけである。

また言うまでも無いが、このブログは、「個人の意見」である。また、無断でプレゼンに流用するのはご遠慮いただきたい。リンクはどこからでも張っていただいて問題ない。

最後に、今回のコラム
北米の。。。」を語るセミナーは時間の無駄。あくまでも北米資本の会社がクラウドビジネスをしているのであって、従業員はほぼ外国人(アメリカ人以外の人)。こんな言葉を現地企業の社内で口走ったら、差別主義者に思われると思う。人種と宗教の話は、タブーと言われるが、正確には、人種、宗教を尊重して付き合う必要がある。

この「北米の。。。」という言葉は、戦後の日本であった、「アメリカ=すごい、ギブミーチョコレート」という考えから来ているのかもしれない。

ちなみに、皆さんが使っているIntel CPUのコアアーキテクチャは、イスラエルで開発されたものだ。北米で開発されたものではない。。。
Coreマイクロアーキテクチャ

北米を語る輩に騙されるな!