めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

RDOデモ環境を確実に構築する手順(複数ノード編)

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ノードの構築は完了です。