LoginSignup
33
36

More than 5 years have passed since last update.

CentOS6.4+KVMで作るCloudStack環境

Last updated at Posted at 2013-04-20

 社内の仮想環境基盤として、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の設定を見直す。

IntelCPUの場合、flagsの中にvmxが表示される
$ 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
AMDCPUの場合、flagsの中にsmvが表示される
$ 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でネットワーク設定の確認
$ 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の設定

hostsに管理サーバー、ストレージサーバー、仮想環境用のhostを設定
$ 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の設定を行う

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
$ 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を確認
$ hostname --fqdn
manage01.local

上記で、『hostname: 不明なホスト』となった場合、

/etc/hostsと/etc/sysconfig/networkを書き換え、FQDNを設定する。
$ 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エージェントのインストール

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の設定

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の設定

SElinuxの設定
$ sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
$ setenforce permissive

ファイアーウォールの設定

iptableの設定を行う
$ 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
iptableの設定の確認を行う
$ /etc/init.d/iptables status

管理サーバーのインストール

cloud-clientのインストール
$ yum install -y --nogpgcheck cloud-client

MySQL Serverの設定

MySQLServerの設定
$ 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
MySQLServerのセキュリティ設定
$ mysql_secure_installation

※『Y』、『N』で回答するものは、Disallow root login remotelyだけ『N』、それ以外は全て『Y』
※パスワードなどは環境に合わせて設定する。

外部MYSQLを利用した場合の設定の場合、以下を追加

iptableの設定を行う
$ iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ /etc/init.d/iptables save
$ /etc/init.d/iptables restart
iptableの設定の確認を行う
$ /etc/init.d/iptables status
CloudStackのデータベースのデータインポート
$ 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
iptableの設定の確認を行う
$ /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
CloudStackサーバの設定と起動
$ cloud-setup-management

以下にアクセスすると管理サーバのGUIが起動します。
http://192.168.0.165:8080/client/
(適正に設定されているかどうかは未検証。)

その後の設定はこちらを参照。

FAQ

ホストが追加できない。

ホストを追加する際に、『unable to add the host』と表示され、以下のようなエラーメッセージが表示された場合、ローカルのSSHサーバへのアクセスエラーです。SSHが指定したID/パスワードでログインできるか確認しましょう。特にポート番号変更、PermitRootLoginの設定を行っている場合、接続が適正に行えませんので、注意しましょう。

/var/log/cloud/management/management-server.log
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の追加するホストが管理サーバに接続をしようとしていません。

/var/log/cloud/agent/agent.log
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アドレスを入力して、管理サーバを再起動する。

/var/log/cloud/agent/agent.log
$ /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

参考資料

33
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36