OpenStackはMySQL、MariaDBだけでなく、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の指定に注意。