2013年4月26日金曜日

Tsunami-UDP で vmdk の高速転送してみた

Iconshock - http://www.iconshock.com

トラブルは最短・最速で終わらせたい! @snicker_jp です。


もくじ



きっかけ


トラブルが起きて、 2TB 弱ほどの vmdk ファイルを転送する事になったので、その顛末です。

トラブルの経緯を簡潔に説明すると

容量拡張⇒残ディスクすくな⇒起動⇒あがんね・・・どうしよ・・・(´・ω・`)

デカイとこ転送だ!⇒12MB/s ⇒終わるの二日後かよ・・・(T^T)

担当者談

イメージ図:


※参考までに
12MB/s ⇒ 96Mbps


「JAWS DAYS」は役に立つ!

そこで、「JAWS DAYS 2013」のセッションで知った、

「Obama for America」の リージョン間転送 にも使われた「Tsunami UDP Protocol」を検証がてら使ってみたら、すごいことになったのでご紹介します。




大事なこと


今回は「VMware ESXi」の「データストア」を使って起きたことですが、

大事なことなので前もって書いておきます。

データストアは総容量の最低20%は空けておくべし!(`・ω・́)ゝ



前提条件


  • VMware ESXi 4.1 or 5.1
  • Tsunami UDP Protocol
  • Linux x86_64 (CentOS想定)  ← tsunami-udpコンパイル用

作業の流れ


  • Tsunami UDP Protocolのダウンロードとコンパイル
  • ESXi へ バイナリを転送
  • ESXi 5 の FireWall をいったんunload
  • Tsunami UDP サーバーの起動
  • Clientから受信

イメージ図:




Tsunami UDP Protocolのダウンロードとコンパイル


コンパイル用のLinux(x86_64)で

  • Tsunami UDP Protocol 本家のリンクから、ソースのダウンロード


今回使ったソース:
tsunami-v1.1-cvsbuild42.tar.gz

suz-labさんの記事を参考にコンパイルです。

  • suz-lab - blog: "Tsunami UDP"をインストールしてみた
    http://blog.suz-lab.com/2011/06/tsunami-udp.html
  • "aclocal/autoconf/automake" が必要なので、無ければ以下のコマンドでインストール

    sudo yum install autoconf
    sudo yum install automake
    

    (aclocalはautomakeの中に)
  • ソースの解凍とmake

    tar zxvf tsunami-v1.1-cvsbuild42.tar.gz
    cd tsunami-udp-v11-b42
    make
    
  • make中のメッセージ

    [snicker_jp@devdev tsunami-udp-v11-b42]$ make
    sh ./recompile.sh
    Running aclocal...
    Running automake...
    Running autoconf...
    Configuring Tsunami version 9.2
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking build system type... x86_64-unknown-linux-gnu
    checking host system type... x86_64-unknown-linux-gnu
    checking for gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables...
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ANSI C... none needed
    checking for style of include used by make... GNU
    checking dependency style of gcc... gcc3
    checking for ranlib... ranlib
    checking for main in -lpthread... yes
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating client/Makefile
    config.status: creating rtclient/Makefile
    config.status: creating common/Makefile
    config.status: creating include/Makefile
    config.status: creating server/Makefile
    config.status: creating rtserver/Makefile
    config.status: creating util/Makefile
    config.status: executing depfiles commands
    make[1]: ディレクトリ `/home/snicker_jp/tsunami-udp-v11-b42' に入ります
    Making clean in rtclient
    ~ 略 ~
    make[2]: `all-am' に対して行うべき事はありません.
    make[2]: ディレクトリ `/home/snicker_jp/tsunami-udp-v11-b42' から出ます
    make[1]: ディレクトリ `/home/snicker_jp/tsunami-udp-v11-b42' から出ます
      
    You can do a 'sudo make install' to install binaries into /usr/bin
      
    [snicker_jp@devdev tsunami-udp-v11-b42]$
    

    ↑こんなメッセージなら成功のはずw

ESXi へ バイナリを転送


コンパイル用のLinux(x86_64)で
  • tar で固める

    tar zcvf tsunami-udp-v11-b42.tar.gz tsunami-udp-v11-b42
    
  • 2台に転送

    scp tsunami-udp-v11-b42.tar.gz [ESXiのIP]:.
    
ESXi で
  • 解凍

    tar zxvf tsunami-udp-v11-b42.tar.gz
    
  • 確認

    cd /
    ls -d tsunami-udp-v11-b42
    

存在確認出来ればとりあえずOK

ESXi 5 のFWをいったんunload


  • ESXi 5 で

esxcli network firewall unload

これで、解放されます

(コラム)ちなみに、個別にFWにポートを開けるには



↑ここを参考に

/etc/vmware/firewall

にxmlを保存して「esxcli network firewall refresh」すれば出来るはずなんですが、なぜかうまくいかなかったので・・・。

いったん、「unload」しました。

Tsunami UDP サーバーの起動


  • 送信元 ESXi で

    cd /vmfs/volumes/[データストア名]/
    cd [移行フォルダ]
    ※ Tsunamiのデーモン起動
    /tsunami-udp-v11-b42/server/tsunamid *
    

Clientから受信


  • 送信先 ESXi で

    cd /vmfs/volumes/[データストア名]/
    mkdir [保存フォルダ]
    cd [保存フォルダ]
    
  • TsunamiのClient起動

    /tsunami-udp-v11-b42/client/tsunami
    Tsunami Client for protocol rev 20061025
    Revision: v1.1 devel cvsbuild 42
    Compiled: Apr 24 2013 15:50:41
    tsunami> connect [tsunamidを起動したサーバーIPなど]
    Connected.
    
    tsunami> get *
    Requesting all available files
    
    Server is sharing 14 files
    

    ↑うまくいけばこんな感じで、転送が始まります。

  • 実際の転送状況


600Mbps越え!
(」・ω・)」うー!(/・ω・)/にゃー!

※参考までに
600Mbps ⇒ 75MB/s

USB2.0規格最大速度
480Mbps ⇒ 60MB/s

USB2.0の規格最大速度より早いので、USB2.0の外付HDDに転送するより速いです!

忘れていたんで追加!

これって、どうやらServerの方は「Ctrl-C」やらしても切れないので・・・
ps なりして、プロセスを直接切ります。
例:
kill -9 [tsunamid のプロセス番号]
これで、大丈夫だと思います!(^^;; ヒヤアセ

まとめ


  • Tsunami UDP Protocol すげー SUGEEEEEE(゚Д゚)EEEEEEEEE!!
  • ESXi 5 から FW有効になってるから気をつけよう!
  • データストアの残容量に気を付ける

参考リンク


Zenback