読者です 読者をやめる 読者になる 読者になる

WalB v1.0 リリース

こんにちは.サイボウズ・ラボの星野です.

今日は,効率的なバックアップと非同期レプリケーションを目的とした Linux カーネルドライバ WalB についての簡単な紹介と,そのバージョン 1.0 のリリース告知をさせて頂きます.

WalB って何?

WalB は「ワルビー」と発音します.名前の由来は Block-level WAL です.WAL は Write-Ahead Logging (ログ先行書き込み) のことで,データベースの一貫性制御等に用いられます.

WalB を使うと,オンライン状態のブロックデバイスにおいて,アプリケーションやファイルシステムによるデータ書き込みによって生じる差分データを,ブロックデバイスをフルスキャンすることなく効率的に取得出来るようになります.

backup-and-replication
取り出した差分はそのままバックアップデータとして使うことが出来ます.また,それをリモートホストに転送してミラーボリュームに適用することで非同期レプリケーションを実現することも出来ます.バックアップとレプリケーションの両方を運用したい場合に WalB は一石二鳥の手段となります.

以下に WalB アーキテクチャを図示します. walb-architecture
WalB デバイスは,ふたつのブロックデバイスをそれぞれデータ用とログ用として使い,ひとつのブロックデバイスとして振る舞います.上層のファイルシステムなどから要求された read IO はデータ用デバイスに転送し, write IO は両デバイスに書き込むことで,読み書きできる通常のブロックデバイスとして振る舞うことに加え,差分データとしてログを取り出す機能を実現します.

WalB の特徴

WalB は性能オーバーヘッドを抑えることを意識して設計されました.大きな特徴は 2 つあります.

  • IO レスポンスのオーバーヘッドが小さい
  • 断片化しない

IO レスポンスの早さは,特にトランザクショナルデータベースシステムにおいては重要で,性能に大きく影響します.WalB は IO レスポンスを出来るだけ小さくする方式を採用しています.

断片化は,特に長期間運用するストレージにおいて, 深刻な性能問題を引き起こす可能性があります.WalB はラッパーデバイスと下位データデバイスとの間でのアドレス変換マップを持つ必要がないため,ブロックレベルの断片化が発生しません.

WalB は上記の特徴を実現するため,スナップショット管理機能を持っていません.最近の Linux カーネルでは,device-mapper におけるシンプロビジョニングデバイスのスナップショット機能を流用して,フルスキャンを必要としないバックアップや非同期レプリケーションを実現することも出来るようです.しかし,バックアップやレプリケーション目的では必ずしも必要ではないスナップショット管理のために,永続インデクス操作が必要になることや,ブロックレベルでの断片化が避けられないことを考えると,これらの用途においては WalB にアドバンテージがあると考えています.

WalB は DRBD の非同期レプリケーションの代替手段として使うことも考えられます.特に遠隔レプリケーション用途で,DRBD 単体では性能が出ず DRBD-proxy が使いたくなるような状況で WalB は魅力的に見えるかも知れません.ただし,WalB を用いても同期レプリケーションは出来ませんのでご注意ください.

WalB はブロックデバイスを提供し,その上に好きなファイルシステムを乗せて使うことができます.ファイルシステムレベルでスナップショット機能や差分取得機能など盛り沢山の btrfs は高機能ですが,果たして様々な用途で実用できるのでしょうか.例えば 1 年ほど前で少し古いですがこのようなレポートもあります.

btrfs -- probably not ready yet

以下に簡単な比較表を示しました. walb-alternatives-comparison
性能面で妥協したくない状況で,WalB を選択肢の一つに挙げていただければ幸いです.

WalB を使ってみたい方へ

WalB のソースコードは GitHub にて公開しています.

WalB repository at GitHub

ライセンスは GPLv2 or v3 です. Linux カーネルバージョン 3.2 もしくはそれ以降で動作します.アーキテクチャについては今のところ x86_64 のみ対応していますが,小規模な修正で他のアーキテクチャにも対応できると思われます.手元では Ubuntu 12.04 Server x86_64 を用いて動作確認しています. 現在ドキュメントは英語版しかありませんが,簡単な使い方も書いてあります.

WalB documents

GitHub レポジトリの Issue などもご活用下さい.

WalB の現状と今後

今回のリリースはカーネルドライバと最低限のユーザーランドツールを含んでいます.

WebDB Forum 2012 において WalB のコンセプトとプロトタイプの性能評価結果について発表する機会を頂きましたが,その後,一貫性制御ロジックに抱えていた問題の解決,DISCARD 命令対応,バグの修正,コードレビュー,そして多くのテストを経て,カーネルドライバについてはそれなりの品質に達したと判断したため,バージョン 1.0 を付けました.

WalB は弊社のクラウドインフラで使うために開発しましたが,現在は WalB を用いたバックアップおよびレプリケーションに関するユーザーランドツールの整備を行っている最中で,本来の目的での実運用にはもうしばらくかかりそうです.

バージョン 1.0 は便利に使うためにはまだ物足りないと思われるかも知れませんが,ログの記録,取り出し,および適用はできますので,簡単なバックアップシステムを直ぐに実現できます.手元では自分のデータを人質にしての運用を既に 2 〜 3 ヶ月続けておりますが,今のところデータは失われていません :)

今後,メインライン・カーネルに取り込んでもらうための活動もしていく予定です.

LinuxCon Japan 2013 で発表します

今週東京で開催される LinuxCon Japan 2013 において,An Efficient Backup and Replication of Storage というタイトルで WalB について口頭発表します.発表スライドは slideshare に置いてあります.アルゴリズムの詳細や性能評価グラフ等についてもまとめてありますので,興味のある方は是非ご覧ください.

おわりに

WalB の簡単な紹介とバージョン 1.0 のリリース告知をさせて頂きました.質問等ありましたら,気軽に email や twitter などで星野までメッセージを頂ければと思います.ハッシュタグは #walbdev をお使い下さい.

それでは.