BSD界隈四方山話

第7回ZFSベストプラクティス-FreeBSD Journal March/April 2015

FreeBSD Journal - DON'T MISS A SINGLE ISSUE!

FreeBSD Foundationは2014年から隔月の電子雑誌FreeBSD Journalを販売しています。FreeBSDコミュニティやコミッターの最前線で活躍しているメンバーによる執筆が特徴で、2年目に入ってからも購読者数を増やしています。

図1 FreeBSD Journal on iPad
図1 FreeBSD Journal on iPad

FreeBSD Journalは各号ごとに購入することもできますが、年間購読のサブスクリプションでの購入がお勧めです。だいぶ割安で各号をダウンロードできるようになります。iPad、iPhone、Android、Kindleなどのデバイスから購入できるほか、Webブラウザ版の提供も始まっています。

図2 ZFS BEST PRACTICES on FreeBSD Journal March/April 2015
図2 ZFS BEST PRACTICES on FreeBSD Journal March/April 2015

執筆現在の最新版となる「FreeBSD Journal March/April 2015」にAllan Jude氏による記事「ZFS BEST PRACTICE」が掲載されています。Allan Jude氏はHTTPおよび動画配信のCDNサービスを提供しているScaleEngineのバイスプレジデントを務めています。FreeBSD ZFSエキスパートの一人です。

Allan Jude氏は多くのZFSユーザが、ZFSとこれまでのファイルシステムの違いを誤って理解しているため、その結果として不適切な状況が発生し、なにかしらの問題に遭遇していると指摘しています。いくつかのベストプラクティスを通じて、誤ったやり方を避け、適切にZFSを活用していこう、といった内容の記事になっています。FreeBSD ZFSを使ってストレージを構築するユーザさんにとっては特に参考になるベストプラクティスがまとまっています。この記事のためにこの号を購入するのは充分ありです。

FreeBSD Journalでどういったコンテンツが提供されているのか紹介する意味も込めて、今回は「ZFS BEST PRACTICES」の内容の簡単な要約を紹介します。

ハードウェアRAIDはHBAで使おう

ZFSでストレージを構築するタイプのマシンではRAIDコントローラを経由してディスクを使うことが多いと思いますが、ここで誤ってハードウェアRAID側の機能でRAIDを実装し、カーネル側に単一のディスクストレージとしか見えないようにするユーザがいるという点を指摘しています。それではZFSの恩恵がまるで受けられないといいます。ZFSの提供するデータ保護機能の恩恵を受けるには、RAIDコントローラはシンプルにHBA(ITまたはJBODモード)で使うことを薦めています(RAIDカードによってはすべてのディスクを単一のRAID 0としてセットアップする必要があります⁠⁠。

ZFSの特徴の一つはデータロスが発生しないように冗長化する点にありますが、これは少なくともディスクが2つ以上あって、冗長化の構成を採用している時に限られます。ストレージが単一にしか見えないと、この利点を活かすことができません。

ZFSはECCメモリじゃなくても大丈夫

Allan Jude氏は多くの記事やポストがZFSを使う場合にはECCメモリを使う必要があると指摘しているといいますが、そうではないと説明しています。ZFSの主要開発者であるMatt Ahrens氏の次の発言を引き合いに出し、ZFSがそうしたメモリエラーに対して強い特性を持っていることを指摘しています。

⁠ZFS on a system without ECC is no more dangerous than any other file system on a system with ECC.(ECCメモリを使っていないマシンで動作しているZFSは、ECCメモリを使っているマシンで動作するファイルシステムと同じくらい安全ですよ。)⁠

ただしAllan Jude氏は、高い可用性が求められ、かつ、ECCメモリを購入するコストがそれに充分見合うと判断するのであれば、ECCメモリを使うことにはなんら問題がないとも説明しています。メモリエラーの発生の危険性を抑えることができ、アプリケーションクラッシュなどの問題が低減するからだとしています。

それでもバックアップは必要

ZFSによってより安全にデータを保持できるものの、誤ってプールを削除してしまうとか、ディスクリプレース時に誤ったディスクをリプレースしてしまうとか、ヒューマンエラーによってデータを消失することがあるため、バックアップはちゃんと取りましょうと説明しています。

ZFSはバックアップを取る方法をいくつか提供しています。スナップショット、インクリメンタルレプリケーション機能、プールスプリットなどの機能が紹介されています。

ディスクラベルには物理スロット番号とシリアル番号

ZFSでストレージを組むようなケースでは大量のディスクを扱います。このため、ディスクにはそれぞれラベルを貼って人間が認識しやすくして運用するのが普通です。Allan Jude氏はプロダクションシステムの経験から、⁠物理スロット番号-ディスクのシリアル番号」といった組み合わせをラベルとするのが扱いやすかったと説明しています。

Allan Jude氏は36スロット搭載したラックマウントプロダクトを例に出し、前面に24スロット、背面に12スロットが設置できる場合、たとえばフロントの6番目に配置したディスクであれば「f06-シリアル番号」のようなラベルを張ると良いと述べています。物理スロット番号を入れることでオペレータが作業しやすくなるほか、シリアル番号を入れることで不具合への対応やディスクの特定などが容易になるとしています。

ラベルはgpart(8)コマンドで次のように作成しています。

図3 ディスクにラベルを張る方法の例
gpart modify -i 2 -l f06-シリアル番号 da0

これで/dev/da0は「/dev/gpt/f06-シリアル番号」でアクセスできるようになります。ただし、ラベルは15文字以内と決まっていますので、長さが15文字を超える場合には、シリアル番号の下の方を優先して利用するなどして全部で15文字以内に納めれば良いだろうとしています。

ディスクのセットアップはFreeBSD流で

ディスクのセットアップに関してはさまざまな情報がWebに掲載されています。その多くは、ディスクは性能を発揮するためにすべてZFSで使用するほうが良いというものですが、それはSolarisの場合であってFreeBSDの場合にはその限りではないと指摘しています。ブート領域を設けること、スワップ領域を設けること、そのうえでZFSプール領域を設けること、アライメントを意識したパーティショニングをすること、などがベストプラクティスとして紹介されています。

掲載されているサンプルコマンドは次のようになっています。

図4 ディスクセットアップコマンドのサンプル
# gpart create -s gpt ada0
# gpart add -t freebsd-boot -l bootfs0 -s 512k -a 4k ada0
# gpart add -t freebsd-swap -l swap0 -s 2g -a 4k ada0
# gpart add -t freebsd-zfs -l f01-シリアル番号 -a 4k ada0
# gpart show -l ada0
=>       34 7814037100   ada0  GPT  (3.7T)
         34          6         - free -  (3.0K)
         40       1024      1  bootfs  (512K)
       1064        984         - free -  (492k)
       2048    4194304      2  swap0  (2.0G)
    4196352 7809839194      3  f01-シリアル番号  (3.7T)
 7814035456       1678         - free -  (839k)
# 

ブート領域を別領域として取っているのは、システムが起動しなくなった場合でも確実に起動ができるようにするため、スワップ領域を別途確保しているのは、スワップとして利用するのみならず、ディスク交換時にディスクサイズが異なっていることがあり、そうした際の差異を吸収するための領域として利用できるためといった説明があります。

興味深いプラクティスです。Webで公開されているZFSのベストプラクティスはSolarisに由来するものが少なくありません。FreeBSD JournalにはFreeBSDに特化した情報がまとまっています。特に現場でFreeBSDを利用しているエンジニアにとって有益な情報源といえる記事が掲載されています。

プール設計は最も難しいポイント

ディスクの設定が済んだらプールの作成に入るわけですが、一度作成してしまったらそこからは変更できないので、ここは充分検討する必要があるとしています。プールは組み方次第で大きく性能が変わります。Allan Jude氏は記事の中でディスクを2つ使うパターンから36個使うパターンまでで、RAID 10(ミラー⁠⁠、RAID-Z1、RAID-Z2を構築した場合の読み込みIOPS、書き込みIOPS、読み込み速度、書き込み速度、利用できる容量、フォールトトレランス数について表にまとめています。

ZFSのプールを設計するうえでこの表は大きな指針になります。たとえば4ディスクでRAID-Z1を構築した場合の読み込みIOPSは250、これに比べて36ディスク使ってRAID-10構成にした場合には読み込みIOPSは9000と記載されています。同時に壊れても大丈夫なディスクの数も参考にしつつ、目的の構成を選ぶ際の参考になります。興味がある方はFreeBSD Journalを読んでみてください。March/April 2015の9ページ目に掲載されています。

ARCはZFSの性能を大きく左右します

ZFSの性能はそのキャッシュであるARCのサイズによって大きく左右することが知られています。Allan Jude氏は少なくとも数GBはカーネルとアプリケーション用に残しておいて、それ以外のメモリをARCに適用することを一つの指針として挙げています。

それ以外でも圧縮機能を有効にすると入出力速度が速くなることなどが紹介されているほか、重複排除機能やリザベーション機能を使う時の利点と欠点なども説明されています。

進む情報共有

FreeBSDコミュニティ、それはユーザから開発者、ベンダ関係者まで含みますが、さまざまな方法で情報を共有し、活用する取り組みを進めています。特にこの数年はベンダと開発者の間で情報共有が進んだことが、FreeBSDの活発な活動につながっています。

Web上にはさまざまな情報がまとまっていますし、FreeBSDの場合はハンドブックやWikiが充実しているので、大概の情報はそこで得られます。しかし、FreeBSD Journalのように一つのトピックに関してある程度まとまった情報が得られるものは、Webから得られる情報には少ないといえます。

FreeBSD Journalの購読はFreeBSDプロジェクトを支援することにもつながります。また、FreeBSD Journalに寄贈したい記事(英語)がある場合にはぜひご連絡お願いいたします。

告知 FreeBSD勉強会

  • 第39回 FreeBSD勉強会
    • 2015年6月19日(金)19:00~21:00
    • The Design and Implementation of the FreeBSD Operating System (2nd Edition) 読書会 48ページ Filestores~
  • 第40回 FreeBSD勉強会
    • 2015年7月9日(木)19:00~21:30
    • The Design and Implementation of the FreeBSD Operating System (2nd Edition) 読書会

おすすめ記事

記事・ニュース一覧