2013年8月27日火曜日

CloudStack 4.1.1 KVM の基本構築 #cloudstack

ここ一ヶ月ぐらいCloudStack(CS)を触ってみたのでメモしておきます。


環境
今回は私は仮想環境ではなく物理環境で構築しましたが仮想環境でもほとんど変わらないと思います。
  • CloudStack 4.1.1
  • KVM(CentOS 6.4)
  • Catalyst 2960(なくてもいい)
  • VLAN 10個ぐらい(今回はVLAN100~110)
  • ネットワークセグメント 4つ程度
  • NFS(KVM以外のサーバーが望ましいがコントローラーと同じ場所などに構築する)
  • SELinuxは絶対無効にする
  • とりあえずiptablesも無効にする(プロダクションでは設定した方がいいかも)

ネットワーク
CloudStackはネットワーク設計がめっちゃめっちゃ重要になります。
あとで変更するのにはかなり苦労するうえにBugで消せなかったりするのでプロダクションとして構築する場合は注意しましょう。
ethの場合はem1(eth0)、em2(eth1)と読み替えてください。

VLAN  NIC  bridge    Type
100  em2  cloudbr2  guest
101  em1  cloudbr0 public
102  em2  cloudbr3 manage
103  em2  cloudbr1 storage

guest:ゲストOSに割り当てられるIP
public:guestからNATに変換される先のIP(拡張ネットワーク)
manage:ホストOSとシステムVMに割り当てられコントローラーと通信する
storage:ホストOSとストレージとの通信に利用する

storageとmanageは同じセグメントでも可能。
プロダクションだと分けないとSPOFになる。

NICは2つあれば構築しやすいですが1つでも可能です。
仮想マシンでSSHしか使えない環境ですと設定を誤るとSSHが途切れるのでSSHのポートだけ別NICにするか別VLANにするなどCSの影響範囲外に置いてくと無難です。


105~110はコントローラーから拡張ネットワークでゾーンを構築する際にVLANの範囲を指定しますのでその際に105と110を指定してください。

NFS

CSにはプライマリーストレージとセカンダリーストレージの2つの概念がありそれぞれ別々の役割を持っているので必ず構築する必要がある。

VLAN 102のセグメントのIPを割り当て、VLAN 102のセグメントからアクセスできるようにする必要があります。


#yum install nfs-utils

# mkdir -p /export/primary
# mkdir -p /export/secondary

# vi /etc/exports
/export  *(rw,async,no_root_squash)

# exportfs -a

# vi /etc/sysconfig/nfs
Uncomment the following lines:
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020


# service rpcbind start
# service nfs start
# chkconfig nfs on
# chkconfig rpcbind on

最後にマウント可能か確認

# mkdir /mnt/primarymount
# mount -t nfs {NFS IP}:/export/primary /mnt/primarymount
# umount /mnt/primarymount

ここでやっているのはポートの固定化とパーミッションの設定です。
基本手動でNFSをマウントする必要はありません。


KVM

#vi /etc/yum.repos.d/cloudstack.repo
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.1/
enabled=1
gpgcheck=0


#yum clean all
#yum install cloudstack-agent

FQDNがサーバーについていないとエラーになるのでFQDNをつけておく
#hostname -f

#vi /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0

#vi /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"

#service libvirtd restart

起動すれば問題ないです。

virbr0は使わないので削除してもあっても問題ないです。
削除する場合
#virsh net-destroy default
#virsh net-autostart default --disable


VLANの設定
私の環境ではスイッチのポートをTrunkにしているのでLinux側でTagginします。
サーバー側が複数NICでアクセスポートにしている場合は以下の設定は不要です。

VLANはifcfg-{nic}.{vlan-id}で指定しvlan=yesを追記すると有効になります。
aliasを利用する場合はifcfg-{nic}.{vlan-id}:{alias-num}で可能かと思います。

VLAN  NIC  bridge    Type
100  em2  cloudbr2  guest
101  em1  cloudbr0 public
102  em2  cloudbr3 manage
103  em2  cloudbr1 storage

この設定をします。

IPADDRやNETMASKの設定が必要な場合はbridge側に設定します。

#cd /etc/sysconfig/network-scripts
#vi cloudbr0
DEVICE=cloudbr0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=1

#vi cloudbr1
DEVICE=cloudbr1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=1

#vi cloudbr2
DEVICE=cloudbr2
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=1

#vi cloudbr3
DEVICE=cloudbr3
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=1

#vi ifcfg-em1
DEVICE="em1"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE="Ethernet"
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Global Nat"
VLAN=yes
BRIDGE=cloudbr0

#vi ifcfg-em2
DEVICE="em2"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE="Ethernet"
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System em2"

#vi ifcfg-em2.100
DEVICE="em2.100"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE="Ethernet"
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Private"
VLAN=yes
BRIDGE=cloudbr2

#vi ifcfg-em2.102
DEVICE="em2.102"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
DEFROUTE=yes
TYPE="Ethernet"
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="management"
VLAN=yes
BRIDGE=cloudbr3

#vi ifcfg-em2.103
DEVICE="em2.103"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
DEFROUTE=yes
TYPE="Ethernet"
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Storage"
VLAN=yes
BRIDGE=cloudbr1

VLAN 101はコントローラーの制御に入れば動的に作られるようなのでここでは作成しません。
bridgeとNICの結びつきと設定はハマりポイントなので注意して設定してください。

cloudbrという名前は変更しても問題ないです。
これが構築後に設定するKVMのラベル名となります。


コントローラー

コントローラーとはハイパーバイザーなどを管理しWebUIなどを提供するCloudStackそのものです。
パッケージ名だとserverやmanagerなどの名前がついています。私は便宜上コントローラーと呼んでおります。

KVMと同様にFQDNとyumのリポジトリを設定してください。

#yum install cloudstack-management
#yum install mysql-server

#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 start

MySQLでcloudユーザーを作成しrootユーザにパスワードを設定してください。


テーブルの作成
#cloudstack-setup-databases cloud:{cloud_user pass}@localhost --deploy-as=root:{root_pass}


CSを初期化したい場合はcloudstack-managementを停止した後にcloud、cloud_usage、cloudbridgeのデーターベースを削除し再度cloudstack-setup-databasesを実行すれば初期化できます。


コントローラー側でシステムVMをダウンロードします。
セカンダリーストレージにダウンロードするので予めマウントしておきます。
#/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm  -F


/usr/sbin/tomcat6: line 30: /usr/share/cloud/management/logs/catalina.out: Permission deniedが発生するのでパーミッションを変更します。

chmod 777 /usr/share/cloud/management/logs/catalina.out

ここまでくるとコントローラーが起動すると思います。

起動後、初期プロビジョニングが実行されるので少し待ってからアクセスしてください。

#service cloudstack-setup-management start
#netstat -nl
8080がListenしていれば問題ありません。

起動してない場合はログを見直しましょう。
/var/log/cloud/management/management-server.log

http://{ip}:8080/client/
ユーザ:admin
パスワード:password
ドメイン:指定なし

IPの部分ですがem1(eth0)側がアップリンクになっている場合は優先的にeth0のIPを優先するようです。eth1でアクセスしたい場合は一時的にeth1をダウンさせましょう。
#ifdown em1(etn0)

ログインできれば、ウィザードにしたがって構築可能です。
詳しい構築方法は後ほど公開します。



0 件のコメント:

コメントを投稿