ニフクラ ブログ

ニフクラ/FJcloud-Vやクラウドの技術について、エンジニアが語るブログです。

s3fsでニフクラストレージをマウントする

こんにちは、大分久々の記事になってしまったわたなべです。ご無沙汰していたこの春に、前職を退職して現在はフリーのエンジニアとして活動しています。

前回まではAPIに関する記事を数本書いていますが、今回から「ニフティクラウド ストレージ」に関して幾つか記事を書きたいと思います。

「ニフティクラウド ストレージ」の概要

「ニフティクラウド ストレージ」は昨年2011年9月に正式提供が開始された、大容量・大量のデータを容量を気にせずクラウド上に保存できるサービスです。昨今では、コンピュータシステムで扱うデータ量は増える傾向にあります。また、BCPやDRなどの実現の為にこれらのデータのバックアップは重要な課題です。「ニフティクラウド ストレージ」はこのような大量・大容量のデータの保存先として利用しやすいサービスです。「ニフティクラウド ストレージ」の特徴は以下の通りです。

    容量無制限

     通常のハードディスクと違い容量に制限が無い

    従量課金

     利用した分だけ利用料金がかかるので無駄が無い

    自由度の高いAPIによるアクセス

     Amazon S3互換の自由度が高いAPIを利用して独自のシステムを構築可能

    高い信頼性

     トリプルミラーによる冗長化

    分割アップロードによる高速アップロード

     GB/TBクラスのデータも分割アップロードで高速にアップロード可能

    「ニフティクラウド ストレージ」は通常のハードディスクとは違いサーバーにマウントすることは出来ません。データの管理はコントロールパネルまたはAPIを使用する必要があります。しかし、s3fs - http://code.google.com/p/s3fs/ を使用すると「ニフティクラウド ストレージ」上のファイルを通常のローカルファイルと同じように扱うことが出来ます。今回は、s3fs-cloudpack - https://github.com/memorycraft/s3fs-cloudpack を使用して「ニフティクラウド ストレージ」をマウントする方法を解説します。

    なお、以下の内容はニフティクラウド上のCentOS 6.2 plain 上で動作を確認しています。

    s3fs-cloudpackの設定
    ビルドに必要なパッケージのインストール

     s3fs-cloudpackはバイナリパッケージが存在しないためソースからインストールする必要があるため、まずは以下の要領でビルドに必要なパッケージをインストールします。

    # yum install -y 
    gcc 
    gcc-c++ 
    libstdc++-devel 
    curl-devel 
    libxml2-devel 
    openssl-devel 
    mailcap 
    make
    

    FUSEのインストール

     s3fsはFUSE - http://fuse.sourceforge.net/ というモジュールを使用してファイルシステムの機能を実現しています。以下のようにFUSEをインストールします。

    # cd /usr/local/src
    # wget "http://sourceforge.net/projects/fuse/files/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz/download"
    # tar xfz fuse-2.8.5.tar.gz
    # cd fuse-2.8.5
    # ./configure prefix=/usr
    # make
    # make install
    # ldconfig
    # modprobe fuse
    

    s3fs-cloudpackのインストール
    # cd /usr/local/src
    # curl -L https://github.com/memorycraft/s3fs-cloudpack/tarball/master -o s3fs-cloudpack.tgz # tar xfz s3fs-cloudpack.tgz # cd memorycraft-s3fs-cloudpack-a5e4da3 # chmod 755 configure # export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig # ./configure prefix=/usr # make # make install

    s3fs-cloudpackの設定

     s3fs-cloudpackはREST APIを使用して「ニフティクラウド ストレージ」にアクセスするためAPIアクセスキーを設定します。アクセスキー/シークレットアクセスキーはコントロールパネルで作成・取得することが出来ます。

    # vim /etc/passwd-s3fs
    [アクセスキー]:[シークレットアクセスキー]
    # chmod 640 /etc/passwd-s3fs
    

    最後に、「ニフティクラウド ストレージ」をマウントするディレクトリを作成します。

    # mkdir /mnt/ncs
    

    「ニフティクラウド ストレージ」をマウント

     「ニフティクラウド ストレージ」を利用するにはバケットと呼ばれる容器のようなものを作成する必要があります。コントロールパネルのクラウドストレージエクスプローラより作成してください。

    バケットの作成が完了したら以下のコマンドでファイルシステムとしてマウントすることが出来ます。

    # s3fs [バケット名] /mnt/ncs -o allow_other -o url=http://ncss.nifty.com
    

    正常にマウントが完了すると以下のように 256TBのファイルシステムとして表示されます。

    # df -h
    Filesystem            Size  Used Avail Use% マウント位置
    /dev/sda3              28G  1.4G   25G   6% /
    tmpfs                 499M     0  499M   0% /dev/shm
    /dev/sda1             504M   53M  426M  12% /boot
    s3fs                  256T     0  256T   0% /mnt/ncs
    

     マウントが完了すればあとは通常のハードディスクと同じようにアクセスすることが可能です。ただし、ネットワーク越しでのアクセスが行われるためハードディスクと比べるとアクセス速度はかなり遅いので注意が必要です。筆者がdbenchを使って計測した結果では 0.9MB/sec?2.5MB/sec 程度の速度でした。

    まとめ

     s3fsを利用することでAPIを使用するよりも簡単に「ニフティクラウド ストレージ」を利用することが出来ることがおわかりいただけたかと思います。アクセス性能はハードディスクに劣りますが、容量に制限の無いことや可用性は非常に魅力的です。また、ローカルファイルと同じようにアクセスすることが出来るため、既存のアプリケーションへの適用も比較的容易に実現できると思います。