こんにちは、与儀です。
Storage Gateway はざっくり言うと、S3領域に対して大容量のストレージを構築して、iscsi経由でファイルをアップロードダウンロードすることができるサービスです。オンプレミスのサーバでStorage Gatewayを構築して、S3領域を利用することもできますが、ここではEC2上にStorage Gatewayを構築する場合で考えます。
Storage Gatewayの利用ケースとしては、すでにNFSを利用した大容量ファイルストレージを利用していて、それをAWSへ持っていきたいが、NFSの構成がアプリの仕様上どうしても変更できない場合、などが考えらえれます。
この記事では、Storage Gatewayを構築して、iscsi接続するまでをとても簡単にですが、説明していきます。
Storage Gateway (ゲートウェイキャッシュ型ボリューム)を構築する
下記のドキュメントを主に参考にします。
ボリューム ゲートウェイのセットアップ(ゲートウェイキャッシュ型とゲートウェイ保管型)
サービス一覧から「Storage Gateway」を選択します。※東京リージョンを選択していることを確認してください。
「Amazon EC2 で新しいゲートウェイをデプロイする」を選択します。
AWSマーケットプレイスのEC2インスタンスの起動画面になります。リージョンが東京リージョンになっていることを確認して、「Continue」を選択します。
リージョンが東京リージョンであること、インスタンスタイプがこの中で最安のm2.xlargeであることを確認して、「Accept Terms & Launch with 1-Click」を選択します。ここでは、詳細設定を省くため、1-Click Launchでの起動をしております。
EC2ダッシュボードに戻ると、m2.xlargeのインスタンスが起動中であることがわかります。ここでこのインスタンスのパブリックIPアドレスをメモしてください。
再度、Storage Gateway のダッシュボードに戻り、「Amazon EC2 で新しいゲートウェイをデプロイする」を選択します。
先ほどメモした、EC2インスタンスのパブリックIPアドレスを入力して「アクティベーションへ進む」を選択します。
AWS Storage Gateway 仮想マシンのアクティブ化の画面になります。ゲートウェイのタイムゾーンを「(GMT +9:00)東京~」、ゲートウェイ名に任意の名前を入力して、「自分のストレージゲートウェイのアクティブ化」を選択します。
ボリュームゲートウェイに「SGW-TEST」が追加されるので、それを選択して、再度「ボリュームを作成」を選択します。
が、エラーとなってしまいます。これは、アップロードバッファとキャッシュストレージのローカルストレージ設定がされていないことによるものです。なので、まずはローカルストレージを設定します。
「EC2ダッシュボード」→「ELASTIC BLOCK STORE」→「ボリューム」→「ボリュームの作成」を選択して下記のように入力して、作成を選択します。※アベイラビリティゾーンは、Storage Gatewayのインスタンスが起動している場所と同じところを選択します。
作成されたボリュームにNameタグで任意の名前を付けておきましょう。その後、右クリックで「ボリュームのアタッチ」を選択します。
ボリュームのアタッチで、Storage Gatewayのインスタンスを選択します。
これでアタッチ完了です。ではもう一度、ローカルストレージの設定をしてみましょう。
「Storage Gatewayダッシュボード」→「ゲートウェイ」→「ローカルストレージを設定」を選択します。
すると、先ほどはできなかったローカルディスク選択の画面になりました!プルダウンから「アップロードバッファに使用する」を選択して、保存を押します。
同様に、EBSボリュームを作成して、Cache Storage も追加しておきましょう。
これで、キャッシュストレージ、アップロードバッファの設定は完了です。
次に、ボリュームを作成します。
「SGW-TEST」→「ボリューム」タブの「ボリュームの作成」を選択します。
「CHAP」認証の設定は、こちらも「スキップ」を選択します。
ボリュームが作成されました!以上で、Storage Gatewayの作成は完了です。
この後は、このStorage Gatewayのインスタンスへ、iscsiマウントをするために TCP 3260 ポートをセキュリティグループで許可設定します。ここでは、iscsiクライアントとなるEC2インスタンスに設定されているセキュリティグループのグループIDを接続元として追加しています。
以上で準備が整いました、次にiscsiクライアントのEC2サーバから、iscsi接続を実施します。
iscsiクライアントのEC2サーバからiscsi接続をする
こちらのドキュメントを主に参考にします。
Red Hat クライアントからストレージボリュームへの接続
iscsi-initiator-utilsをインストールします。
[root@ip-172-31-8-243 ~]# yum install iscsi-initiator-utils |
ゲートウェイに対して定義されているストレージボリュームターゲットを検出するために、起動したStorage GatewayインスタンスのプライベートIPアドレスを指定して、次の discovery コマンドを使用します。
[root@ip-172-31-8-243 ~]# /sbin/iscsiadm --mode discovery --type sendtargets --portal 172.31.3.174:3260 Starting iscsid: [ OK ] 172.31.3.174:3260,1 iqn.1997-05.com.amazon:testvolume1 [root@ip-172-31-8-243 ~]# |
ターゲットに接続するには、以下のコマンドを使用します。
[root@ip-172-31-8-243 ~]# /sbin/iscsiadm --mode node --targetname iqn.1997-05.com.amazon:testvolume1 --portal 172.31.3.174:3260,1 --login Logging in to [iface: default, target: iqn.1997-05.com.amazon:testvolume1, portal: 172.31.3.174,3260] (multiple) Login to [iface: default, target: iqn.1997-05.com.amazon:testvolume1, portal: 172.31.3.174,3260] successful. [root@ip-172-31-8-243 ~]# |
ボリュームがクライアントマシン(イニシエータ)にアタッチされていることを確認するには、次のコマンドを使用します。
●接続前
[root@ip-172-31-8-243 ~]# ls -l /dev/disk/by-path total 0 lrwxrwxrwx 1 root root 10 Sep 15 09:31 xen-vbd-51712 -> ../../xvda lrwxrwxrwx 1 root root 11 Sep 15 09:31 xen-vbd-51712-part1 -> ../../xvda1 [root@ip-172-31-8-243 ~]# |
●接続後
[root@ip-172-31-8-243 ~]# ls -l /dev/disk/by-path total 0 lrwxrwxrwx 1 root root 9 Sep 15 09:40 ip-172.31.3.174:3260-iscsi-iqn.1997-05.com.amazon:testvolume1-lun-0 -> ../../sda lrwxrwxrwx 1 root root 10 Sep 15 09:31 xen-vbd-51712 -> ../../xvda lrwxrwxrwx 1 root root 11 Sep 15 09:31 xen-vbd-51712-part1 -> ../../xvda1 [root@ip-172-31-8-243 ~]# |
そのままでは/dev/sdaはマウントしようとすると、フォーマットエラーになります。
[root@ip-172-31-8-243 ~]# mount /dev/sda /mnt mount: /dev/sda is write-protected, mounting read-only mount: wrong fs type, bad option, bad superblock on /dev/sda, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. [root@ip-172-31-8-243 ~]# |
ので、ext4でフォーマットします。
[root@ip-172-31-8-243 ~]# mkfs.ext4 /dev/sda mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 26214400 4k blocks and 6553600 inodes Filesystem UUID: 04c4687d-f22d-4462-8eca-89b19b8e3ea3 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@ip-172-31-8-243 ~]# |
これでマウントできました!
[root@ip-172-31-8-243 ~]# mount -t ext4 /dev/sda /mnt [root@ip-172-31-8-243 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.8G 1.2G 6.6G 15% / devtmpfs 490M 60K 490M 1% /dev tmpfs 499M 0 499M 0% /dev/shm /dev/sda 99G 60M 94G 1% /mnt [root@ip-172-31-8-243 ~]# |
ここまでの内容をざっくり図にすると↓のような状況です。
以上のように、比較的簡単に? Storage Gateway を構築して接続するまでできました。ですがStorage Gatewayは実際に使ってみると、運用面でいろいろと癖があるので導入する場合は、いくつか注意する必要があります。
ちょっと古いですが今年の4月に私がJAWS-UG沖縄の勉強会で発表したときのスライド資料も参考にしてもらえると幸いです。
以上です。