DRBD は DRBD9 から搭載された drbdmanage を活用し、OpenStack Cinder と連携することが可能である。Cinder Volume Driver は OpenStack LIBERTY Release から標準搭載されている。
ここでは、1ノード でひとまずこの DRBD9 用の Cinder Volume Driver(drbdmanagedrv.py) の動作を確認する手順を列挙する。なお、基本的なところは割愛している。
マシンの準備
物理でも仮想でも良いが、以下のスペックがあるといい。
- CPU x2
- メモリ4GB以上
- NICは1つでも
- DISKは30GB以上
- Linuxディストリビューションはここでは CentOS 7
RDO Allinone の準備
CentOS 7 x86_64 以降へ RDO をインストールし普通に OpenStack の各 Core サービスが動くところまで準備する。Nova のインスタンスは1つ cirros でよいので作っておく。
DRBD9 インストール
今回はパッケージ版を使っているが、ソースからインストールしたものを使っても良い。
# cat /etc/redhat-release
Derived from Red Hat Enterprise Linux 7.1 (Source)
# cat /etc/yum.repos.d/linbit.repo
[drbd-9.0]
name=LINBIT Packages for drbd-9.0 - $basearch
baseurl=http://packages.linbit.com/<サポート証書にあるハッシュ>/yum/rhel7.1/drbd-9.0/$basearch
enabled=1
gpgcheck=0
# yum install kmod-drbd drbd drbdmanage
パッケージ抜粋
- drbd-8.9.4-1.el7.x86_64
- drbdmanage-0.50-1.noarch
- kmod-drbd-9.0.0_3.10.0_229.7.2-3.el7.x86_64
loopback で DRBD用のデバイスを作る
外部ブロックデバイスを追加できるのであればそのデバイスを使っても良いがココでは手っ取り早く仮想的につくる。
- Allinone の場合 loop0 , loop1 は Swift , cinder で使われているので注意
# dd if=/dev/zero of=disk01 bs=1M count=10000
# dd if=/dev/zero of=disk02 bs=1M count=10000
# losetup /dev/loop2 /root/disk01
# losetup /dev/loop3 /root/disk02
# vgcreate drbdpool /dev/loop2 /dev/loop3
- 確認:losetup
- はずすには losetup -d <loopdev>
DRBD イニシャライズ
# drbdmanage init <IP Address>
- 確認:drbdmanage list-nodes
[root@akira ~]# drbdmanage list-nodes
+------------------------------------------------------------------------------------------------------------+
| Name | Pool Size | Pool Free | Site | | State |
+------------------------------------------------------------------------------------------------------------+
| akira.tk.net | 9992 | 9984 | N/A | | ok |
+------------------------------------------------------------------------------------------------------------+
drbdmanage driver 設定
cinder.conf
[DEFAULT]
enabled_backends=lvm,drbdmanage
(略)
[drbdmanage]
iscsi_helper=lioadm
http://docs.openstack.org/admin-guide-cloud/blockstorage-lio-iscsi-support.html
restart cinder-volume
iscsi_helper=lioadm にしているのはデフォルトの tgtadm は入っていないため
Linux IO Target・・・http://linux-iscsi.org/wiki/LIO
ボリュームタイプ作成
[root ~ root] source adminrc
[root ~(keystone_admin)] cinder type-create drbdmanage
[root ~(keystone_admin)] cinder type-key drbdmanage set volume_backend_name=drbdmanage
- 確認:cinder type-list
- 確認:cinder extra-specs-list
[root@akira ~(keystone_admin)]# cinder type-list
+--------------------------------------+------------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------------+-------------+-----------+
| 0caf8530-7853-4fea-84dd-59d41ebc9510 | iscsi | - | True |
| c5b09398-fb34-4398-b3b2-3e29a2859ee2 | drbdmanage | - | True |
+--------------------------------------+------------+-------------+-----------+
[root@akira ~(keystone_admin)]# cinder extra-specs-list
+--------------------------------------+------------+-----------------------------------------+
| ID | Name | extra_specs |
+--------------------------------------+------------+-----------------------------------------+
| 0caf8530-7853-4fea-84dd-59d41ebc9510 | iscsi | {u'volume_backend_name': u'lvm'} |
| c5b09398-fb34-4398-b3b2-3e29a2859ee2 | drbdmanage | {u'volume_backend_name': u'drbdmanage'} |
+--------------------------------------+------------+-----------------------------------------+
dbus へのアクセス許可
/etc/dbus-1/system.d/org.drbd.drbdmanaged.conf を編集する。
# cat /etc/dbus-1/system.d/org.drbd.drbdmanaged.conf
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="0">
<allow own="org.drbd.drbdmanaged"/>
<allow send_interface="org.drbd.drbdmanaged"/>
<allow send_destination="org.drbd.drbdmanaged"/>
</policy>
<policy user="cinder"> # ココ追加
<allow own="org.drbd.drbdmanaged"/> # ココ追加
<allow send_interface="org.drbd.drbdmanaged"/> # ココ追加
<allow send_destination="org.drbd.drbdmanaged"/> # ココ追加
</policy> # ココ追加
</busconfig>
user の値は cinder-volume が起動されているユーザを入れる
cinder-volume 再起動
# systemctl restart openstack-cinder-volume
- 確認:cinder service-list (admin 権限、up となるまで少し時間がかかる場合あり)
- エラーがないか確認:/var/log/cinder/volume.log
[root@akira ~(keystone_admin)]# cinder service-list
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
| Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-backup | akira.tk.net | nova | enabled | up | 2015-12-02T14:18:13.000000 | - |
| cinder-scheduler | akira.tk.net | nova | enabled | up | 2015-12-02T14:18:11.000000 | - |
| cinder-volume | akira.tk.net@drbdmanage | nova | enabled | up | 2015-12-02T14:18:06.000000 | - |
| cinder-volume | akira.tk.net@lvm | nova | enabled | up | 2015-12-02T14:18:06.000000 | - |
+------------------+-------------------------+------+---------+-------+----------------------------+-----------------+
試行
ブロックデバイス作成(Cinder Volume)
[root ~] source demorc
[root ~(keystone_demo)] cinder create --display-name=hoge --volume-type drbdmanage 1
- 確認:cinder list
- エラーがないか確認:/var/log/cinder/volume.log
- drbdmanage でも確認できる:drbdmanage list-volumes
- ボリュームの状態確認:drbdsetup status
- lvdisplay (Cinder Volume Driver 経由、drbdmanage により LV が作られている)
- 削除:cinder delete
[root@akira ~(keystone_demo)]# cinder list
+--------------------------------------+-----------+------+------+-------------+----------+-------------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Multiattach | Attached to |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+-------------+
| 7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 | available | hoge | 1 | drbdmanage | false | False | |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+-------------+
[root@akira ~(keystone_demo)]# drbdmanage list-volumes
+------------------------------------------------------------------------------------------------------------+
| Name | Vol ID | Size | Minor | | State |
+------------------------------------------------------------------------------------------------------------+
| CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 | 0 | 1024 | 100 | | ok |
+------------------------------------------------------------------------------------------------------------+
[root@akira ~(keystone_demo)]# drbdsetup status
.drbdctrl role:Secondary
volume:0 disk:UpToDate
volume:1 disk:UpToDate
CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 role:Secondary
disk:Inconsistent
[root@akira ~(keystone_demo)]# lvdisplay
(略)
--- Logical volume ---
LV Path /dev/drbdpool/CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7_00
LV Name CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7_00
VG Name drbdpool
LV UUID DVl32e-vG6p-9228-spkF-HIEn-J55Z-0rpSAQ
LV Write Access read/write
LV Creation host, time akira.tk.net, 2015-12-02 23:20:45 +0900
LV Status available
# open 2
LV Size 1.00 GiB
Current LE 257
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:5
イレギュラーTips
今回の構成では、1ノードで全部入れ込んでしまっており、DRBD をレプリケーションしない状態で片肺ボリュームとして利用するためこのTipsが必要。
通常は DRBD 側はミラーボリュームとなるので本操作は必要ない。
drbdsetup status
で確認したとき、該当するボリュームの disk:Inconsistent
が disk:UpToDate でないと Nova インスタンスにアタッチすることができない。よって強制的に以下のように変更する。
[root@akira ~(keystone_demo)]# drbdsetup primary CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 --force=yes
[root@akira ~(keystone_demo)]# drbdsetup secondary CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7
[root@akira ~(keystone_demo)]# drbdsetup status
.drbdctrl role:Secondary
volume:0 disk:UpToDate
volume:1 disk:UpToDate
CV_7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 role:Secondary
disk:UpToDate
Nova インスタンスへアタッチ
アタッチする Cinder Volume の ID は cinder list
等で確認しとく。
[root@akira ~(keystone_demo)]# nova volume-attach demo-fedora23 7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 auto
+----------+--------------------------------------+
| Property | Value |
+----------+--------------------------------------+
| device | /dev/vdb |
| id | 7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 |
| serverId | c747b0d4-bb0a-4f3c-a377-0f1a8752b0c6 |
| volumeId | 7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 |
+----------+--------------------------------------+
- エラーがないか確認:/var/log/cinder/volume.log
- エラーがないか確認:/var/log/nova/nova-comupte.log
- 確認:cinder list
- 確認:nova show
[root@akira ~(keystone_demo)]# cinder list
+--------------------------------------+--------+------+------+-------------+----------+-------------+--------------------------------------+
| ID | Status | Name | Size | Volume Type | Bootable | Multiattach | Attached to |
+--------------------------------------+--------+------+------+-------------+----------+-------------+--------------------------------------+
| 7e794c92-9027-4cb0-a9ab-ba8036e9bbf7 | in-use | hoge | 1 | drbdmanage | false | False | c747b0d4-bb0a-4f3c-a377-0f1a8752b0c6 |
+--------------------------------------+--------+------+------+-------------+----------+-------------+--------------------------------------+
正常性確認
インスタンスへログインしてブロックデバイスが認識できているか、Read/Write できるか確認。
以下は ip コマンドでネームスペース(qrouter-xxxxx-xxxx )指定でログインしてる例。
# ip netns exec qrouter-xxxxx-xxxx ssh -i cloud.key root@10.10.10.1
Last login: Wed Dec 2 14:43:12 2015 from 192.168.0.70
[fedora@demo-fedora23 ~]$
- 確認:lsblk , blockdev --report , mkfs. , mount , dd など
- デタッチ:nova volume-detach <instance> <volume id>
[fedora@demo-fedora23 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 20G 0 disk
`-vda1 252:1 0 20G 0 part /
vdb 252:16 0 1G 0 disk
[fedora@demo-fedora23 ~]$ sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 21474836480 /dev/vda
rw 256 512 4096 2048 21473787904 /dev/vda1
rw 256 512 4096 0 1073741824 /dev/vdb
まとめ
ここでは、ドライバの動作について中心に確認してみました。期待された動作は行われている模様。実際の運用で使う場合は DRBD は当然レプリケーション構成になる。また、Cinder 側の HA にも考慮する必要があり、DRBD9 で利用可能な DRBD Client も合わせて活用しベストプラクティスな構成を模索してみる。
参考
- https://www.rdoproject.org/
- http://drbd.linbit.com/users-guide-9.0/s-openstack-install.html#s-openstack-addtl-conf
- http://docs.openstack.org/ja/user-guide/cli_cheat_sheet.html
- http://docs.openstack.org/ja/openstack-ops/content/attach_block_storage.html
次回の記事
Sheile さんにの投稿です。「オレオレSSL証明書」についてということで楽しみであります。しいたけが嫌いなのかな?自分は玉ねぎが嫌いです。