Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@mamorita

OpenStackに利用するデータベースに最も適したアーキテクチャーとは

 本稿では、ミランティス・OpenStackトレーニング部のインストラクターが、OpenStackに関する疑問について説明いたします。
 今回は、「複数のOpenStackコンポーネントデータベースに最も適したデータベースは?同一ノード上にデプロイすべき?それとも別々のノードに分割したほうが良い?」という疑問に対する説明です。

 OpenStackの各コンポーネントの多くは、ステートをSQLデータベース上に保持します。各コンポーネントは、独立して機能するように設計されています。そのため、OpenStackの各コンポーネントが利用するデータベースは、同一のデータベースサーバーを参照しなくてもよい設計になっています。

したがって、各コンポーネントは物理的に独立したデータベースを利用することもできますし、他のコンポーネントが既に利用しているデータベースを利用することもできます。このような様々な選択肢がある中、運用効率の視点から、同一データベースサーバー上にあるデータベースを共有して利用することをおすすめします。

 その理由は次の通りです。通常、OpenStackコンポーネントは、単一のSQLデータベース上にそれぞれ状態を保持します。データベースへのアクセス時には、OpenStack共有ライブラリであるOsloを利用します。更にOsloライブラリは、Python SQLAlchemyライブラリを活用します。したがって、理論上はOpenStackは、SQLAlchemyライブラリが対応しているSQLデータベースであれば、あらゆるデータベースを利用することができます。

 前述のとおり、OpenStackの各コンポーネントは独立して機能します。Neutronであれば、/etc/neutron/neutron.conf, Novaであれば、/etc/nova/nova.conf、というように各コンポーネント毎に設定ファイルがあります。データベースのロケーションは、これらの設定ファイル上に定義されます。
例えば、Novaの設定ファイルである nova.conf上には、データベースについて以下のように記述します。

[database] 
connection = mysql+pymysql://user:nova@<ip-address-of-database>//nova?charset=utf8

続いて、Cinderの設定ファイル上のデータベースに関する記述例です。

 [database]
connection = mysql+pymysql://user:cinder@<ip-address-of-database>//cinder?charset=utf8

 上記の記述例でわかる通り、データベースはIPアドレスで識別されます。OpenStackの各コンポーネントは、それぞれ独立したデータベースを利用できるように設計されているため、異なるIPアドレスを指定することができます。たとえデータベースの種類が各コンポーネント毎に異なっていても稼働します。つまりNeutronではSQLite、NovaはMySQL、そしてCinderではPostgreSQLと、それぞれのコンポーネントが全く異なるデータベースを利用することも可能です。

しかし、実践的な見方をすると、単一のノードもしくはクラスター上のデータベースを各コンポーネントのデータベースとして利用する方が適している、と考えられます。運用管理上、データベースサーバー数がより少ない方が効率的に運用管理できるため、メリットがあります。データベースをクラスター構成として高可用性を実現すれば、単一サーバーで稼働させる場合よりも、より大きなメリットが得られます。

 OpenStackのデプロイメントツールで最も利用されているデータベースは、MySQL/MariaDBです。OpenStackデプロイメントツールは、通常3サーバーから構成されるデータベースクラスターをインストールします。その上で、クラスターをHA化するためのコンポーネントとして、Galeraを活用します。Galeraは、MySQL/MariaDBクラスター上でデータベースの同期をとるためのツールです。

 場合によっては、データベースクラスターへアクセスするには、単一のIPアドレスを設定する必要もあるでしょう。その場合には、Pacemaker/Corosyncをはじめとする他のツールを使って、バーチャルIPアドレス(VIP)を設定します。OpenStack各コンポーネントは、バーチャルIPアドレスを介してデータベースにアクセスし、VIPの背後にある複数のデータベースのうちの一つにデータを保存します。すると、保存されたデータは、Galeraによって他のデータベースサーバーにコピーされます。

 運用管理者は、すべてのOpenStack環境をこのような構成にする必要はありません。OpenStackは柔軟性を確保するためにモジュラー構成となっています。したがって、それぞれの環境に応じたアーキテクチャーをとることができます。しかし、今日現在、高可用性を備えた単一データベースサーバーもしくは単一データベースサーバークラスターを構築してOpenStackの各コンポーネントで共有する方が、最も安定していて、かつ運用管理も容易なアーキテクチャであるといえます。

(引用元:Todd Bowman (2016) "Mirantis Training Blog: What's the best architecture for multiple OpenStack component databases?" https://www.mirantis.com/blog/mirantis-training-blog-whats-the-best-architecture-for-multiple-openstack-component-databases/ )

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?