がらくたネット


Object Storage

Object Storage

NTT CommunicationsのCloudn(クラウドエヌ)のストレージサービスObject Storageを使ってみた。
cloudianを利用したS3互換のストレージ。
awsのs3との違いで最大の売りは転送量課金が発生しないことと
クエリ数による課金が発生しないこと
なので、s3に比べると相当コストを計算できる

堅牢性は99.999999999%(eleven nine)としているのでまぁ大丈夫だろう
保全性は3分散でのデータセンターということだが東日本リージョン内と
思われるため、関東地方での保全だけであればS3に見劣りするのか?
s3もリージョン内での3分散だったはずなので、同等か。
リージョン(cloudnではロケーションと呼んでるみたい)が東日本と西日本、米国と3か所あるけど
Object Storage自体は東日本オンリーなので、どのリージョンから利用しても同じ場所に保存されるってわけwww

S3互換のREST APIが利用可能なので苦労しないだろうが
そこはやはり互換。一筋縄ではいかない部分もあったりする

ACL

バケットを作成すると、作成時のアカウントユーザがバケット所有者となる
デフォルトでは、OwnerがFULL_CONTROLになっている
個別にACLをつけるには[ユーザID]|[グループID]として設定する

awscliでObject Storageを利用してみる

S3互換でREST APIが使えるって事なので、awscli経由でObject Storageを操作してみることに

アプリエンジニアならば、SDKforPHPとかSDKforJavaScript等の言語にいくんだろうけど インフラ寄りエンジニアなので、シェル上で動作するawscliがしっくりくるんです あ、awscliの中身はPythonですね

Pythonなんですが、CentOS6やScientificLinux6等にインストールされているのは2.6系です
Python3.2以降でないとSNI非対応なんで、ObjectStorageの利用時にちょっと面倒な事があるので awscli用にPython3系をインストールして利用します

wget http://www.python.org/ftp/python/3.3.3/Python-3.3.3.tgz
tar zxf Python-3.3.3.tgz
cd Python-3.3.3
./configure --prefix=/usr/local/python3
make
make install

wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
unzip awscli-bundle.zip
sed -i "s\/usr/bin/env python\/usr/bin/env /usr/local/python3/bin/python3\g" ./awscli-bundle/install
./awscli-bundle/install -i /usr/local/awscli

vim /usr/local/awscli/lib/python3.3/site-packages/botocore/data/aws/s3.json
 "global_endpoint": "str.cloudn-service.com",  9行目を書換える

後は、awscli用のconfigを作成して利用開始すればOK

s3とObjectStorageのSNI部分の違い
これ、ちょっとはまった件

awscliからs3のバケットに接続するとき、普通に
[bucket名].s3.amazonaws.comに接続しにいく
この時、当然SSL接続するので証明書の確認が発生する
awscliのs3周りの証明書確認は戻ってきた証明書に含まれてる
ホスト名の文字列比較を採用している
で、s3で戻ってくるのは*.s3.amazonaws.comで、OKとなる

一方、ObjectStorageはバケットに接続するとき、
[bucket].str.cloudn-service.comに接続する
この際、クライアントがSNIに対応していないと
戻ってくる証明書に含まれているホスト名が
*.cloudn-service.comになってしまい、NGとなる
クライアントがSNI対応の場合は、*.str.cloudn-service.comが戻るのでOKとなる
ここでのクライアントはPythonに含まれているsslモジュールになる
sslモジュールはPython3.2からSNI対応になっている
こんなん、どこにも記述ないしー

ComputeからObjectStorageをマウントして利用する

ComputeインスタンスからObjectStorageのバケットをマウントする
利用するのは超有名なs3fs!
ベースにはFUSEも利用しているのでそっちの件も解決しておく

OSはSientificLinuxを利用したけど、CentOSでも同じはず
時間があったら試してみよーと思っている

まずはFUSEのインストール

http://fuse.sourceforge.net/
最新版(2013/12/17現在)の2.9.3をダウンロード
cd /usr/local/src
wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz
tar zxf fuse-2.9.3.tar.gz
cd fuse-2.9.3

インストール
./configure
make
make install

これで/usr/localにインストールされる
共有ライブラリ設定
vi /etc/ld.so.conf.d/local.conf
	/usr/local/lib64
	/usr/local/lib
ldconfig
ldconfig -v
	libfuse.soが含まれているかを確認
pkg-config --modversion fuse
	fuseのバージョンが表示されるかを確認

次にs3fsのインストール
ここで、Cloudn専用にするためのおまじないをしておく(sedの部分です)
デフォルトでSSL接続します

https://code.google.com/p/s3fs/
最新版(2013/12/17現在)の1.74をダウンロード
wget https://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
tar zxf s3fs-1.74.tar.gz
cd s3fs-1.74

Cloudn仕様に変更
sed -i "s/http:\/\/s3.amazonaws.com/https:\/\/str.cloudn-service.com/g" src/s3fs.cpp
sed -i "s/http:\/\/s3.amazonaws.com/https:\/\/str.cloudn-service.com/g" src/s3fs_util.cpp
./configure
make
make install

これで/usr/localにインストールされる
システムワイドのパスワードファイルを作成
vi /etc/passwd-s3fs
	[Access Key]:[Secret Access Key]
chmod 640 /etc/passwd-s3fs
マウントのテスト
	/test-cloudnを作成してここにbucketというバケットの下のdataフォルダをマウントする場合
	mkdir /test-cloudn
	s3fs bucket:/data /test-cloudn -o noempty,allow_other

これで、s3fs経由でObjectStorageが利用可能になる
s3fsでマウントする時のオプションは色々悩む
結果的にはallow_otherを付けておけばオケって感じでした。

ちなみに。
マウントしたファイルシステムは容量が256T!!
いつ一杯にできるのだろうか…