社内の仮想環境基盤として、Wakame-vdcとkaresansuiをインストールしてみたが、どうも機能的に足りない。(要件としては、1台のサーバで運用して、長期的には複数台に増やす。Linux、Windows環境も対応する。)
そこで要件に対応できそうなCloudStackをインストールしてみたいと思う。
あとでインストール作業をシェルにまとめるつもり。
とりあえず、全部ローカルにインストールするつもりで記載をする。
あととりあえず起動するところまでは確認していますが、それ以降は確認していないので、参考にする場合にはそのつもりで。
まだ仮想ルーターが正常に認識しないようだ。意見募集中。シングルノードではやはり動かないのかな?
ネットワーク構成
サーバ名 | IPアドレス |
---|---|
管理サーバ | 192.168.0.165 |
ストレージサーバ | 192.168.0.166 |
KVMサーバ | 192.168.0.170 |
システム要件
とりあえず、システム要件を以下に記載する。
管理サーバー、データベース、およびストレージ
OS | CentOS/RHEL 6.3+ もしくは Ubuntu 12.04(.1) |
CPU | 64-bit x86 CPU |
メモリ | 4GB以上 |
HDD | 50 GB以上(但し、管理サーバは500GB以上推奨) |
NIC | 最低1つ以上 |
IP | 静的に割り当てられた IP アドレス(3つ以上) |
ドメイン | hostname コマンドで返される完全修飾ドメイン名 |
ホスト/ハイパーバイザー(KVM)
CPU | ハードウェア仮想化技術CPU |
メモリ | 4GB以上 |
HDD | 36 GB以上 |
NIC | 最低1つ以上 |
libvirt | 0.9.4以上 |
Qemu/KVM | 1.0以上 |
※ CloudStackをインストールする際には、先にKVMが動作している事が必要。 | |
※クラスタリングする場合は、全て同じCPUであること。 |
仮想CPUに対応しているかどうかは以下のコマンドで確認できる。
対応CPUのはずなのに、有効じゃない場合はBIOSの設定を見直す。
$ cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx smx est tm2 cx16 xtpr lahf_lm
$ cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy smv extapic cr8_legacy
OSの設定
OSのインストール
CentOS6.4をminimalでインストール
※他のソフトウェアをインストールして、作業を行うと、
不具合が発生する可能性があるので、気をつけること
ローカルのNICに3つのIPアドレスを設定する。
$ cat <<_EOF_ > /etc/sysconfig/network-scripts/ifcfg-eth0
> TYPE=Ethernet
> DEVICE=eth0
> BOOTPROTO=static
> IPADDR=192.168.0.165
> NETMASK=255.255.255.0
> ONBOOT=yes
> _EOF_
$ cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:0}
$ sed -i 's/DEVICE=eth0/DEVICE=eth0:0/g' /etc/sysconfig/network-scripts/ifcfg-eth0:0
$ sed -i 's/BOOTPROTO=static/BOOTPROTO=none/g' /etc/sysconfig/network-scripts/ifcfg-eth0:0
$ sed -i 's/IPADDR=192.168.0.165/IPADDR=192.168.0.166/g' /etc/sysconfig/network-scripts/ifcfg-eth0:0
$ cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:1}
$ sed -i 's/DEVICE=eth0/DEVICE=eth0:1/g' /etc/sysconfig/network-scripts/ifcfg-eth0:1
$ sed -i 's/BOOTPROTO=static/BOOTPROTO=none/g' /etc/sysconfig/network-scripts/ifcfg-eth0:1
$ sed -i 's/IPADDR=192.168.0.165/IPADDR=192.168.0.167/g' /etc/sysconfig/network-scripts/ifcfg-eth0:1
ネットワークの設定の確認
$ ifconfig
eth0 Link encap:Ethernet HWaddr BC:5F:F4:1E:80:11
inet addr:192.168.0.165 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: 2408:49:9fff:b09:be5f:f4ff:fe1e:8011/64 Scope:Global
inet6 addr: fe80::be5f:f4ff:fe1e:8011/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:561 errors:0 dropped:0 overruns:0 frame:0
TX packets:652 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:83658 (81.6 KiB) TX bytes:74339 (72.5 KiB)
eth0:0 Link encap:Ethernet HWaddr BC:5F:F4:1E:80:11
inet addr:192.168.0.166 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:1 Link encap:Ethernet HWaddr BC:5F:F4:1E:80:11
inet addr:192.168.0.167 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2276 (2.2 KiB) TX bytes:2276 (2.2 KiB)
hostsの設定
$ echo "192.168.0.165 manage01.local" >> /etc/hosts
$ echo "192.168.0.166 nfs01.local" >> /etc/hosts
$ echo "192.168.0.167 kvm01.local" >> /etc/hosts
ホスト/ハイパーバイザー(KVM)のインストール
ntpの設定を行う
$ yum install -y ntp
$ sed -i 's/server 0.centos.pool.ntp.org/#server 0.centos.pool.ntp.org/g' /etc/ntp.conf
$ sed -i 's/server 1.centos.pool.ntp.org/#server 1.centos.pool.ntp.org/g' /etc/ntp.conf
$ sed -i 's/server 2.centos.pool.ntp.org/#server 2.centos.pool.ntp.org/g' /etc/ntp.conf
$ sed -i '/#server 2.centos.pool.ntp.org/a\server ats1.e-timing.ne.jp iburst' /etc/ntp.conf
$ sed -i '/#server 2.centos.pool.ntp.org/a\server ntp3.jst.mfeed.ad.jp iburst' /etc/ntp.conf
$ sed -i '/#server 2.centos.pool.ntp.org/a\server ntp2.jst.mfeed.ad.jp iburst' /etc/ntp.conf
$ sed -i '/#server 2.centos.pool.ntp.org/a\server ntp1.jst.mfeed.ad.jp iburst' /etc/ntp.conf
$ sed -i '/#server 2.centos.pool.ntp.org/a\server ntp.nict.jp iburst' /etc/ntp.conf
$ ntpdate -b ntp.nict.jp
$ /etc/init.d/ntpd start
$ chkconfig ntpd on
ntpqコマンドで設定の確認
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+ntp-b2.nict.go. .NICT. 1 u 33 64 17 8.016 0.161 0.086
+ntp1.jst.mfeed. 172.29.2.50 2 u 29 64 17 4.603 0.311 0.137
-ntp2.jst.mfeed. 133.243.236.17 2 u 28 64 17 4.595 0.395 0.051
-ntp3.jst.mfeed. 172.29.3.60 2 u 30 64 17 4.701 0.462 0.068
*61-114-187-55.s .PPS. 1 u 26 64 17 6.369 0.148 0.173
ローカルFQDNの設定
$ hostname --fqdn
manage01.local
上記で、『hostname: 不明なホスト』となった場合、
$ sed -i 's/127.0.0.1 localhost/127.0.0.1 manage01.local localhost/g' /etc/hosts
$ sed -i 's/HOSTNAME=\+/HOSTNAME=manage01.local/g' /etc/sysconfig/network
$ sysctl kernel.hostname=manage01.local
$ sed -i '/kernel.shmall = 4294967296/a\\nkernel.hostname=manage01.local' /etc/sysctl.conf
※今回はmanage01.localを管理用FQDNとして利用している。
CloudStackエージェントのインストール
$ yum erase -y qemu-kvm
$ yum erase -y libvirt-java
$ cat <<_EOF_ > /etc/yum.repos.d/cloudstack.repo
> [cloudstack]
> name=cloudstack
> baseurl=http://cloudstack.apt-get.eu/rhel/4.0/
> enabled=1
> gpgcheck=1
_EOF_
$ yum install -y --nogpgcheck cloud-agent
※最新の情報はこちらを参照
libvirtdの設定
$ sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
$ sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
$ sed -i 's/#tcp_port = "16509"/tcp_port = "16509"/g' /etc/libvirt/libvirtd.conf
$ sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
$ sed -i 's/#mdns_adv = 1/mdns_adv = 0/g' /etc/libvirt/libvirtd.conf
$ sed -i 's/#LIBVIRTD_ARGS="--listen"/LIBVIRTD_ARGS="--listen"/g' /etc/sysconfig/libvirtd
$ /etc/init.d/libvirtd restart
SElinuxの設定
$ sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
$ setenforce permissive
ファイアーウォールの設定
$ iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ iptables -I INPUT -p tcp -m tcp --dport 1798 -j ACCEPT
$ iptables -I INPUT -p tcp -m tcp --dport 16509 -j ACCEPT
$ iptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT
$ iptables -I INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPT
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
$ /etc/init.d/iptables status
管理サーバーのインストール
$ yum install -y --nogpgcheck cloud-client
MySQL Serverの設定
$ yum install -y mysql-server
$ sed -i '/\[mysqld\]/a\binlog-format = ROW' /etc/my.cnf
$ sed -i '/\[mysqld\]/a\log-bin=mysql-bin' /etc/my.cnf
$ sed -i '/\[mysqld\]/a\max_connections=350' /etc/my.cnf
$ sed -i '/\[mysqld\]/a\innodb_lock_wait_timeout=600' /etc/my.cnf
$ sed -i '/\[mysqld\]/a\innodb_rollback_on_timeout=1' /etc/my.cnf
$ /etc/init.d/mysqld start
$ mysql_secure_installation
※『Y』、『N』で回答するものは、Disallow root login remotelyだけ『N』、それ以外は全て『Y』
※パスワードなどは環境に合わせて設定する。
外部MYSQLを利用した場合の設定の場合、以下を追加
$ iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
$ /etc/init.d/iptables status
$ cloud-setup-databases cloud:cloud_password@localhost --deploy-as=root:root_password
※cloud_passwordには今回作成するcloudデータベースのパスワードを設定する。
※root_passwordにはMySQL Serverの設定で設定したrootパスワードを設定する。
ストレージサーバの設定
NFSサーバの準備
$ yum -y install nfs-utils
$ mkdir -p /export/primary
$ mkdir -p /export/secondary
$ echo '/export *(rw,async,no_root_squash)' >> /etc/exports
$ exportfs -a
$ mkdir -p /mnt/secondary
$ sed -i 's/#LOCKD_TCPPORT=32803/LOCKD_TCPPORT=32803/g' /etc/sysconfig/nfs
$ sed -i 's/#MOUNTD_PORT=892/MOUNTD_PORT=892/g' /etc/sysconfig/nfs
$ sed -i 's/#RQUOTAD_PORT=875/RQUOTAD_PORT=875/g' /etc/sysconfig/nfs
$ sed -i 's/#STATD_PORT=662/STATD_PORT=662/g' /etc/sysconfig/nfs
$ sed -i 's/#STATD_OUTGOING_PORT=2020/STATD_OUTGOING_PORT=2020/g' /etc/sysconfig/nfs
ファイアーウォールの設定
$ iptables -A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT
$ iptables -A INPUT -m state --state NEW -p udp --dport 662 -j ACCEPT
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
$ /etc/init.d/iptables status
###NFSサーバの設定
$ sed -i 's/Domain = localdomain/Domain = nfs01.local/g' /etc/idmapd.conf
$ service rpcbind start
$ service nfs start
$ chkconfig nfs on
$ chkconfig rpcbind on
$ reboot
※今回はNFSサーバをnfs01.localとして設定している。
##SystemVM用のテンプレートを配置
$ mkdir /mnt/secondary
$ mount -t nfs nfs01.local:/export/secondary /mnt/secondary
$ /usr/lib64/cloud/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
$ umount /mnt/secondary
$ cloud-setup-management
以下にアクセスすると管理サーバのGUIが起動します。
http://192.168.0.165:8080/client/
(適正に設定されているかどうかは未検証。)
その後の設定はこちらを参照。
FAQ
ホストが追加できない。
ホストを追加する際に、『unable to add the host』と表示され、以下のようなエラーメッセージが表示された場合、ローカルのSSHサーバへのアクセスエラーです。SSHが指定したID/パスワードでログインできるか確認しましょう。特にポート番号変更、PermitRootLoginの設定を行っている場合、接続が適正に行えませんので、注意しましょう。
2013-04-23 18:53:48,323 WARN [kvm.discoverer.KvmServerDiscoverer]
(catalina-exec-9:null) can't setup agent, due to java.io.IOException:
There was a problem while connecting to 192.168.0.167:22 - There was a
problem while connecting to 192.168.0.167:22
以下のようなログが出力される場合は、
ManagementServer登録時に正しいIPアドレスが設定されておらず、
kvm01.localの追加するホストが管理サーバに接続をしようとしていません。
2013-04-19 17:55:45,606 INFO [utils.nio.NioClient]
(Agent-Selector:null) Connecting to localhost:8250
2013-04-19 17:55:45,607 ERROR [utils.nio.NioConnection]
(Agent-Selector:null) Unable to connect to remote
GlobalSettingのhost が localhostになっているのを確認しましょう。
管理サーバの適正なIPアドレスを入力して、管理サーバを再起動する。
$ /etc/init.d/cloud-management restart
Stopping cloud-management: [ OK ]
Starting cloud-management: [ OK ]
セットアップで躓いたら、他にも以下のログを参照すること。
/var/log/cloud/agent/agent.log
/var/log/cloud/agent/setup.log