こんにちは、インフラグループの水野です。
みなさんネットワークストレージ大好きですよね?
NFSやFC(Fiber Channel)-SAN、iSCSI、GlusterFS、Ceph、広義の意味ではオブジェクトストレージのAmazon S3、Swift etc...
長年利用されているものから新しいもの、エンタープライズからオープンソースまで様々あると思います。
今回はScaleIOの導入検証する機会がありましたのでご紹介させていただきます。
What's ScaleIO?
EMC ScaleIO (以下ScaleIO)はEMCが提供しているエンタープライズ向けのSoftware Defined Storageプロダクトです。
同様のものとしてOSSのCephがしばしば挙げられます。
ScaleIOは以下のような特徴を持っています。
- ソフトウェアで定義された、ブロックストレージを提供
- 数千ノード規模まで対応しており、台数の増減が容易
- 一部ノードがダウンしても運用継続可能な耐障害性を備える
- 高速、高性能(特にCephより高速であると謳っている)
- オーバーヘッドも少ないため、ハイパーバイザーなどとの同居が可能
- インストールが容易、管理用のUIが便利
2015年ごろから検証用途であれば機能・容量共に無制限で利用できるようになったということがあり、気軽に検証できるようになりました。
いざ導入
公式で提供されているドキュメントが非常にわかりやすいのでそちらにしたがって進めていきます。
構成
ScaleIOは下記コンポーネントで構成されます。
- GW(GateWay)
- IM(Installation Manager)
- MDM(Meta Data Manager)
- TB(Tie Breaker)
- SDS(ScaleIO Data Server)
- SDC(ScaleIO Data Client)
また、公式ドキュメントではスタンダードな最少3台構成と冗長性を高めた最少5台構成が提案されています。
- 最少3台構成
- Master MDM * 1
- Slave MDM * 1
- TB * 1
- 最少5台構成
- Master MDM * 1
- Slave MDM * 2
- TB * 2
今回は最少3台構成+GW / IM用1台の合計4台構成で試してみます。
ScaleIOが扱うボリューム領域を別途用意する必要がありますが、今回はLVMを使って切り出すことにしました。
詳細情報は以下のとおりです。
役割 | IPアドレス | ディストリビューション | ScaleIO用の論理ボリューム名(参照してるデバイス名) |
---|---|---|---|
GW / IM | 192.168.10.1 | Ubuntu 16.04 LTS | |
Master MDM | 192.168.10.2 | Ubuntu 16.04 LTS | /dev/VolGroup00/lv_scaleio( /dev/dm-2 ) |
Slave MDM | 192.168.10.3 | Ubuntu 16.04 LTS | /dev/VolGroup00/lv_scaleio( /dev/dm-2 ) |
TB | 192.168.10.4 | Ubuntu 16.04 LTS | /dev/VolGroup00/lv_scaleio( /dev/dm-2 ) |
最終的には以下のような全体像になります。
インストール
パッケージをダウンロード
インストールに必要なパッケージ群をダウンロードします。 必要なものは以下からダウンロードできます。
日本語版のダウンロードページだと現在(2017/06/21) v.1.32.3が、海外版のダウンロードページだとv.2.0.1.2がダウンロードできます。日本語ページのバージョンがちょっと古いですね。
今回は最新のv.2.0.1.2を利用するため海外版のページからScaleIO Linux版をダウンロードリンクから落とします。
ダウンロードしたものは以下のようにして解凍しておきましょう。
$ unzip path/to/ScaleIO_Linux_v2.0.zip $ ls ScaleIO_2.0.1.2_Complete_Linux_SW_Download Documentation ScaleIO_2.0.1.2_Gateway_for_Windows_Download ScaleIO_2.0.1.2_SLES_12.1_Download ScaleIO_2.0.1.2_GPG-RPM-KEY_Download ScaleIO_2.0.1.2_RHEL_OEL6_Download ScaleIO_2.0.1.2_UBUNTU_14.04_Download ScaleIO_2.0.1.2_GUI_for_Linux_Download ScaleIO_2.0.1.2_RHEL_OEL7_Download ScaleIO_2.0.1.2_UBUNTU_16.04_Download ScaleIO_2.0.1.2_GUI_for_Windows_Download ScaleIO_2.0.1.2_SLES_11.3_Download ScaleIO_2.0.1.2_XEN_6.5_Download ScaleIO_2.0.1.2_Gateway_for_Linux_Download ScaleIO_2.0.1.2_SLES_12.0_Download ScaleIO_v2.0.x_Linux_Windows_Quick_Start_Guide.pdf
ScaleIO Gatewayのインストール
まずはインストーラーをセットアップするため、ScaleIO Gatewayをインストールします。
Gatewayインストール用のrpm/debパッケージがあります。
$ ls ScaleIO_2.0.1.2_Complete_Linux_SW_Download/ScaleIO_2.0.1.2_Gateway_for_Linux_Download EMC-ScaleIO-gateway-2.0-12000.122.x86_64.rpm ScaleIO_Complete_Config.csv emc-scaleio-gateway_2.0-12000.122_amd64.deb EMC_ScaleIO_Software_Agreement.txt ScaleIO_Minimal_Config.csv
今回はUbuntuで利用するのでemc-scaleio-gateway_2.0-12000.122_amd64.deb
をGatewayホストにアップロードしておきます。
インストーラー画面の初期パスワードを決めてインストールを行います。
[root] ### rpmとjavaが必要なので予め入れておきます $ apt-get install rpm openjdk-8-jre ### 初期パスワードをGATEWAY_AMDIN_PASSWORD環境変数に渡してインストールします $ GATEWAY_ADMIN_PASSWORD={{ パスワード }} dpkg -i /tmp/emc-scaleio-gateway_2.0-12000.122_amd64.deb ~~~~~ 省略 ~~~~~ The EMC ScaleIO Gateway is running. PID=11422.
https://192.168.10.1
(Gatewayをインストールしたアドレス)にアクセスをしてインストーラー画面が表示されればOKです。
初回の接続が重く、タイムアウトする場合があるのでローカルからcurl
などでアクセスしておくと良いです。
デフォルトでは80/443でリッスンしていますが、ポートを変えたい場合は/opt/emc/scaleio/gateway/conf/server.xml
内の${http.port}
、${ssl.port}
を任意のポートに変えて、gatewayを再起動します。
$ sudo systemctl restart scaleio-gateway
ScaleIOのインストール
https://192.168.10.1
でインストーラーにアクセスし、User name: admin
、Password: {{ パスワード }}
でログインします。
ログインができると次のような画面になります。
ガイドに従って、Get Startedボタンからinstallation package
のアップロードに進みます。
Blowseボタンを押してインストールに必要なパッケージをアップロードしていきます。 ダウンロードしてきたパッケージ群の中に各ディストリビューションのインストールパッケージが入っています。
$ ls ScaleIO_2.0.1.2_Complete_Linux_SW_Download/ScaleIO_2.0.1.2_UBUNTU_16.04_Download EMC-ScaleIO-lia-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-sds1-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-xcache-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-mdm-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-sds2-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC_ScaleIO_Software_Agreement.txt EMC-ScaleIO-sdc-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-sds3-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-sds-2.0-12000.122.Ubuntu.16.04.x86_64.tar EMC-ScaleIO-sds4-2.0-12000.122.Ubuntu.16.04.x86_64.tar
今回はUbuntu16.04なのでそこからtarファイルをすべて選択してUploadボタンを押します。 アップロードが完了すると次の画面のようになると思います。 問題なければProceed to Installボタンで次に進みます。
次はScaleIOクラスタの構成情報をアップロードします。 クラスタ構成を記述した以下のようなCSVを用意します。
IPs,Password,Operating System,Is MDM/TB,Is SDS,SDS Device List,Is SDC 192.168.10.2,rootパスワード,linux,Master,Yes,/dev/dm-2,Yes 192.168.10.3,rootパスワード,linux,Slave,Yes,/dev/dm-2,Yes 192.168.10.4,rootパスワード,linux,TB,Yes,/dev/dm-2,Yes
上記ファイルをBlowseボタンで選択し、Upload Installation CSVボタンでアップロードします。
アップロードが完了すると次のような画面になると思います。
MDM Password、LIA Passwordをそれぞれ入力し、Licenseにチェックを入れます。 あとはTopologyの内容がCSVに設定した項目とあっているかを確認して、次へ進みます。
ここまで来るとあとはほぼ自動でインストールが進みます。 各インストールフェーズが終わるたびにボタンを押して進んでいきます。
インストールが全て完了すると以下のようになります。 Mark Operation Completedボタンを押して完了しましょう。
バグフィックス
Ubuntu16.04にインストールをしていくと、SDCがうまくインストールできない事象にぶつかりました(同様にCentOS7でもインストールしてみましたがそちらでは発生しませんでした)。
ぶつかったのは以下の通りですが、一通り解決した方法を記載しておきます。
- systemdのunitファイルが無い
- unitファイルが利用する実行ファイルのパスが違う
- driverを取得しに行くところの設定が無い
systemdのunitファイルがない
以下のパスにありました。
$ sudo cp -a /opt/emc/scaleio/sdc/bin/sdc.service /etc/systemd/system/ $ sudo systemctl daemon-reload
unitファイルが利用する実行ファイルのパスが違う
先ほど配置したファイルを書き換えました。
$ diff -u /opt/emc/scaleio/sdc/bin/sdc.service /etc/systemd/system/sdc.service --- /opt/emc/scaleio/sdc/bin/sdc.service 2016-12-23 15:13:30.000000000 +0900 +++ /etc/systemd/system/sdc.service 2017-06-22 15:30:39.117453761 +0900 @@ -11,8 +11,8 @@ After=network.target [Service] -ExecStart=/opt/emc/scaleio/sdc/bin/scini start > /dev/null 2<>/dev/null -ExecStop=/opt/emc/scaleio/sdc/bin/scini stop > /dev/null 2<>/dev/null +ExecStart=/etc/init.d/scini start > /dev/null 2<>/dev/null +ExecStop=/etc/init.d/scini stop > /dev/null 2<>/dev/null Restart=always RestartSec=0 RemainAfterExit=true $ sudo systemctl daemon-reload
driverを取得しに行くところの設定が無い
下記URLを参考に/bin/emc/scaleio/scini_sync/driver_sync.conf
を書き換えました。
使ってみる
今回はOpenStackのcinderバックエンドとして組み込んでみます。
/etc/cinder/cinder.conf
を次のように書き換えます。
$ sudo vim /etc/cinder/cinder.conf [Default] enabled_backends = lvm,scaleio ### scaleioを追記 ### 以下を最下部に追記 [scaleio] volume_driver = cinder.volume.drivers.dell_emc.scaleio.driver.ScaleIODriver ### 新しめのOpenStackなら同梱されてます volume_backend_name = scaleio san_ip = {{ ScaleIO GatewayのIP }} sio_protection_domain_name = default sio_storage_pool_name = defaultSP sio_storage_pools = default:defaultSP san_login = admin san_password = {{ MDMのパスワード }} san_thin_provision = false $ sudo systemctl restart openstack-cinder-api openstack-cinder-scheduler ### openstack側にvolume設定をします $ cinder type-create scaleio $ cinder type-key scaleio set volume_backend_name=scaleio
これでOpenStack側でボリュームを作成する際に、scaleio
をストレージの種別で選択すればScaleIO上にボリュームが作られます。
オーバーヘッドが少ないのでコンピュートノードにScaleIOをインストールすることもできるそうです。
ノードの増減
ノードを増やすときはインストールのときと同様にWebインストーラーから行います。 先ほど用意したCSVを以下のように修正しましょう。
IPs,Password,Operating System,Is MDM/TB,Is SDS,SDS Device List,Is SDC 192.168.10.2,rootパスワード,linux,Master,Yes,/dev/dm-2,Yes 192.168.10.3,rootパスワード,linux,Slave,Yes,/dev/dm-2,Yes 192.168.10.4,rootパスワード,linux,TB,Yes,/dev/dm-2,Yes 192.168.10.5,rootパスワード,linux,,Yes,/dev/dm-2,Yes
192.168.10.5を追加してみました。 あとは先ほど同様CSVをアップロードしてインストールを進めていきます。 この時、下記画面でAdd to existing sys.に変えるのを忘れないようにします。
これで簡単にノードを増やすことができます。
再起動等でノードが切り離された場合でも自動で復旧しますし、データはミラーリングされているため、一部ノードが切り離されたとしても継続して動作します。 この辺も非常に頭が良くて便利です。
ScaleIO GUIで見てみる
Windowsに同梱のGUIツールをインストールしてみました。 表示はこのような感じになります。
ストレージ容量やIO速度、管理してる台数、アラートなどなど様々な項目があり非常に見やすいです。
まとめ
GUIでインストール・管理も簡単、ノードの増減による拡張性が高いなどさすがはエンタープライズ製品だなという感じでした。 エンタープライズ製品のストレージを触るためには通常費用が発生するので気軽に試すという機会はなかなか作れませんが、検証用途なら機能無制限で無料で利用できるというのは非常に良かったです。 本番導入にはライセンスが必要になりますので、導入は予算との兼ね合いになると思います。 しかしながら、管理・運用の容易さを考えると検討の価値は十分あるのではないかと思いました。