2013年3月10日日曜日

CloudStackでプライベートクラウドを構築してみた。

CloudStackでプライベートクラウドを構築してみた。
まだ全然よくわかっていないですが・・・

まずは、構築前に参考書籍紹介
今回構築するネットワーク構成は以下のとおり。
  • ManagedServer
    • 参考書籍通り、NFSサーバと兼用する。
  • ネットワーク
    • 基本ゾーンで構築。
    • ただし、公開用ネットワークと管理、NFS用のネットワークは分離する。
    • 本当はグローバルIPな環境下でないといけないのだが、一般家庭にそんなものはないので、ルータ配下で構築を行う。
    • したがって、DNSやゲートウエイの設定をルータのIPに設定している。
      (192.168.24.1、192.168.0.1が各ネットワークルータのIP)
ManagedServer構築

  1. OS:CentOS6 (64bit)を最小インストール。
  2. ホスト名、ネットワーク回り設定。
    (ホスト名がFQDNで解決できないといけないらしいので、hostname --fqdnで完全修飾ホスト名が返ってこない場合は、hostsファイルを設定してください。)
  3. SELinuxを無効に設定
  4. IPV6を無効に設定
  5. アップデート
  6. 時刻同期の為、ntpサーバをインストールします。
    (何らかの形で時刻同期が取れれば問題ないと思います。)
  7. yum -y install ntp
  8. 最寄りのntpサーバを/etc/ntp/confに登録。
  9. 起動&自動起動設定
  10. service ntpd start
    chkconfig ntpd on
  11. CloudStack管理サーバをインストールします。
    まずは、/etc/yum.repos.d/cloudstack.repoというファイルを作成します。
  12. [cloudstack]
    name=cloudstack
    baseurl=http://cloudstack.apt-get.eu/rhel/4.1/
    enabled=1
    gpgcheck=0
    
  13. 管理サーバをインストールします。
  14. yum -y install cloud-client
  15. vhd-utilをダウンロードし、指定のディレクトリに展開します。
    (KVM環境の時に必要なのかは不明だが、一応入れておく)
  16. wget http://download.cloud.com.s3.amazonaws.com/tools/vhd-util
    cp vhd-util /usr/share/cloudstack-common/scripts/vm/hypervisor/xenserver
  17. MySQLサーバのインストール
    yum -y install mysql-server
    /etc/my.confの[mysql]セクションのdatadir行の下に以下追加
    innodb_rollback_on_timeout=1
    innodb_lock_wait_timeout=600
    max_connections=350
    log-bin=msql-bin
    binlog-format = 'ROW'
  18. 起動&自動起動設定
  19. service mysqld start
    chkconfig mysqld on
  20. データベースセキュリティの設定
  21. mysql_secure_installationを実行。 Disallow root login remotely以外を全てyで答える。
     最初にパスワードを聞かれるが、空エンターすることで、 新しいパスワードの設定を行う。
  22. データベース作成&初期データ投入
  23. cloudstack-setup-databases cloud:<ユーザcloudに対する設定するパスワード>@localhost --deploy-as=root:<さっき設定したrootのパスワード>
  24. ファイヤーウォール設定
  25. cloudstack-setup-managementを実行
  1. NFSサーバの構築
  2. (今回はManagedServer上に構築する。独立させてもOK)
    プライマリストレージとセカンダリストレージ用の共有ディレクトリを作成。
    mkdir -p /export/primary
    mkdir -p /export/secondary
    上記ディレクトリに対し、NFSでアクセスするためのアクセス制限を設定する。/etc/exportsファイルに以下の内容を記述。
    /export *(rw,async,no_root_squash)
  3. exportディレクトリをエクスポートします。
  4. exportfs -a
  5. NFSの設定
  6. /etc/sysconfig/nfsファイルより、以下の項目のコメントを外します。
    LOCKD_TCPPORT=32803
    LOCKD_UDPPORT=32769
    MOUNTD_PORT=892
    STATD_PORT=662
    STATD_OUTGOING_PORT=2020
    RQUOTAD_PORT=875
  7. 自動起動設定
  8. chkconfig nfs on
  9. ファイヤーウォールの設定
  10. /etc/sysconfig/iptablesファイルのINPUTチェーンに以下追記します。
    -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
  11. ここでいったんリブートします。
  12. KVMのテンプレートをDLして共有に展開します。
  13. /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm
    
    管理サーバのインストールは以上です。

KVMサーバ構築

  1. OS:CentOS6 (64bit)を最小インストール。
  2. ホスト名、ネットワーク回り設定。
    (ホスト名がFQDNで解決できないといけないらしいので、hostname --fqdnで完全修飾ホスト名が返ってこない場合は、hostsファイルを設定してください。)
  3. SELinuxを無効に設定
  4. IPV6を無効に設定
  5. アップデート
  6. 時刻同期の為、ntpサーバをインストールします。
    (何らかの形で時刻同期が取れれば問題ないと思います。)
  7. yum -y install ntp
  8. 最寄りのntpサーバを/etc/ntp/confに登録。
  9. 起動&自動起動設定
  10. service ntpd start
    chkconfig ntpd on
  11. CloudStackエージェントをインストールします。
    まずは、/etc/yum.repos.d/cloudstack.repoというファイルを作成します。
  12. [cloudstack]
    name=cloudstack
    baseurl=http://cloudstack.apt-get.eu/rhel/4.1/
    enabled=1
    gpgcheck=0
    
  13. CloudStackエージェントをインストールします。
  14. yum -y install cloud-agent
  15. libvirtの設定
  16. /etc/libvirt/libvirtd.confのパラメタを以下のように書き換えます。
    listen_tls = 0
    listen_tcp = 1
    tcp_port = 16059
    auth_tcp = "none"
    mdns_adv = 0
    
    /etc/sysconfig/libvirtdのパラメタを以下のように書き換えます。
    LIBVIRTD_ARGS="--listen" #コメントを外し有効化する
    /etc/libvirt/qemu.confのパラメタを以下のように書き換えます。
    vnc_listem = "0.0.0.0" #コメントを外し有効化する
    libvirtを再起動します。
    service libvirtd restart
  17. 管理用、パブリック両ネットワークに対し、ブリッジを作成する。
  18. 以下参考例 (管理ネットワーク:eth0パブリックネットワーク:eth1)
    /etc/sysconfig/network-script/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=none
    NM_CONTROLLED=yes
    ONBOOT=yes
    TYPE=Ethernet
    IPADDR=192.168.0.108
    NETMASK=255.255.255.0
    IPV6INIT=no
    USERCTL=no
    GATEWAY=192.168.0.1
    DNS1=192.168.0.1
    BRIDGE=cloudbr0
    /etc/sysconfig/network-script/ifcfg-eth1
    DEVICE=eth1
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Ethernet
    IPADDR=192.168.24.7
    NETMASK=255.255.255.0
    GATEWAY=192.168.24.1
    DNS1=192.168.24.1
    IPV6INIT=no
    USERCTL=no
    BRIDGE=cloudbr1
    
    /etc/sysconfig/network-script/ifcfg-cloudbr0
    DEVICE=cloudbr0
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Bridge
    IPADDR=192.168.0.108
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.1
    DNS1=192.168.0.1
    IPV6INIT=no
    USERCTL=no
    
    /etc/sysconfig/network-script/ifcfg-eth1
    DEVICE=cloudbr1
    BOOTPROTO=none
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Bridge
    IPADDR=192.168.24.7
    NETMASK=255.255.255.0
    GATEWAY=192.168.24.1
    DNS1=192.168.24.1
    IPV6INIT=no
    USERCTL=no
    
  19. 設定したらネットワーク再起動
  20. service network restart
  21. ファイヤーウォールの設定
  22. /etc/sysconfig/iptablesのINPUTチェーンに以下追記する
    -A INPUT -p tcp -m tcp --dport 1798 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 16509 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 49152:49216 -j ACCEPT
    
    セットアップ終了。
基本ゾーンの設定
  1. http://管理サーバのIP:8080/clientを開く。
  2. (ID:admin PW:password)
    ウイザードが立ち上がるが、
    「CloudStackを使用したことがるので、このガイドをスキップする」 のボタンをクリック。

     管理インターフェースが起動します (一般アラートは今のところ無視してOK)
  3. ゾーンの設定
      左のメニューのインフラストラクチャをクリック ゾーンのすべて表示をクリック。

  4. 右上にあるゾーンの追加をクリック

    基本が選択されているのを確認しNextをクリック
    ゾーンの名前、管理ネットワークのDNS、パブリックネットワークのDNSを設定。 ハイパーバイザはKVMを選択
    赤いストレージのアイコンを右側のPhysicalNetwork1へドラッグする。
    各アイコンのEditボタンを押して、トラフィックラベルを以下のように設定する。
    青アイコン:cloudbr0
    赤アイコン:cloudbr0
    緑アイコン:clodubr1
  5. ポッドの設定
  6. ここでは、管理ネットワークの中で、 ポッドに割り当てるIPの範囲を指定します。 (ここでは10個ほど予約)
  7. ゲストネットワークの設定
  8. 要するにパブリックネットワーク設定
  9. ストレージネットワークの設定
  10. よくわからないが、10個ほど予約 VLANのところは空白でOKらしい
  11. クラスタの登録
  12. KVMサーバを登録
  13. プライマリストレージの登録
  14. セカンダリストレージの登録
  15. 完了! (といいたいのだが、上手く動かなかった。)
    KVMサーバ上で、/etc/cgconfig.confに設定を追加し、マシンを再起動して上手くいった。
    参照先

  • はまりポイントその1 
    • VMに外部からSSHできない
      ネットワークのセキュリティレベルを変更。
      デフォルトでは外部接続NGになっている。
    • こんな感じで設定します。
  •  はまりポイントその2
    • MyISOの登録方法が分からん。
      テンプレートからISOの登録を行う。
      URLの箇所はhttpから始まるFQDNでないとダメらしい。 参照先より。
  • はまりポイントその3
    • システムVMへSSHができない。
      ポート番号が違うようです。
      ssh -i 169.254.xxx.xxx .ssh/id_rsa.cloud -p 3922 

      (169.254.xxx.xxx の箇所は、インフラストラクチャの中にある、 システムVMのリンクローカルIPアドレスを入れる)
  • はまりポイントその4
    • 仮想コンソールで192-168-24-101.realhostip.comのようなホスト名が解決できないといわれる。
      違うネットワークセグメントから接続するとなるようです。
      接続するクライアントPCのhostsに
      192.168.24.101 192-168-24-101.realhostip.com
      な感じて登録しましょう。
      (無論、DNSがあれば登録してもいい) 
  • はまりポイントその5 
    • windowsをインストールする際、システムコンソールで「japanese keybord」を 選択しているのに、「半角/全角」キーが押せない。
      どうも駄目のようです。インストールの際は、sキーを押して、その他のキーボードから 日本語キーボードを選択してください。
  • はまりポイントその6
    • windowsxpをインストールしたけど、ネットワークが繋がらないんだけど・・・
      どうもドライバが無いようです。現在調査中・・・
ちょっと余談
薄々感づいてはいましたが、仮想マシンの起動が遅い!
仮想マシンのHDDはNFS上に配置されているので、もしKVMサーバが1台しかないのなら、
KVMサーバ側にNFSサーバを兼用すれば、ネットワークがボトルネックにならなくて済むかも。
あと、ManagemedServer側は、NFSを分離できれば、単なるMySQLとTomCatなサーバのようです。
なので、推奨環境にあるような高スペックPCでなくても、仮想マシン数台の管理程度なら、ATOM程度で行けるんじゃないかなぁ。
(64botでないといけないのがイタしいですが・・)


2013/09/02
CloudStack4.1用に加筆修正。

1 件のコメント:

  1. 初めまして、
    その後、CloudStack+KVMのWindowsXPゲストのNICはどうなりましたか?

    確認したところ、WindowsXP(32bit)でのゲストOSのNICは、e1000のようでした。
    WindowsXPSP2付属ドライバではだめのようですが、IntelProSet XP 32bit 版をインストールするとゲストOSでEthernetドライバが正常稼働できましたので、コメントしておきます。

    確認方法:virsh edit 内部VM名

    ではでは

    返信削除