7つのOpenStackコンポーネントと構築手順


目次

みなさん、こんにちは。コンテンツ・メディア第1事業部インフラ担当の藤本佳世です。今回は、OpenStackの続きで、7つのコンポーネントとノードの役割、構築手順についてお話しします。

7つのコンポーネントとノードの役割

前々回の記事でも少し触れましたが、OpenStackは7つの機能から構成されます。

注意:OpenStackのバージョンアップに伴い、コンポーネントの数も更新されます。実際には、16のコンポーネントが存在しますが、今回は、構築で重要となる7つについてお話ししたいと思います。

<td>
  <strong>役割</strong>
</td>
<td>
  仮想マシンの提供と管理を行う
</td>
<td>
  ユーザー認証・管理を行う
</td>
<td>
  Webブラウザ経由で管理・操作できるGUIコンソールを提供する
</td>
<td>
  仮想イメージの管理を行う
</td>
<td>
  仮想マシンが使用するストレージ管理を行う
</td>
<td>
  仮想ネットワークの管理を行う
</td>
<td>
  クラウドストレージを提供する
</td>

役割ノードの紹介

<td style="height: 24px; width: 490.483px;">
  役割
</td>
<td style="height: 24.7px; width: 490.483px;">
  OpenStack 環境が機能するために必要な管理ソフトウェアサービスを実行
</td>
<td style="height: 24px; width: 490.483px;">
  OpenStack 内の仮想マシンインスタンスを実行
</td>
<td style="height: 24px; width: 490.483px;">
  OpenStack環境に必要な全データを保管
</td>
<td style="height: 24px; width: 490.483px;">
  Openstack環境に必要なすべての仮想ネットワーキングを実行
</td>

各コンポーネントとノードの紐づけ

各コンポーネントごとのノードの役割を下記の図で表しています。

<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
  computenode
</td>

<td style="width: 10px;">
</td>
<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
</td>

<td style="width: 10px;">
</td>
<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
</td>

<td style="width: 10px;">
</td>
<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
</td>

<td style="width: 10px;">
</td>
<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
  storagenode
</td>

<td style="width: 10px;">
</td>
<td style="width: 10px;">
  controllernode
</td>

<td style="width: 10px;">
  computenode
</td>

<td style="width: 10px;">
  networknode
</td>

構築にあたって

7つのコンポーネントをどのサーバノードで稼働、同居させるかは、負荷分散や冗長化の観点から、とても大切な設計です。みなさんもご自身の環境、サーバスペックにあった構成を組んでいただければと思いますが、フリューでは、サーバ8台構成でOpenStackを構築しました。また、今まではCentOSを使うことが多かったのですが、OpenStackでは、Ubuntu14.04LTSをホストOSとして採用しました。

理由

  1. Ubuntuは標準パッケージでOpenStack環境が用意されている。
  2. Ubuntu/debianの基本方針として、ディストリビューションのバージョンが変更されない限り、パッケージのバージョンは更新しない方針なので、不意にOpenStack環境がバージョンアップされない。 ※Firefoxなど例外あり
  3. LTSを使用すれば、2年または4年毎くらいでディストリビューションのバージョンアップが可能。 ※サポート期間は5年

構築内容

ホストOS: Ubuntu14.04LTS (8台構成), OpenStackバージョン: Liberty ※Swiftは未検証

<td>
  <strong>コンポーネント</strong>
</td>

<td>
  <strong>ノード</strong>
</td>
<td>
  Keystone/Horizon/Nova/Cinder/Glance/Neutron  

※1 MySQL/Memcached/RabbitMQ
※2 Heartbeat

<td>
  controllernode
</td>
<td>
  Keystone/Horizon/Nova/Cinder/Glance/Neutron  

※1 MySQL/Memcached/RabbitMQ
※2 Heartbeat

<td>
  controllernode
</td>
<td>
  Nova/Cinder/Neutron
</td>

<td>
  computenode/storagenode
</td>
<td>
  Nova/Cinder/Neutron
</td>

<td>
  computenode/storagenode
</td>
<td>
  Nova/Cinder/Neutron
</td>

<td>
  computenode/storagenode
</td>
<td>
  Nova/Cinder/Neutron
</td>

<td>
  computenode/storagenode
</td>
<td>
  Neutron
</td>

<td>
  networknode
</td>
<td>
  Neutron
</td>

<td>
  networknode
</td>

※1 関連サービスのインストールについて

OpenStackの各コンポーネントが必要とするサービスをインストールする必要があります。

<td style="height: 24px;">
  Keystone/Horizon/Nava/Glanceの管理情報を保存するデータベースに使用
</td>
<td style="height: 24px;">
  Horizonでのアクセス時にcookieやセッション情報の一時保存に使用
</td>
<td style="height: 24px;">
  各サービス間のメッセージのやり取りに使用
</td>

※2 構成上必要という認識から追加

<td style="height: 24px; width: 226.083px;">
  MySQL(HA構成)の死活監視に使用
</td>

関連サービスとHeartbeatのインストール

フリューでは、管理情報を保存するMySQLを稼働させるサーバを2台のレプリケーション構成にし、Heartbeatで仮想IPを振り、Keystone 等のプロセスからは仮想IPを参照するようにしました。これにより、プロセスが同じデータを参照できるので、単一点障害になりにくくなります。

MySQL/Memcached/RabbitMQ/Heartbeatインストール
MySQL設定ファイル(例)

レプリケーション設定や最適化パラメータが設定などに必要です。

Memcached設定ファイル(例)
RabbitMQの設定

各サービスからMQを使用する為のユーザ/パスワードを登録する

Heartbeat設定ファイル

OpenStackコンポーネントインストール

すべての手順を書くと、とっても長くなってしまうので、ポイントをまとめて説明していきます。

Keystone(ユーザー認証・管理を行う)

インストール
Keystone用のユーザーとデータベースをMySQLに登録
Keystoneの設定(例)
テナント作成

テナントと呼ばれる、OpenStack ユーザーのグループを作成します。※adminとserviceを作成

adminテナント

serviceテナント

Keystoneに各コンポーネント用のユーザを登録

adminとserviceテナントを作成したので、各コンポーネントのユーザを所属を指定して登録します。

adminユーザの作成(adminテナント所属)

Glanceユーザの作成(service テナント所属)

Novaユーザの作成(serviceテナント所属)

Cinderユーザの作成(serviceテナント所属)

Neutronユーザの作成(serviceテナント所属)

サービスエントリの作成

次に、ユーザーを認証するために、各 コンポーネントのサービスユーザーを作成する必要があります。

 Glance(仮想イメージの管理を行う)

インストール
Glance用のユーザとデータベースをMySQLに登録
基本設定ファイル(例)
起動

Nova(仮想マシンの提供と管理を行う)

インストール

controllernodeの場合

computenodeの場合

Nova用のユーザとデータベースをMySQLに登録
基本設定ファイル(例)
起動

controllernodeはこちら

computenodeはこちら

Horizon(Webブラウザ経由で管理・操作できるGUIコンソールを提供する)

インストール
ダッシュボードの設定(例)
起動

ブラウザで以下のurlにアクセスしてみます。 http://(サーバのホスト名)/horizon/

ログイン画面が表示されます。

Cinder(仮想マシンが使用するストレージ管理を行う)

インストール

controllernodeの場合

storagenodeの場合

 Cinder用のユーザとデータベースをmysqlに登録
基本設定ファイル(例)
起動

Neutron(仮想ネットワークの管理を行う)

インストール

controllernodeの場合

computenodeの場合

networknodeの場合

Neutron用のユーザとデータベースをMySQLに登録
基本設定ファイル(例)

controllernode:

今までのcinder.confと同じように、各サービスの認証情報を記述してきます。内容はほぼ同じのなので割愛します。

computenode:

networknode:

ファイルが多いので、すべての内容を記述するのはやめておきます。

起動

controllernode:

computenode:

networknode:

構築完了

構築については以上となります。

感想

実際にOpenStackを使いこなすために、構築設計や各コンポーネントの設定などで約1~2か月かかりました。みなさんもご自身の環境にあった構成を組む際に、参考にしていただければと思います。

次回のブログでは、Neutronネットワーク設定についてお話しする予定です。ここが一番苦労しました。単一点障害を回避するために、「Open vSwitchでVRRP(L3HA)を使った高可用性構成」を構築しました。また、OSイメージ登録やインスタンス作成、ボリューム機能、セキュリティグループ設定などなど、これから続けてOpenStack関連のブログを掲載する予定ですので、楽しみにしていて下さい。

最後に

今回のブログはとても長くなってしまい、最後まで読んでくださってありがとうございます。OpenStackとは直接関係しませんが、私が働く職場の雰囲気を少し皆さんにお見せしようと思い、チームリーダが写真を取ってくれました。普段こんな雰囲気の中で、仕事をしています。

参考

Openstack公式ドキュメント