2014/11/04 追記: [帯域]保証型と書いていましたが、帯域は保証されていないとご指摘を(確かにその通り)受けたので[性能]保証型にしました。さらに言えば性能も保証されていないのですが。

SoftLayerでの新機能で「性能保証型ブロックデバイス」が登場しました。 1月ほど前からAPIには登場していたのですがようやく正式にリリースされた感じですね。

これは何?

SoftLayerの性能保証型のブロックストレージを購入して簡単にfioでパフォーマンス測定してみましょう。 対象としては普段から利用していることもあり仮想サーバ上からUbuntu14.04を利用したいと思います。

  • 容量 20Gから12TByteまで
  • 性能保証 100IOPS から 6000IOPSまで
  • iSCSI(Block Storage)とNAS(File Storage)の2つのインターフェースで提供

オーダーから設定まで

オーダ方法

オーダ時のオプションで利用OSを選択するようになっていますね。 管理ポータルから、StorageBlock StorageOrder Consistent Performanceを選択しましょう。

iscsi

ここでの費用は、「ディスクサイズ」+「IOPS」となるようです。この画像の場合、20 GB 100 to 1000 IOPSというは20GのiSCSIディスクはIOPS として100から1000までが指定可能ということになります。一番安い、20G 100IOPSをオーダしてみたいと思います。

設定方法

購入したデバイス(ここではSL01SL29*****-1 (20 GB)のような名称)の詳細を確認します。 iSCSIデバイスらしくAuthorized Hostsという項目があるので利用したいサーバを指定します、すると「Username」「Password」「Host IQN」「Device Type」が該当のホスト向けに表示されます。

画面を見る限り以前までのSnapshotなどの機能はなさそうです(残念!)

今回のiSCSIはマルチパスで構成されているようなのでmultipath-toolsを導入して利用します。

1
2
apt-get install multipath-tools
apt-get install open-iscsi

iSCSIの設定を行います。/etc/iscsi/initiatorname.iscsiのファイルにIQNを設定します。

1
InitiatorName= "value-from-the-SL-Portal"

次に/etc/iscsi/iscsid.confを以下の内容を記載します。

1
2
3
4
5
6
node.session.auth.authmethod = CHAP
node.session.auth.username = "Username-value-from-SL-Portal"
node.session.auth.password = "Password-value-from-SL-Portal"
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = "Username-value-from-SL-Portal"
discovery.sendtargets.auth.password = "Password-value-from-SL-Portal"

設定が終わったら /etc/init.d/open-iscsi restartで再起動を行います。

1
2
3
root@ansibletower:~# iscsiadm -m discovery -t sendtargets -p 10.2.174.111
10.2.174.111:3260,1036 iqn.1992-08.com.netapp:hkg0201
10.2.174.102:3260,1035 iqn.1992-08.com.netapp:hkg0201

iSCSIを探してみると2つのIPで見つけることが出来ました。先ほど書いたようにMultipathでの接続が前提のようですね。

1
2
3
4
5
6
7
8
9
10
root@ansibletower:~#  iscsiadm -m node --login
Logging in to [iface: default, target: iqn.1992-08.com.netapp:hkg0201, portal: 10.2.174.111,3260] (multiple)
Logging in to [iface: default, target: iqn.1992-08.com.netapp:hkg0201, portal: 10.2.174.102,3260] (multiple)
Login to [iface: default, target: iqn.1992-08.com.netapp:hkg0201, portal: 10.2.174.111,3260] successful.
Login to [iface: default, target: iqn.1992-08.com.netapp:hkg0201, portal: 10.2.174.102,3260] successful.
root@ansibletower:~#
root@ansibletower:~#
root@ansibletower:~# iscsiadm -m session -o show
tcp: [1] 10.2.174.111:3260,1036 iqn.1992-08.com.netapp:hkg0201
tcp: [2] 10.2.174.102:3260,1035 iqn.1992-08.com.netapp:hkg0201

この作業により/dev/sda/dev/sdbとしてiSCSIが認識されます。また先ほど導入したmultipathを確認すると

1
2
3
4
5
6
7
root@ansibletower:~# multipath -l
3600a0980383030525324464331596470 dm-0 NETAPP,LUN C-Mode
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=-1 status=active
| `- 0:0:0:186 sdb  8:16   active undef running
`-+- policy='round-robin 0' prio=-1 status=enabled
  `- 1:0:0:186 sda  8:0    active undef running

このようにFailover型でデバイスが登録されているのがわかります。

1
2
3
4
5
root@ansibletower:~#  fdisk -l | grep /dev/mapper
ディスク /dev/sdb は正常なパーティションテーブルを含んでいません
ディスク /dev/sda は正常なパーティションテーブルを含んでいません
ディスク /dev/mapper/3600a0980383030525324464331596470 は正常なパーティションテーブルを含んでいません
Disk /dev/mapper/3600a0980383030525324464331596470: 21.5 GB, 21474836480 bytes

device mapper経由では上記のデバイスとして認識されています。これ以降はこのデバイスに対してfdiskが有効なのでパーティションを作成して利用することに成ります。

1
2
3
4
5
6
7
8
9
10
11
root@ansibletower:~# lsblk
NAME                                       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                          8:0    0    20G  0 disk
└─3600a0980383030525324464331596470 (dm-0) 252:0    0    20G  0 mpath
sdb                                          8:16   0    20G  0 disk
└─3600a0980383030525324464331596470 (dm-0) 252:0    0    20G  0 mpath
xvda                                       202:0    0   100G  0 disk
├─xvda1                                    202:1    0   243M  0 part  /boot
└─xvda2                                    202:2    0  99.8G  0 part  /
xvdb                                       202:16   0     2G  0 disk
└─xvdb1                                    202:17   0     2G  0 part  [SWAP]

fdiskでパーティションを作成し、カーネルにデバイスの変更を通知してxfsformatを行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@ansibletower:~# fdisk /dev/mapper/3600a0980383030525324464331596470

root@ansibletower:~# partprobe
Error: /dev/sda: ディスクラベルが認識できません。
Error: /dev/sdb: ディスクラベルが認識できません。
Error: /dev/mapper/3600a0980383030525324464331596470p1: ディスクラベルが認識できません。
root@ansibletower:~# mkfs.xfs /dev/mapper/3600a0980383030525324464331596470p1
meta-data=/dev/mapper/3600a0980383030525324464331596470p1 isize=256    agcount=16, agsize=327663 blks
         =                       sectsz=4096  attr=2, projid32bit=0
data     =                       bsize=4096   blocks=5242608, imaxpct=25
         =                       sunit=1      swidth=16 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

実際にmountしてみる。恒久的に利用する場合には別途定義を行って下さい。

1
2
root@ansibletower:~# mkdir /mnt/data1
root@ansibletower:~# mount /dev/mapper/3600a0980383030525324464331596470p1 /mnt/data1

IOPS試験の実施

簡単にするためにgistにスクリプトを置いています

1
2
3
$ apt-get install fio
$ apt-get install curl
$ export DISK=/mnt/data1 ; curl -s https://gist.githubusercontent.com/tokida/090eaa6475e58b4368c0/raw/fio_test.sh | sh
Benchmark Bandwiddh IOPS
4k, sequential read   147
4k, sequential write   165
4k, randam read   107
4k, randam write   103
32m, sequential read 51.871MB/s  
32m, sequential write 12.221MB/s  

参考までに同じ試験項目でローカルディスク(100G SAN)を実施した場合

Benchmark Bandwiddh IOPS
4k, sequential read   27362
4k, sequential write   26305
4k, randam read   14188
4k, randam write   22233
32m, sequential read 114.070MB/s  
32m, sequential write 113.188MB/s  

まとめ

今回オーダしたのは100IOPSのBlock Storageになりますが、確かに100前後で制御されているように見えます。帯域はこれがMaxなのか分かりませんがこのあたりも今後確認していきたいところですね。

良かった点は、iSCSIがMultipathになった点でしょうか、とはいえ手軽さはNFS(FileStorage)での利用ですかね。また帯域が保証されているので6000IOPSを複数束ねてRaid0構成も出来るかもしれませんね。ただし結構費用が高いのが辛いかもしれないですが。12TByte(6000IOPS)の場合 $1,200+$720になるので $0.16/GByte となりますね。

os

このパラメータが何を意味しているのか調べていないのですがAIXとかありますね!

悪かった点は、以前のiSCSIが抽象化された利便性の高いデバイスだったのですが今回はかなり素のiSCSIデバイスとしての利用になります。とくにSnapshotが使えないのは残念ですね。今回の場合にはこのiSCSIデバイスのバックアップをなにか考えなければいけません。12Tとか考えるとかなり面倒な感じですね。

参考