このエントリーをはてなブックマークに追加

7.2.5. Volume Service(Cinder)のインストール

OpenStack Volume Serviceのコード名はCinderです。
CinderはNovaのボリュームサービスが独立したものです。
次期リリースバージョンではnova-volumeを利用できなくなるみたいですのでこちらを利用するようにしましょう。

7.2.5.1. Cinderのインストール

iscsi関連のパッケージもインストールします。
nova-volumeを利用している場合は既にtgtはインストールされているかもしれません。
# yum install openstack-cinder -y

7.2.5.2. Cinderのコンフィグ

cinderのコンフィグを行います。
バックアップをディレクトリごととっておきましょう。
# cp -a /etc/cinder /etc/cinder_bak
cinder.confの設定
ボリュームはnova-volumeをそのまま利用しますのでcinder-volumesから変更しています。
# vi /etc/cinder/cinder.conf
[DEFAULT]
#misc
verbose = True
auth_strategy = keystone
rootwrap_config = /etc/cinder/rootwrap.conf
api_paste_config = /etc/cinder/api-paste.ini
auth_strategy = keystone
state_path = /var/lib/cinder
volumes_dir = /var/lib/cinder/volumes

#log
log_file=cinder.log
log_dir=/var/log/cinder

#osapi
osapi_volume_extension = cinder.api.openstack.volume.contrib.standard_extensions

#qpid
rpc_backend = cinder.openstack.common.rpc.impl_qpid

qpid_port = 5672
#qpid_username =
#qpid_password =

#sql
sql_connection = mysql://cinder:password@stack01/cinder?charset=utf8

#volume
volume_name_template = volume-%s
volume_group = cinder-volumes

#iscsi
iscsi_helper = tgtadm
cinder-paste.iniの設定
Keystoneの箇所だけ変更しています。
# vi /etc/cinder/api-paste.ini

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
service_protocol = http
service_host = stack01
service_port = 5000
auth_host = stack01
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = cinder
admin_password = password

7.2.5.3. データベースの作成

Keystoneが利用するデータベースを作成します。
Keystoneのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意して下さい。
データベース名cinder、ユーザ名cinder、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
# MYSQL_PASS_CINDER=password
# NOVA_CONTOLLER_HOSTNAME=stack01
# mysql -uroot -pnova -e "drop database if exists cinder;"
# mysql -uroot -pnova -e "create database cinder character set utf8;"
# mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'%' identified by '$MYSQL_PASS_CINDER';"
# mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'localhost' identified by '$MYSQL_PASS_CINDER';"
# mysql -uroot -pnova -e "grant all privileges on cinder.* to 'cinder'@'$NOVA_CONTOLLER_HOSTNAME' identified by '$MYSQL_PASS_CINDER';"
# cinder-manage db sync
2012-12-04 17:21:18 5417 DEBUG cinder.utils [-] backend <module 'cinder.db.sqlalchemy.migration' from '/usr/lib/python2.6/site-packages/cinder/db/sqlalchemy/migration.pyc'> __get_backend /usr/lib/python2.6/site-packages/cinder/utils.py:469

7.2.5.4. Keystoneの設定

先にnova-volumeのEndpointとServiceを削除してからCinderの設定を追加します。
環境変数を読み込ませていない場合は先に読こませておきます。
# CONTROLLER_HOST=stack01
# export ADMIN_TOKEN=ADMIN
# export SERVICE_TOKEN=$ADMIN_TOKEN
# export OS_USERNAME=admin
# export OS_PASSWORD=password
# export OS_TENANT_NAME=admin
# export OS_AUTH_URL=http://$CONTROLLER_HOST:35357/v2.0/
# export SERVICE_ENDPOINT=http://$CONTROLLER_HOST:35357/v2.0/
サンプルシェルを利用した場合や既存でNovaのnova-volumeを利用する設定になっている場合に行います。
nova-volume用のEndpointとServiceを削除します。
ポートが同じなので削除しておかないとややこしくなります。
endpointは8776のものを削除します。
# keystone endpoint-delete $(keystone endpoint-list | grep 8776 | awk '{print $2}')
Endpoint has been deleted.
# keystone service-delete $(keystone service-list | grep volume | awk '{print $2}')

Cinder用のUser、Servvice、Endpointを追加

SERVICE_PASSWORD=password
SERVICE_HOST=stack01

function get_id () {
    echo `"$@" | awk '/ id / { print $4 }'`
}
ADMIN_ROLE=$(keystone role-list | grep " admin" | awk '{print $2}')
SERVICE_TENANT=$(keystone tenant-list | grep service | awk '{print $2}')

CINDER_USER=$(get_id keystone user-create --name=cinder \
                                          --pass="$SERVICE_PASSWORD" \
                                          --tenant_id $SERVICE_TENANT \
                                          --email=cinder@example.com)
keystone user-role-add --tenant_id $SERVICE_TENANT \
                       --user_id $CINDER_USER \
                       --role_id $ADMIN_ROLE
CINDER_SERVICE=$(get_id keystone service-create \
    --name=cinder \
    --type=volume \
    --description="Cinder Service")
keystone endpoint-create \
    --region RegionOne \
    --service_id $CINDER_SERVICE \
    --publicurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
    --adminurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
    --internalurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s"

7.2.5.5. tgtの設定

nova-volumeを利用していた場合は、nova_tgt.confを削除しておきます。
# sed -i "s@# include /etc/cinder/volumes/@include /etc/cinder/volumes/@" /etc/tgt/conf.d/cinder.conf
# echo "include /etc/tgt/conf.d/*.conf" >> /etc/tgt/targets.conf
# echo "include /var/lib/cinder/volumes/*" >> /etc/tgt/conf.d/cinder.conf

tgtの再起動*

# service tgtd restart

7.2.5.6. プロセスの起動

Novaを既に利用している場合はNovaのプロセスを再起動(一応全て)してからCinderを再起動します。
HorizonでインスタンスにボリュームをアタッチしようとしたらAttachingでぐるぐるしっぱなしになったので全部再起動しておいたほうが無難です。
# \rm -rf /var/log/cinder/*
# for i in volume api scheduler
do
  service openstack-cinder-$i restart
done
Cinderのインストール、設定はここで終了です。
念のためボリュームの作成、削除が出来ることを確認しておきましょう。

7.2.5.7. ボリュームの作成、削除

ここで、作成追加出来たとしても安心せずインスタンスにボリュームをアタッチできるとこまでは確認しておいたほうがよいでしょう。

# cinder list
# cinder create --display_name cinder_test 1
+---------------------+--------------------------------------+
|       Property      |                Value                 |
+---------------------+--------------------------------------+
|     attachments     |                  []                  |
|  availability_zone  |                 nova                 |
|      created_at     |      2012-10-25T13:14:14.012661      |
| display_description |                 None                 |
|     display_name    |             cinder_test              |
|          id         | afc273e1-7304-4d0a-b281-2dbb7efb6cae |
|       metadata      |                  {}                  |
|         size        |                  1                   |
|     snapshot_id     |                 None                 |
|        status       |               creating               |
|     volume_type     |                 None                 |
+---------------------+--------------------------------------+
# cinder list
+--------------------------------------+-----------+--------------+------+-------------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| afc273e1-7304-4d0a-b281-2dbb7efb6cae | available | cinder_test  |  1   |     None    |             |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
# cinder delete $(cinder list | grep cinder_test | awk '{print $2}')
+--------------------------------------+-----------+--------------+------+-------------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
+--------------------------------------+-----------+--------------+------+-------------+-------------+

以上でCinderの設定は終了です。