2013/11/02 この記事の内容は古くなっている恐れがあります。複数ノード環境の構築手順については、こちらを参照ください。
「RDOデモ環境を確実に構築する手順」で紹介したdemostackを拡張して、複数ノード構成に対応しました。最初に、Nova Compute以外のコントローラ機能をすべてインストールしたControllerノードを構築して、その後、必要に応じてComputeノードを追加していきます。冗長性などが問題にならないレベルであれば、そこそこ実用的な検証環境になるでしょう。
2013/07/03 セキュリティグループにルールを追加する際、ICMPのType/Code指定でのルールが追加できないバグがあります。
一時的な回避策としては、次の手順でパッチを適用して、サーバを再起動してください。
# yum install -y patch # cd /tmp # wget https://bugzilla.redhat.com/attachment.cgi?id=765551 -O securitygroups_db.py.patch # cd /usr/lib/python2.*/site-packages/ # patch -p0 -b < /tmp/securitygroups_db.py.patch
構築する環境の全体像
「demostack00」がコントローラ機能をすべてインストールしたControllerノードで、「demostack01」以降がComputeノードになります。各サーバ共通に「eth0」をパブリックネットワークに接続してIPアドレスをアサインします。これは、管理接続(HorizonのダッシュボードやSSHログイン)とコンポーネント間の通信に使用します。
「demostack00」は、「eth1」「eth2」をパブリックネットワークとプライベートネットワークに接続して、この間のルーティングを行います。一方、Computeノード群は、「eth1」をプライベートネットワークに接続します。Computeノードで起動するVMインスタンスは、プライベートネットワークから「demostack00」を経由してパブリックネットワークに接続します。「br-ex」「br-priv」「br-int」は内部的に構成されるOpen vSwitchです。「eth0」などのNICデバイス名と各サーバの管理接続用IPアドレスは、環境に応じて読み替えてください。
パブリックネットワークについて、下記の情報を事前に決定してください。
項目 | 値の例 |
---|---|
サブネット | 10.0.1.0/24 |
ゲートウェイ | 10.0.1.254 |
ControllerノードのIPアドレス | 10.0.1.200 |
ComputeノードのIPアドレス | 10.0.1.201〜10.0.1.250 |
DNSサーバ | 8.8.8.8 |
IPアドレスプール | 10.0.1.100〜10.0.1.199 |
「IPアドレスプール」というのは、Floating IPや仮想ルータの外部IPアドレスなど、OpenStackが自由に利用できるIPアドレスの範囲です。パブリックネットワーク上で未使用のIPアドレスの範囲を指定してください。
仮想ネットワークについては、ほぼ決め打ちで、次のような構成になります。
---------------- パブリックネットワーク | | [demo_router] : 仮想ルータ | | | ---------------------- : プライベートネットワーク (2) | private02 192.168.102.0/24 | -------------------- : プライベートネットワーク (1) private01 192.168.101.0/24
プロジェクト(テナント)「demo」に対して、上記の2つのプライベートネットワークが用意されます。VMインスタンスは、どちらかのプライベートネットワークに接続します。プライベートネットワークの数やサブネットは、オプションで変更することは可能です。
Controllerノードの構築
はじめに、Controllerノードを構築します。
Fedora18のインストール
まずは、サーバにFedora18をインストールします。ソフトウェアの選択では、「最小限のインストール」+ 「標準アドオン」を選びます。
ネットワークの設定では、「eth0」にIPアドレスを設定して、「eth1」と「eth2」は「オフ」の状態にします。この画面でホスト名を設定するのも忘れないでください。
ディスクパーティションの構成はややトリッキーです。結論としては、下記のような構成にしたいのですが、インストーラーからは次のような手順になります。
パーティション | サイズ | 用途 |
---|---|---|
/dev/sda1 | 500MB | /boot |
/dev/sda2 | 適宜 | Swap |
/dev/sda3 | 50GB | / |
/dev/sda4 | 余り全部 | Cinder Volume |
インストール先のディスクを選択して続行すると「インストールオプション」のポップアップがでるので、「パーティションスキーマの設定」→「パーティションタイプ」→「標準パーティション」を選んで、「代わりにディスクの・・・・」にチェックを入れます。
パーティション設定の画面で「ここをクリックすると自動的・・・」を押します。
下図のようなパーティションが構成されますが、「/home」が余分なので削除します。(画面下の「-」ボタンで削除します。)
これで、「/dev/sda1〜/dev/sda3」からなるパーティションが構成できました。「/dev/sda4」は、インストール完了後に手動で作成します。
起動したら、ネットワークの構成状況を確認します。eth0はIPアドレスがアサインされており、eth1とeth2は「UP」だけどIPアドレスは振られていない状態になっています。ディスクパーティションは、次のようにsda3まで構成されているので、fdiskでsda4を追加します。
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 149G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 7.9G 0 part [SWAP] └─sda3 8:3 0 50G 0 part /
# fdisk /dev/sda コマンド (m でヘルプ): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p 選択したパーティション 4 最初 sector (122316800-312499999, 初期値 122316800): 初期値 122316800 を使います Last sector, +sectors or +size{K,M,G} (122316800-312499999, 初期値 312499999): 初期値 312499999 を使います Partition 4 of type Linux and of size 90.7 GiB is set コマンド (m でヘルプ): wq
この後で、Cinder Volume用のVGを作るので、lvm2パッケージを追加します。ついでに全パッケージをアップデートして、再起動します。
# yum install -y lvm2 # yum -y update # reboot
再起動したら、sda4を使って、VG「cinder-volumes」を用意します。
# pvcreate /dev/sda4 # vgcreate cinder-volumes /dev/sda4
RDOのインストール
事前にAnswerファイルを作成する必要がありますが、demostackでAnswerファイル生成用のスクリプトを用意したので、そちらを利用します。はじめに、Packstackをインストールした上で、demostackをダウンロードします。
# yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly.rpm # yum install -y openstack-packstack git # cd /root # git clone https://github.com/enakai00/demostack.git # cd demostack # git checkout f18-grizzly-mn
Controllerノード用のAnswerファイルを生成します。
# ./genans.sh controller
生成したAnswerファイルで、Packstackを実行します。
※冒頭の2行はこちらのバグに対するワークアラウンドです。
# yum install -y qpid-cpp-server-ha # sed -i.bak 's/cluster-mechanism/ha-mechanism/' /usr/lib/python2.*/site-packages/packstack/puppet/modules/qpid/templates/qpidd.conf.erb # setenforce 0 # packstack --answer-file=controller.txt Welcome to Installer setup utility Packstack changed given value to required value /root/.ssh/id_rsa.pub Installing: Clean Up... [ DONE ] Setting up ssh keys...root@10.0.1.200's password: <--- rootパスワードを入力します。 (以下省略)
続いて、demostackで追加設定を行います。スクリプト「setup.sh」の先頭部分にあるパラメータを編集します。
#### extnic="eth1" # パブリックネットワーク接続用NIC intnic="eth2" # プライベートネットワーク接続用NIC public="10.0.1.0/24" # パブリックネットワークのサブネット gateway="10.0.1.254" # パブリックネットワークのゲートウェイ pool=("10.0.1.100" "10.0.1.199") # IPアドレスプール nameserver="8.8.8.8" # DNSサーバ private=("192.168.101.0/24" "192.168.102.0/24") # プライベートネットワークのサブネット ####
これらは、冒頭の表にまとめた情報に対応します。特にパブリックネットワークの構成は環境によって異なると思いますので、適宜修正してください。プライベートネットワークについては、下記のように3個以上に増やすことも可能です。
private=("192.168.101.0/24" "192.168.102.0/24" "192.168.103.0/24")
このスクリプトを「controller」オプションで実行します。成功メッセージが出たら、サーバを再起動してください。
# ./setup.sh controller (中略) Done. Now you need to reboot the server. # reboot
これで、Controllerノードの構築は完了です。続いて、Computeノードを追加する前に、先に、デモ用のプロジェクトと仮想ネットワークの構成を行なっておきます。
仮想ネットワークとプロジェクトの構成
Controllerノードが起動したら、今度は「configproject」オプションで実行します。
# cd /root/demostack # ./setup.sh configproject (中略) Done.
これで仮想ネットワークが構成されました。その他には、プロジェクト「demo」とそのユーザもできています。
ユーザ | ロール | パスワード |
---|---|---|
demo_admin | 管理者 | passw0rd |
demo_user | 一般ユーザ | passw0rd |
WebブラウザからサーバのIPアドレスを指定して接続すると、Horizonのダッシュボードが表示されるので「demo_user」でログインしてみましょう。
ここでは、VMインスタンスのイメージを用意しておきます。「イメージとスナップショット」の画面で「イメージの作成」のボタンを押して、ポップアップがでたら、下記のように入力します。「イメージの場所」に「http://localhost/images/Fedora18-cloud-init.qcow2」を入力すると、demostackが事前に用意したイメージがインポートされて使用可能になります。
Computeノードの構築
続いて、Computeノードを追加します。複数のComputeノードがある場合は、この手順を繰り返して下さい。後から、必要に応じてComputeノードを追加することも可能です。
Fedora18のインストール
サーバにFedora18をインストールします。Controllerノードと同じく、ソフトウェアの選択では、「最小限のインストール」+ 「標準アドオン」を選びます。ネットワークの設定では、「eth0」にIPアドレスを設定して、「eth1」は「オフ」の状態にします。この画面でホスト名を設定するのも忘れないでください。
ディスクパーティションの構成は、下記の構成にします。インストーラーからは次のような手順になります。
パーティション | サイズ | 用途 |
---|---|---|
/dev/sda1 | 500MB | /boot |
/dev/sda2 | 適宜 | Swap |
/dev/sda3 | 余り全部 | / |
インストール先のディスクを選択して続行すると「インストールオプション」のポップアップがでるので、「パーティションスキーマの設定」→「パーティションタイプ」→「標準パーティション」を選んで、「代わりにディスクの・・・・」にチェックを入れます。
パーティション設定の画面で「ここをクリックすると自動的・・・」を押します。
下図のようなパーティションが構成されますが、「/home」が余分なので削除します。(画面下の「-」ボタンで削除します。)
この後、「/」の容量を最大限に拡張します。上図の「Root」を選択して、画面右の「希望する容量」に極端に大きな値を入力して、「変更を適用」をクリックすると、最大限まで拡張されます。
インストールが完了したら、ネットワークの構成状況を確認します。eth0はIPアドレスがアサインされており、eth1は「UP」だけどIPアドレスは振られていない状態になっています。ここで、パッケージのアップデートを行なって、RDOのレポジトリを登録します。また、SELinuxをPermissiveモードにしておきます。
# yum -y update # yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly.rpm # setenforce 0
RDOのインストール
この手順は、Controllerノード(demostack00)で実行するので注意してください。はじめに、Computeノード用のAnswerファイルを生成します。Controllerノード構築時に使ったAnswerファイル(controller.txt)が残っている必要があるので注意してください。
# cd /root/demostack # ./genans.sh compute 10.0.1.201 # 第2引数はComputeノードのIPアドレスを指定
生成したAnswerファイルで、Packstackを実行します。
# packstack --answer-file=compute.txt Welcome to Installer setup utility Packstack changed given value to required value /root/.ssh/id_rsa.pub Installing: Clean Up... [ DONE ] Setting up ssh keys...root@10.0.1.201's password: <--- rootパスワードを入力します。 (以下省略)
少しイケテナイ仕様ですが、この時、Controllerノードの構成に不要な変更が加えられてしまいます。(また、既知の問題により、このタイミングでqpiddが停止することがあります。)下記のコマンドを実行することで回復します。最後に再起動を要求メッセージが出ますが、再起動は不要です。
# ./setup.sh controller (中略) Done. Now you need to reboot the server.
続いて、demostackで追加設定を行います。これは、Computeノードの方で実行します。
まず、Computeノードにdemostackをダウンロードします。Controllerノードでダウンロードしたものをrsyncでコピーするとよいでしょう。
# cd /root # rsync -av root@10.0.1.200:/root/demostack /root/ # cd demostack
スクリプト「setup.sh」の先頭部分にある下記のパラメータを編集します。「extnic」は「none」にしておきます。
#### extnic="none" # パブリックネットワーク接続用NIC intnic="eth1" # プライベートネットワーク接続用NIC
このスクリプトを「compute」オプションで実行します。成功メッセージが出たら、サーバを再起動してください。
# ./setup.sh compute (中略) Done. Now you need to reboot the server. # reboot
これで、Computeノードの構築は完了です。