dbconfig-common を用いたデータベースの設定

dbconfig-common を用いたデータベースの設定

多くの OpenStack サービスは、データベースにアクセスできるように設定する必要があります。これらは、以下のように DSN (Database Source Name) ディレクティブで設定されます。

[database]
connection = mysql+pymysql://keystone:0dec658e3f14a7d@localhost/keystonedb

この connection ディレクティブは、Debian の標準インターフェースである dbconfig-common パッケージにより処理されます。これにより Debian のデータベースパラメーターを設定できます。これは多くの言語に翻訳されたプロンプトを持ち、データベースバックエンド SQLite、MySQL、PostgreSQL に対応しています。

dbconfig-common パッケージは、デフォルトでは、OpenStack サービスが SQLite を使用するよう設定します。そのため、debconf を非対話モードで事前設定なしで利用した場合、インストールした OpenStack サービスは SQLite を使用します。

dbconfig-common は、デフォルトでは、ネットワーク経由でのデータベースサーバーへのアクセスを提供しません。dbconfig-common パッケージで、UNIX ソケットファイル経由ではなくネットワーク経由でアクセスするリモートデータベースサーバーをプロンプトに表示させたい場合、以下のように再設定します。

# apt-get install dbconfig-common && dpkg-reconfigure dbconfig-common

dbconfig-common パッケージを再設定する際には、以下の画面が表示されます。

../_images/dbconfig-common_keep_admin_pass.png

../_images/dbconfig-common_used_for_remote_db.png

他の debconf プロンプトと異なり、debconf-set-selections を使用して dbconfig-common プロンプトに対する応答を事前設定することはできません。代わりに、/etc/dbconfig-common にファイルを作成する必要があります。例えば、以下のように、/etc/dbconfig-common/keystone.confdbconfig-common の Keystone 設定を作成することができます。

dbc_install='true'
dbc_upgrade='true'
dbc_remove=''
dbc_dbtype='mysql'
dbc_dbuser='keystone'
dbc_dbpass='PASSWORD'
dbc_dbserver=''
dbc_dbport=''
dbc_dbname='keystonedb'
dbc_dbadmin='root'
dbc_basepath=''
dbc_ssl=''
dbc_authmethod_admin=''
dbc_authmethod_user=''

このファイルを作成した後、このコマンドを実行します。

# apt-get install keystone

Identity サービスは、データベースバックエンドとして MySQL、データベース名として keystonedb 、ローカルホストのソケットファイルを指定してインストールされます。対応する DSN は以下のようになるでしょう。

[database]
connection = mysql+pymysql://keystone:PASSWORD@localhost/keystonedb

dbconfig-common パッケージは、MySQL にこれらのアクセス権を設定し、データベースを作成します。OpenStack 2014.1.1 以降、Debian のすべての OpenStack パッケージは、データベース作成後に以下の MySQL クエリーを実行します (MySQL をバックエンドとして使用する場合)。

ALTER DATABASE keystone CHARACTER SET utf8 COLLATE utf8_unicode_ci

そのため、Debian を使用する場合、データベースの作成、アクセス権の設定、文字コードセットについて気にする必要はありません。必要なことはすべて、パッケージにより処理されます。

例として、cinder-common パッケージのスクリーンショットを以下に載せます。

../_images/dbconfig-common_1_configure-with-dbconfig-yes-no.png

../_images/dbconfig-common_2_db-types.png

../_images/dbconfig-common_3_connection_method.png

../_images/dbconfig-common_4_mysql_root_password.png

../_images/dbconfig-common_5_mysql_app_password.png

../_images/dbconfig-common_6_mysql_app_password_confirm.png

Debian のデフォルトでは、MySQL サーバーにアクセスできるのは、ソケットファイル経由のローカルホストか、127.0.0.1 からだけです。ネットワーク経由でアクセスする場合、ユーザーは /etc/mysql/my.cnf ファイルと mysql.user テーブルを編集する必要があります。このために、Debian は openstack-deploy パッケージでヘルパースクリプトを提供しています。使用するには、このパッケージをインストールして、

# apt-get install openstack-deploy

ヘルパースクリプトを実行します。

# /usr/share/openstack-deploy/mysql-remote-root

別の方法として、このパッケージをインストールしたくない場合には、以下のスクリプトを実行して、リモート root アクセスを有効にします。

#!/bin/sh

set -e

SQL="mysql --defaults-file=/etc/mysql/debian.cnf -Dmysql -e"

ROOT_PASS=`${SQL} "SELECT Password FROM user WHERE User='root' LIMIT 1;" \
  | tail -n 1`
${SQL} "REPLACE INTO user SET host='%', user='root',\
  password='${ROOT_PASS}', Select_priv='Y', Insert_priv='Y',\
  Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y',\
  Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y',  File_priv='Y',\
  Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y',\
  Super_priv='Y', Show_db_priv='Y', Create_tmp_table_priv='Y',\
  Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y',\
  Repl_client_priv='Y', Create_view_priv='Y', Show_view_priv='Y',\
  Create_routine_priv='Y', Alter_routine_priv='Y', Create_user_priv='Y',\
  Event_priv='Y', Trigger_priv='Y' "
${SQL} "FLUSH PRIVILEGES"
sed -i 's|^bind-address[ \t]*=.*|bind-address = 0.0.0.0|' /etc/mysql/my.cnf
/etc/init.d/mysql restart

複数ノードに OpenStack サービスをインストールする前にリモートアクセスを有効化する必要があります。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.