*

OpenStack Cinder Multiple driver backends 機能を使ってみよう

公開日: 最終更新日:2014/07/25  |  By  |  Cinder, OpenStack

by Hiroki Ishikawa

OpenStack 担当、石川です。
Grizzly から Cinder のバックエンドドライバを複数選択できるようになりました。
今回はこれを試してみたいと思います。

DevStack を利用したインストール

まずは手軽に DevStack を使って試してみましょう。
DevStack を使用して、マルチバックエンドを試すには、localrc に「CINDER_MULTI_LVM_BACKEND =True」を設定し stack.sh を実行します。
このパラメータを定義すると、2つの Volume Group(stack-volumes, stack-volumes2) が作成され、それぞれを選択できるようになります。
$ git clone https://github.com/openstack-dev/devstack.git
$ cd devstack
$ vim localrc
$ ./stack.sh

※ master ブランチを使用しているため、タイミングによっては正しく動かない場合があります。

localrc のサンプルは以下の通りです。

HOST_IP=192.168.56.101                # 環境に合わせて設定を変更する
ADMIN_PASSWORD=o9i8u7OIU              # 環境に合わせて設定を変更する
MYSQL_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=99988777666             # 環境に合わせて設定を変更する
disable_service n-obj
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service q-lbaas
enable_service quantum

disable_service n-novnc
disable_service n-xvnc
enable_service n-spice

FIXED_RANGE=172.16.0.0/24
NETWORK_GATEWAY=172.16.0.1
FLOATING_RANGE=10.0.0.0/24
LOGFILE=stack.sh.log
SCREEN_LOGDIR=/opt/stack/logs

ENABLE_TENANT_TUNNELS=True
CINDER_MULTI_LVM_BACKEND=True # マルチバックエンドを有効化

EXTRA_OPTS=(
libvirt_inject_password=true
vnc_keymap=ja
)

CINDER_MULTI_LVM_BACKEND を指定すると2つの VG が作成されます。LV には何も作成されません。

$ sudo vgs
  VG             #PV #LV #SN Attr   VSize  VFree
  stack-volumes    1   0   0 wz--n- 10.01g 10.01g
  stack-volumes2   1   0   0 wz--n- 10.01g 10.01g
  u1304-vg         1   2   0 wz--n- 15.76g  3.66g
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
root u1304-vg -wi-ao-- 8.11g
swap_1 u1304-vg -wi-ao-- 4.00g

後述するボリュームタイプ設定後、ボリューム作成をすると指定した領域にボリュームが作成されることが確認できます。

$ . ~/devstack/openrc admin
$ cinder type-create lvm1
$ cinder type-create lvm2
$ cinder type-key lvm1 set volume_backend_name=LVM_iSCSI
$ cinder type-key lvm2 set volume_backend_name=LVM_iSCSI_2
$ cinder create --volume-type lvm1 --display_name test_lvm 1
$ sudo lvs
  LV                                          VG            Attr     LSize Pool Origin Data%  Move Log Copy%  Convert
  volume-87432c6c-fec3-4fd4-9451-07f3071af689 stack-volumes -wi-ao-- 1.00g
  root                                        u1304-vg      -wi-ao-- 8.11g
  swap_1                                      u1304-vg      -wi-ao-- 4.00g
$ cinder create --volume-type lvm2 --display_name test_lvm2 1
$ sudo lvs
  LV                                          VG             Attr     LSize Pool Origin Data%  Move Log Copy%  Convert
  volume-87432c6c-fec3-4fd4-9451-07f3071af689 stack-volumes  -wi-ao-- 1.00g
  volume-972ecf2f-6b8d-4e84-bdea-5dad142d3a44 stack-volumes2 -wi-ao-- 1.00g
  root                                        u1304-vg       -wi-ao-- 8.11g
  swap_1                                      u1304-vg       -wi-ao-- 4.00g

この状態で、Horizon 「ボリュームの作成」画面を見ると、プルダウンメニューに2つのボリュームタイプが表示されます。

 

ボリュームタイプ定義の流れ

マルチバックエンドを設定する場合は以下の流れでボリュームタイプを定義します。
  1. Cinder の基本的な構築をする
  2. バックエンドで指定するボリュームを用意する
  3. cinder.conf に enabled_backends を定義する
  4. 定義したバックエンド名をグループとして、各種設定を行う
  5. cinder コマンドでボリュームタイプを定義する
  6. cinder コマンドでボリュームタイプとバックエンド名を紐付ける

Cinder の基本的な構築をする

Grizzly 以降の Cinder をインストールします。
設定ファイルを作成し、正しく動作することを確認してください。

Cinder インストール手順は公式ドキュメント等をご覧ください。

 

バックエンドで指定するボリュームを用意する

バックエンドとして指定するボリュームを2つ以上用意します。
ここでは LVM と GlusterFS を使用しています。
※ GlusterFS は用意が楽だったので使っています。

cinder.conf に enabled_backends を定義する

enabled_backends に使用するバックエンド名(任意の名前)をリスト形式で指定します。
ここで指定した名前は、[CONFIG]グループとして利用します。
例: enabled_backends = lvmdriver,glusterfs

定義したバックエンド名をグループとして、各種設定を行う

各グループにそれぞれのドライバ設定を行います。
volume_backend_name は任意の名前を指定可能です。あとで、ボリュームタイプと紐付けます。
default_volume_type=lvm
enabled_backends=lvmdriver,gluster

# LVM ドライバ用の設定
[lvmdriver]
volume_group=stack-volume
volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name=LVM_iSCSI

# GlusterFS ドライバ用の設定
[gluster]
volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
glusterfs_shares_config=/etc/cinder/shares.conf
glusterfs_mount_point_base=/var/lib/cinder/volumes
volume_backend_name=GlusterFS

cinder コマンドでボリュームタイプを定義する

ボリュームタイプを指定します。
ここで作成するボリュームタイプはユーザに直接見えるものになります。
# 「ioDrive」や「SSD」などとして運用してもいいですね。
ボリュームタイプ「lvm」を作成します。コマンド実行には admin 権限が必要です。
$ cinder type-create lvm
+--------------------------------------+------+
|                  ID                  | Name |
+--------------------------------------+------+
| ce3cd677-a140-4eb4-b4b2-e8947e126f30 | lvm  |
+--------------------------------------+------+
ボリュームタイプ「glusterfs」を作成します。コマンド実行には admin 権限が必要です。
$ cinder type-create glusterfs
+--------------------------------------+-----------+
|                  ID                  |    Name   |
+--------------------------------------+-----------+
| 32809eec-521a-444a-9ac9-1ab17c21774f | glusterfs |
+--------------------------------------+-----------+
ボリュームタイプリストを表示します。
$ cinder type-list
+--------------------------------------+-----------+
|                  ID                  |    Name   |
+--------------------------------------+-----------+
| 32809eec-521a-444a-9ac9-1ab17c21774f | glusterfs |
| ce3cd677-a140-4eb4-b4b2-e8947e126f30 |    lvm    |
+--------------------------------------+-----------+

cinder コマンドでボリュームタイプとバックエンド名を紐付ける

ボリュームタイプを作成しただけではどのボリュームを使うのかが分かりません。
そこで、ボリュームタイプ と volume_backend_name を紐付ける必要があります。
volume_backend_name は先ほど cinder.conf で定義したものを指定します。
コマンド実行には admin 権限が必要です。
$ cinder type-key lvm set volume_backend_name=LVM_iSCSI
$ cinder type-key glusterfs set volume_backend_name=GlusterFS
$ cinder extra-specs-list
+--------------------------------------+-----------+----------------------------------------+
|                  ID                  |    Name   |              extra_specs               |
+--------------------------------------+-----------+----------------------------------------+
| 32809eec-521a-444a-9ac9-1ab17c21774f | glusterfs | {u'volume_backend_name': u'GlusterFS'} |
| ce3cd677-a140-4eb4-b4b2-e8947e126f30 |    lvm    | {u'volume_backend_name': u'LVM_iSCSI'} |
+--------------------------------------+-----------+----------------------------------------+

ボリューム作成

ボリュームタイプ「lvm」を指定して作成します。
$ cinder create --display_name LVM --volume-type lvm 1
ボリュームタイプ「glusterfs」を指定して作成します。
$ cinder create --display_name GLUSTER --volume-type glusterfs 1
作成したボリュームを確認すると指定したボリュームタイプでそれぞれのボリュームが作成されていることがわかります。
$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 43a981cb-67a5-447d-a9e0-9e5b85aae1e4 | available |   GLUSTER    |  1   |  glusterfs  |  False   |             |
| 71e7a97c-89e4-4187-9616-7b835c1bba03 | available |     LVM      |  1   |     lvm     |  False   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
–volume-type を指定しない場合は default_volume_type で指定した lvm が選択されます。
$ cinder create --display_name NONE 1
$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 43a981cb-67a5-447d-a9e0-9e5b85aae1e4 | available |   GLUSTER    |  1   |  glusterfs  |  False   |             |
| 71e7a97c-89e4-4187-9616-7b835c1bba03 | available |     LVM      |  1   |     lvm     |  False   |             |
| b7de87a7-90e8-4491-a327-6ad450c43f7d | available |     NONE     |  1   |     lvm     |  False   |             |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
DevStack を利用した構築では default_volume_type オプションが設定されないため、–volume-type を指定しないと Type が None になってしまいます。

実際に構築する場合は default_volume_type を指定し、デフォルトのボリュームタイプを指定するか、ボリュームタイプを指定しないとエラーにするなどの対応をしましょう。

この機能を使うことで「速いディスク」「遅いが大容量のディスク」「実験的サポートのボリューム」などを選択することが容易になります。是非活用してみてください。

関連記事

howtocontribute

OpenStackコントリビューターへの道(OpenStack Advent Calendar 2014 12/12)

by Ikuo Kumagai (@kumagai19o) この記事はOpenStack Ad

記事を読む

no image

Swift 1.12.0 CHANGELOG の翻訳

by You Yamagata 2013.02.04ビットアイル総研の山縣です。Swift の ve

記事を読む

no image

サーバ1台でのクラスタの構築 ~ Swiftによるオブジェクトストレージシステムの構築(2)

by yamagata 2013/1/21(Swift関連の記事の一覧はこちらをご覧ください)(1/

記事を読む

ODT2015logo

OpenStack Days Tokyo 2015

来る2月3日,4日にはOpenStack Days Tokyo 2015が開催されます。 日本国内

記事を読む

no image

OpenStack DBaas (Trove) を動かした話

本記事はOpenStack Advent Calendar 2015 12/17 のエントリー記事で

記事を読む

DSC_000001_opening

OpenStack Summit Tokyo

ついにOpenStack Summit が 10/27-30 に東京で開催されました。 弊研究

記事を読む

no image

CLIによるSwiftへのアクセス(後編) ~ Swiftによるオブジェクトストレージシステムの構築(4)

by yamagata 2013/2/7(Swift関連の記事の一覧はこちらをご覧ください)前回の

記事を読む

day2_3

OpenStack Upstream Training in Paris 参加報告

by Ikuo Kumagai (@kumagai19o) Bonjuor. またご無沙汰して

記事を読む

Rally-Actions

OpenStack Rally入門

RallyはOpenStackのプロジェクトの一つです。OpenStackのベンチマークツールと簡単

記事を読む

summit_top

OpenStack Summit Vancouver Summary

5/18~5/22に開催されたOpenStack Summit Vancouver に参加してきまし

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑