仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

OpenStack KiloのバックエンドDBとしてPostgreSQLを使う

OpenStackはMySQLMariaDBだけでなく、PostgreSQLをバックエンドDBにすることもできます。しかし、公式の手順書はMariaDBをベースに書かれていますし、PostgreSQLを使う手順が纏まっている情報が見つけられなかったので調査してみることにしました。ちなみにこの情報は「Using PostgreSQL with OpenStack」の記事を参考に、クラウドOSとしてUbuntu Server 14.04.2、OpenStackは最新版のKiloで動作確認しています。

「Chapter 2. Basic environment」の実施

まずは公式の手順書を参考に、MySQL/MariaDBのところは飛ばして手順に従って構築。

http://docs.openstack.org/kilo/install-guide/install/apt/content/ch_basic_environment.html

RabbitMQは標準リポジトリーの方を入れる。

$ sudo apt-get update
$ sudo apt-cache policy rabbitmq-server
$ sudo apt-get install -y rabbitmq-server=3.2.4-1
$ sudo apt-mark hold rabbitmq-server

PostgreSQLのセットアップ

・サーバー及びクライアントパッケージのインストール。

$ sudo apt-get -y install postgresql python-psycopg2

クライアントパッケージはその他のノードにもインストールする。

$ sudo apt-get -y install python-psycopg2

・pg_hba.conf設定の変更

末尾に追記する。

※「172.17.14.0/24」の部分はホストが参加しているネットワークに設定する。

$ sudo vi /etc/postgresql/9.3/main/pg_hba.conf
...
host all all 172.17.14.0/24 md5
local all all md5

postgresql.conf設定の変更 全てのホストからアクセスできるようにする。

$ sudo vi /etc/postgresql/9.3/main/postgresql.conf
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;

PostgreSQLを再起動。

$ sudo service postgresql restart

ロールのセットアップ

OpenStack各コンポーネントインストール前に実施。postgresユーザーでOpenStackのコンポーネントの管理用のロールとデータベースを作る(以下はKeystoneの例。インストールするコンポーネントに読替えてください)。

・postgresユーザーに切り替え。

$ sudo -i
# su - postgres

psqlコマンドでデフォルトユーザー(postgres)でログイン。

$ psql

・ロールを作成。

postgres=# CREATE ROLE keystone;

・ロールが作成されたことを確認。

postgres=# \du

・ロールのパスワードを変更。

postgres=# ALTER ROLE keystone WITH PASSWORD 'password';

・ロールにログインする権限を与える。

postgres=# ALTER ROLE keystone LOGIN;

・作成したロールが「Cannot login」でないことを確認。

postgres=# \du

・データベースを作成。

postgres=# CREATE DATABASE keystone;

・適切なユーザーにデータベースの特権を与える。

postgres=# GRANT ALL PRIVILEGES ON DATABASE keystone TO keystone;

・ユーザのパスワードを変更。

postgres=# ALTER USER "keystone" with encrypted password 'password';

・DBの確認

postgres=# \list

OpenStack側のセットアップ

マニュアルの手順に従って、インストールおよび設定する。 ただし、コンポーネントSQLの設定は次のように設定。

[database]       ↓注意
connection = postgresql://keystone:password@controller/keystone

Glance以降も同様に設定する。 各コンポーネントでユーザー、パスワード、利用するDBの指定に注意。