FJCT Tech blog

富士通クラウドテクノロジーズ公式エンジニアブログです

富士通クラウドテクノロジーズ

FJCT/Tech blog

クラウドストレージからオブジェクトストレージに移行した話

この記事は 富士通クラウドテクノロジーズ Advent Calendar 2018 の7日目の記事です。
こんにちは。FJCTでインフラエンジニアをしています id:tunakyonn です。
ニフクラには2018年12月7日現在、クラウドストレージ(旧)オブジェクトストレージ という2種類のストレージサービスがあります。 この2種類のうち、クラウドストレージ(旧)は2019年1月25日で終了となります。
そこで今回は、自分がクラウドストレージ(旧)からオブジェクトストレージにファイルを移行した時のお話をしたいと思います。

どのように移行するのか

クラウドストレージ(旧)からオブジェクトストレージにファイルを移行する際、移行用にサーバーを用意する必要があります。 以下の画像のようにクラウドストレージ(旧)のデータを移行用のサーバーに一時持ってきて、そのデータをオブジェクトストレージにアップロードするのが基本的な流れになります。

f:id:tunakyonn:20181207094154p:plain

この移行用のサーバーにツールなどを入れることによって、ストレージのバケットにあるファイルを移行することができます。
今回はこのファイルの移行方法について、自分が検証した2種類の方法をご紹介いたします。

s3fsとaws cliを使う場合

こちらはニフクラブログの ストレージサービス間でデータの移行を行う方法 でも紹介されている方法になります。 そのため、詳しい導入手順や実行例については省略いたします。
ここではこの手順を実行する際の注意点やTipsについて、記載いたします。

s3fsのマウントについて

s3fsのマウントのコマンドがブログ内にありますが、たまにファイルの権限のためかaws cliのsyncコマンドを実行するとs3fs内のファイルが読み込めずにエラーになることがあります。その際は以下のコマンドのようにumaskオプションを使用することでファイルが読み込める場合があります。

s3fs -f srcbucket  /src_dir -o umask=0000,sigv2,url=https://ncss.nifty.com

移行速度について

s3fsでの読み込みの速度やaws cliによるアップロードの速度がボトルネックとなってしまい、最高でも200KB/sしか出なかったりクラウドストレージからデータが読み込めなくなってエラーが出たりします。
そのため、大容量・大多数のファイルが上がっているバケットへの移行には向かないと思います。

Tips: ストレージのバケットにある全ファイル数と全ファイルサイズを取得する方法

ここではストレージを移行する前に、バケットにある全ファイル数と全ファイルサイズを取得するコマンドについて紹介します。
この情報を取得するにはaws cliを用いて、以下のようなコマンドを流すとstorage_result.txtに各ファイル名とサイズが出力されていき、最後にバケット全体のファイル数とファイルサイズが出力されます。

aws --endpoint-url https://ncss.nifty.com s3 ls s3://test-bucket/ --recursive --human --sum > storage_result.txt

githubにあるmigrate_storage_toolを使う場合

こちらはgithubに上がっている migrate_storage_tool を用いる方法です。 実行環境やインストール方法、実行方法についてはリポジトリのREADME.mdに記載されてあるので割愛いたします。
ここでは、config.ymlに設定する値について、2つのケースを例にして説明します。

1ファイルの容量が大きくないが、ファイル数が多い場合

この場合は、並列で移行した方が移行速度が上がります。そのため、cpu_numberをできるだけ大きな値にすることを推奨します。 ですが、cpu_numberは最大でも移行用のサーバーのCPUコア数にしてください。

ファイル数は少ないが、1ファイルあたりの容量が大きい場合

この場合は、ファイル数が少ないので無理にcpu_numberを大きな値にする必要はありません。 逆に色んな値を大きくした状態で実行するとメモリが足らなくなったりする場合があります。 オススメの設定としてはgc_execution_intervalの値を一桁台にすると良いと思います。 また、コード内にアップロードのリトライ回数である retry_maxもコードを直接修正することで変更することができます。 こちらの値も小さくすることでサーバー側の負荷を減らすことができます。

※2018/12/7から、migrate_storage_toolはマルチアップロードにも対応しました。2GB以上のファイルを移行する場合はmultipartの設定をしてください。

最後に

私はストレージからファイルを移行する際、基本的には後者のmigrate_storage_toolを使っていました。
このツールを使ってクラウドストレージ(旧)に全ファイルで30TBあるファイルを移行するのに約1ヶ月もかかりました。このように、ファイル数やファイルサイズが大きいと移行に時間がかかってしまいます。まだクラウドストレージ(旧)を使用している方は早めの移行をお勧めいたします。

8日目は、 id:tymob さんの必要なデータの量は?90%の精度を出すためには?データサイエンスあるあるQ&Aです。