本連載ではこれまで、過去の歴史、メリット/デメリット、ディストリビューションの紹介など、さまざまな側面からOpenStackについて説明してきた。今回からは数回にわたり、各コンポーネントの連携概要や個別コンポーネントについて解説する。

コンポーネントの連携概要

OpenStackは、IaaSを提供するソフトウェア基盤として発展を遂げてきた。第1回でも紹介したが、OpenStackは、コンピュートリソース、ストレージリソース、ネットワークリソース、これらを連携する認証、メッセージの仕組み、利用者・管理者が用いるポータル機能などから成り立っている。

各コンポーネントは、さらに複数のサービスの組み合わせで構成されており、APIにより以下のような形で連携する。このように、OpenStackはAPIを主体とした仕組みであるため、基本的にAPIですべての操作を実施でき、さまざまな形で連携しやすいという特徴もある。

OpenStackのコンポーネントの連携

OpenStackシステムは、よく"疎結合"と表現される。例えば、コンピュートを担うNovaのみでも利用できるし、オブジェクトストレージのSwiftのみでも利用可能だ。IaaSを提供する多くの製品はパッケージングされた製品体系をとっており、ユーザーが実際には利用しない機能も実装されていることが多い。これと比較すると、OpenStackは柔軟性の高いシステムアーキテクチャと言える。

また、各コンポーネントのデータを蓄積するデータベースやメッセージの連携を実施するためのメッセージキューの仕組みも合わせ持ち、API連携により、各コンポーネントをスケールアップではなく、スケールアウトによりシステムの拡張を実施しやすいアーキテクチャにもなっている。

OpenStackは、役割ごとにノード (物理もしくは仮想サーバ)を構成して利用する。コントローラノード、コンピュートノード、ネットワークノードに大きく分けられ、コントローラノードは制御用のコンポーネントが配置され、コンピュートノードに関しては、仮想インスタンスを起動するハイパーバイザとの連携を担う。また、ネットワークノードに関しては、ネットワークに関連した役割を担う。

さまざまなコンポーネントが存在するなかで、「どのコンポーネントを同一サーバ上で稼働し、同居させるか」という設計思想は、負荷分散、拡張性、冗長性の観点から重要な要素となる。

すべてのコンポーネントを単一のノード内に構成することも可能であるが、以下に例として、コントローラ、コンピュート、ネットワークのノードを分割した場合を記載する。

コントローラ、コンピュート、ネットワークのノードを分割した構成例

また、以下に各ノードのネットワーク接続例を紹介する。ここでは、仮想インスタンスがデータ通信に使用する"データ用ネットワーク"と、各ノード間での制御通信を実施するための"管理用ネットワーク"の2種類を基本的な構成として記載している。実際には、ノードやネットワークの冗長化などの設計方針を踏まえて適切な構成を取る形になる。

各ノードのネットワーク接続例

今回は、OpenStackを構成するコンポーネントの全体像を紹介したうえで、各コンポーネント間の連携や、コンポーネントを稼働させるためのノードについて説明した。次回から、各コンポーネントの詳細を紹介していく。

藤田 雄介
ネットワンシステムズ株式会社 経営企画本部 第2応用技術部 クラウドソフトウェアチーム リーダー
シスコシステムズの認定資格「CCIE #8777」、ヴイエムウェアの認定資格「vExpert2013」「vExpert2014」を保持。ネットワークをベーススキルとして、仮想化基盤の大規模案件を数多く経験。現在は、SDNやクラウドのエンジニアとして邁進中。