連載最終回は、2015年2月時点でのOpenStackの最新版「Juno」のインストール手順を取り上げます。
RDOを使ったOpenStack Junoの構築
オープンソースのクラウド基盤としてOpenStackに注目が集まっています。OpenStackは、当初、NASAや米国の大手ホスティング企業であるRackspace社が取り組み、それにベンダー各社が追随した形で現在も開発が続いています。2015年4月にリリースが予定されている開発コードネーム「Kilo」の開発に貢献している企業の1位はHP、2位がRed Hat社であり、両社だけで36%に上ります。また、HP、Red Hat社だけでなく、SUSE CloudやCanonical社のUbuntu Serverのクラウド基盤もOpenStackがベースであり、主要なベンダーがOpenStackを使ったクラウド基盤を商用製品化しています。
図1:stackalytics.com では、OpenStackの開発に貢献している企業を知ることができる(クリックで拡大)
OpenStack JunoとHadoop
2015年2月現在、OpenStackの最新版は、コードネーム「Juno」です。このJunoでは、Hadoopの配備が新機能としてあげられます。OpenStackにおけるHadoopの配備は、Saharaプロジェクトと呼ばれています。まだ発展途上ですが、Hadoopクラスタをクラウドサービスとして展開したいというニーズが高まっており、OpenStackに取り込まれることになりました。2014年4月に米国サンフランシスコで開催されたRed Hat Summit 2014において、既にOpenStackによるHadoopの配備がデモンストレーションされています。
Saharaプロジェクトに関する情報
https://wiki.openstack.org/wiki/Sahara
OpenStack JunoをCentOS 7にインストールする
本連載では、2015年2月時点でOpenStackの最新版である「Juno」をCentOS 7にインストールする手順を紹介します。OpenStackは、Red Hat社が主導しているRDOと呼ばれるコミュニティの成果物であるpackstackを使うと、RHEL互換OSであるCentOS上にOpenStackのテスト環境を簡単に構築することができます。CentOS 7がリリースされた当初は、OSの仕組みが大きく変わったことが影響し、packstackでのインストールでいくつかの問題がありましたが、現時点では、致命的な問題が解消されてきており、比較的簡単に構築ができるようになっています。以下では、注意点も交えながら、packstackを使ったインストール手順を紹介します。まず、OpenStackを構築する際に注意すべき点は、物理メモリの容量があげられます。必要な最低限のメモリ容量については、以下のOpenStackのドキュメントが参考になりますので、必ず参照してください。
OpenStack Installation Guide for Red Hat Enterprise Linux 7, CentOS 7, and Fedora 20 - juno
http://docs.openstack.org/juno/install-guide/install/yum/content/ch_overview.html#example-architecture-with-neutron-networking-hw
上記URLには、最小メモリ要件が記載されていますが、もしこのメモリ容量よりも下回る環境でインストールを行うと、メモリ不足に陥り、packstackによるOpenStackの構築処理が停止するか、挙動が不安定になります。とくにCentOS 7の場合は、OSの安定稼働に必要なメモリ容量も従来のCentOSに比べて大きくなっていますので、注意が必要です。本番環境では、サービス毎に物理サーバーを複数台に分け、サービスの高可用性を考慮してOpenStackを構築する必要がありますが、今回、RDOで提供されているpackstackを使うため、OpenStackを構築する物理サーバーは1台です。まず、物理サーバーにCentOS 7をインストールします。構築するサーバーがプロキシ経由でインターネットにアクセスする場合は、yum.confファイルを編集します。
Packstackでのインストールでは、プロキシーサーバーを経由した場合のインストールが完了できない問題に対処する必要がありますので、それも踏まえて以後説明します。packstackをインストールする前に、CentOS 7を最新にアップデートします。
次にRDOのコミュニティが提供しているリポジトリをインストールします。
リポジトリを登録したら、packstackをインストールします。
1 | # yum install -y openstack-packstack |
仮想化関連のパッケージをインストールしておきます。
1 | # yum install -y qemu-kvm |
SSHの公開鍵を生成します。
プロキシーサーバーを経由してpackstackを使ったOpenStack環境を構築する場合、ディスクイメージ等を管理するGlanceと呼ばれるプログラムがデモ用のOSイメージファイルの入手に失敗します。これを回避するため、イメージファイルをダウンロードするためのWebサーバーを別途1台用意します。WebサーバーであればOSのバージョンは問いません。Webサーバー上にデモ用のOSイメージファイル「cirros-0.3.2-x86_64-disk.img」をダウンロードします。今回は、仮に上記のWebサーバーのIPアドレスを172.16.31.8/16とすると、「http://172.16.31.8/cirros-0.3.2-x86_64-disk.img」でアクセスできるようにWebサーバーを構築し、イメージを配置しておきます。以下は、CentOS 7のWebサーバーでの設定例です。
1 | websvr # cd /var/www/html/ |
4 | -rw-r--r-- 1 root root 13167616 Mar 18 2014 cirros-0.3.2-x86_64-disk.img |
5 | websvr # systemctl start httpd |
6 | websvr # systemctl stop firewalld |
再度、packstackをインストールしたサーバーに戻って作業を続行します。HTTPのアクセスをプロキシーサーバー経由で行う場合は、$HOME/.bash_profileファイルにプロキシのための環境変数を設定しておきます。ここで、no_proxyを適切に設定します。この設定を誤ると後述のpackstackによるOpenStackの構築が正常に完了できません。
1 | # vi /root/.bash_profile |
5 | export no_proxy="localhost,127.0.0.1,172.16.31.71,172.16.31.8" |
8 | # source /root/.bash_profile |
上記では、no_proxyにローカルホスト(127.0.0.1)とOpenStackを構築するサーバー(172.16.31.71)、別途構築したWebサーバー(172.16.31.8)を登録しています。環境変数が適切に設定されているかを確認します。
4 | no_proxy=localhost,127.0.0.1,172.16.31.71,172.16.31.8 |
OpenStackのパラメータに関する初期設定の雛型ファイル(アンサーファイルと言います)をpackstackコマンドで生成します。今回、初期設定ファイルの名前は、param.txtとしました。
1 | # packstack --gen-answer=param.txt |
アンサーファイルをエディタで開いてパラメータを設定します。
03 | CONFIG_NTP_SERVERS=172.16.31.8 (1) |
05 | CONFIG_CINDER_VOLUMES_SIZE=20G (2) |
07 | CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan,flat (3) |
- OpenStackが接続するNTPサーバーを指定
- ブロックストレージの容量を指定
- 仮想ネットワーク用のドライバを指定
- Webサーバーを指定
アンサーファイルをpackstackにロードし、OpenStackの構築を開始します。
01 | # packstack --answer-file=param.txt |
02 | Welcome to the Packstack setup utility |
04 | The installation log file is available at: /var/tmp/packstack/20150101-213846-QQ23jZ/openstack-setup.log |
08 | Setting up ssh keys [ DONE ] |
09 | Discovering hosts' details [ DONE ] |
10 | Adding pre install manifest entries [ DONE ] |
11 | Installing time synchronization via NTP [ DONE ] |
12 | Preparing servers [ DONE ] |
13 | Adding AMQP manifest entries [ DONE ] |
14 | Adding MariaDB manifest entries [ DONE ] |
15 | Adding Keystone manifest entries [ DONE ] |
18 | 172.16.31.73_nagios_nrpe.pp: [ DONE ] |
19 | Applying 172.16.31.73_postscript.pp |
20 | 172.16.31.73_postscript.pp: [ DONE ] |
21 | Applying Puppet manifests [ DONE ] |
24 | **** Installation completed successfully ****** (1) |
27 | Additional information: |
28 | * Warning: NetworkManager is active on 172.16.31.73. OpenStack networking currently does not work on systems that have the Network Manager service enabled. |
29 | * File /root/keystonerc_admin has been created on OpenStack client host 172.16.31.73. To use the command line tools you need to source the file. |
31 | Please, find your login credentials stored in the keystonerc_admin in your home directory. |
33 | * The installation log file is available at: /var/tmp/packstack/20150108-093956-ElAfcp/openstack-setup.log |
34 | * The generated manifests are available at: /var/tmp/packstack/20150108-093956-ElAfcp/manifests |
- 正常終了した場合に表示される
構築が正常に完了すると、上記のように「 **** Installation completed successfully ******」と表示されます。
【注意】NTPサーバーにおけるエラーメッセージ
packstackは、アンサーファイル内の「CONFIG_NTP_SERVERS=」で指定したNTPサーバーへの接続に失敗するとインストールが中断されます。また、「CONFIG_NTP_SERVERS=」で指定したNTPサーバーが、インターネット上にある上位のNTPサーバーに適切に接続できないと、NTPによる時刻同期が適切に行われません。代表的なエラーメッセージとしては、「no server suitable for synchronization found」と表示され、NTPサーバー自体の設定が正しくても、上位にあるインターネット上のNTPサーバーと時刻同期ができない場合が相当します。OpenStack側で指定したNTPサーバーが、上位にあるインターネット上のNTPサーバーと時刻同期ができる必要がありますが、企業内におけるプロキシーサーバーやデータセンターにおける構築スケジュールの関係上、NTPサーバーが上位のインターネット上のNTPサーバーと接続できない場合も少なくありません。そこで、OpenStackの接続先となるNTPサーバーが、上位にあるインターネット上のNTPサーバーと同期できない場合、OpenStackの接続先のNTPサーバーのリアルタイムクロック(RTC)を使用することで代用が可能です。この設定は、OpenStackの接続先となるNTPサーバーのntp.confファイルに設定を施します。以下は、NTPサーバー上での設定例です。
1 | ntpsvr01 # vi /etc/ntp.conf |
3 | restrict 172.16.0.0 mask 255.255.0.0 notrap (1) |
- NTPの接続元のネットワークを設定
NTPサーバー上でntp.confファイルの設定を変更したら、NTPサービスを再起動します。NTPの設定において、通常は、「server」行で接続先のNTPサーバーを指定しますが、「server 127.127.1.0」を指定すると、上位にあるインターネット上のNTPサーバーに接続できない場合、自身のRTCを使用します。インターネット上のNTPサーバーを利用できない場合に有用ですが、RTCが提供する時刻は精度が低いため、あくまでテスト環境などでの一時的な利用に留めておいて下さい。HAクラスタ、マスタースレーブ方式のデータベースサーバー、Hadoopや分散ストレージ基盤などの複数のサーバー間で同期を取るようなシステムにおいては、時刻同期が適切に行われていないと動作が不安定になりますので、本番環境においては、RTCではなく必ずNTPサーバーによる時刻同期を行って下さい。