CentOS 7でのOpenStackの構築手順
この連載が、書籍『CentOS 7 実践ガイド』になりました!
IT技術者のための現場ノウハウ CentOS 7 実践ガイド
CentOS 7を取り巻く市場動向、サーバーシステムの選定、システム設計、構築手順など連載最終回は、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を使ったクラウド基盤を商用製品化しています。
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
上記URLには、最小メモリ要件が記載されていますが、もしこのメモリ容量よりも下回る環境でインストールを行うと、メモリ不足に陥り、packstackによるOpenStackの構築処理が停止するか、挙動が不安定になります。とくにCentOS 7の場合は、OSの安定稼働に必要なメモリ容量も従来のCentOSに比べて大きくなっていますので、注意が必要です。本番環境では、サービス毎に物理サーバーを複数台に分け、サービスの高可用性を考慮してOpenStackを構築する必要がありますが、今回、RDOで提供されているpackstackを使うため、OpenStackを構築する物理サーバーは1台です。まず、物理サーバーにCentOS 7をインストールします。構築するサーバーがプロキシ経由でインターネットにアクセスする場合は、yum.confファイルを編集します。
Packstackでのインストールでは、プロキシーサーバーを経由した場合のインストールが完了できない問題に対処する必要がありますので、それも踏まえて以後説明します。packstackをインストールする前に、CentOS 7を最新にアップデートします。
次にRDOのコミュニティが提供しているリポジトリをインストールします。
リポジトリを登録したら、packstackをインストールします。
仮想化関連のパッケージをインストールしておきます。
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サーバーでの設定例です。
再度、packstackをインストールしたサーバーに戻って作業を続行します。HTTPのアクセスをプロキシーサーバー経由で行う場合は、$HOME/.bash_profileファイルにプロキシのための環境変数を設定しておきます。ここで、no_proxyを適切に設定します。この設定を誤ると後述のpackstackによるOpenStackの構築が正常に完了できません。
上記では、no_proxyにローカルホスト(127.0.0.1)とOpenStackを構築するサーバー(172.16.31.71)、別途構築したWebサーバー(172.16.31.8)を登録しています。環境変数が適切に設定されているかを確認します。
OpenStackのパラメータに関する初期設定の雛型ファイル(アンサーファイルと言います)をpackstackコマンドで生成します。今回、初期設定ファイルの名前は、param.txtとしました。
アンサーファイルをエディタで開いてパラメータを設定します。
- OpenStackが接続するNTPサーバーを指定
- ブロックストレージの容量を指定
- 仮想ネットワーク用のドライバを指定
- Webサーバーを指定
アンサーファイルをpackstackにロードし、OpenStackの構築を開始します。
- 正常終了した場合に表示される
構築が正常に完了すると、上記のように「 **** 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サーバー上での設定例です。
- NTPの接続元のネットワークを設定
NTPサーバー上でntp.confファイルの設定を変更したら、NTPサービスを再起動します。NTPの設定において、通常は、「server」行で接続先のNTPサーバーを指定しますが、「server 127.127.1.0」を指定すると、上位にあるインターネット上のNTPサーバーに接続できない場合、自身のRTCを使用します。インターネット上のNTPサーバーを利用できない場合に有用ですが、RTCが提供する時刻は精度が低いため、あくまでテスト環境などでの一時的な利用に留めておいて下さい。HAクラスタ、マスタースレーブ方式のデータベースサーバー、Hadoopや分散ストレージ基盤などの複数のサーバー間で同期を取るようなシステムにおいては、時刻同期が適切に行われていないと動作が不安定になりますので、本番環境においては、RTCではなく必ずNTPサーバーによる時刻同期を行って下さい。