web-dev-qa-db-ja.com

ハードウェアRAIDを使用したZFSのベストプラクティス

サーバーグレードのハードウェアを自由に使用できる場合、ハードウェアベースのRAID1などの上でZFSを実行することをお勧めしますか?ハードウェアベースのRAIDをオフにして、代わりにmirrorまたはraidzzpoolでZFSを実行する必要がありますか?

ハードウェアRAID機能がオフになっている場合、ハードウェアRAIDベースのSATA2およびSASコントローラは、非ハードウェアRAIDコントローラよりも読み取りおよび書き込みエラーを隠す可能性が高いですか、それとも低いですか?

カスタマイズ不可能なサーバーに関しては、ハードウェアRAIDコントローラーのコストが実質的に中立である(または事前に構築されたサーバー製品のコストを下げる)場合、その存在はホスティング会社が補完的なIPMIを提供する可能性を高めるためです。アクセス)、それはまったく避けられるべきですか?しかし、それは求められるべきでしょうか?

30
cnst

ZFSのアイデアは、ディスクがどのように動作しているかを可能な限り知らせることです。次に、最悪のものからより良いものへ:

  • ハードウェアRAID(ZFSには実際のハードウェアについての手掛かりはまったくありません)、
  • JBODモード(潜在的なエキスパンダーに関する問題:帯域幅の減少)、
  • HBAモードが理想的(ZFSはディスクに関するすべてを知っている)

ZFSはハードウェアについて非常に偏執的であるため、隠蔽が少ないほど、ハードウェアの問題により多く対処できます。 Sammitchで指摘されているように、RAIDコントローラー構成とZFSは、障害(ハードウェア障害など)が発生した場合に復元または再構成するのが非常に難しい場合があります。

一部のハードウェアRAIDコントローラーが組み込まれた標準化されたハードウェアの問題については、ハードウェアコントローラーに実際のパススルーモードまたはJBODモードがあることに注意してください。

18
Ouki

Q.サーバーグレードのハードウェアを自由に使える場合、ハードウェアベースのRAID1などの上でZFSを実行することをお勧めしますか?

A. ZFSをディスクに対して直接実行することを強くお勧めします。その間にRAIDの形式を使用しないでください。 RAIDカードを効果的に使用する必要があるシステムがZFSの使用を妨げるかどうかに関係なく、ZFSには、データの復元力よりもZFSのその他の利点があります。全体として、ZFSに単一のLUNを提供する基になるRAIDカードがある場合、ZFSはデータの復元力を向上させません。そもそもZFSを使用する唯一の理由がデータの復元力の向上である場合は、ZFSを使用するすべての理由を失っただけです。ただし、ZFSはARC/L2ARC、圧縮、スナップショット、クローン、およびその他のさまざまな改善点も提供しますが、その場合でも、おそらくファイルシステムが選択されています。

Q.ハードウェアベースのRAIDをオフにして、代わりにミラーまたはraidz zpoolでZFSを実行する必要がありますか?

A.はい、可能な場合。一部のRAIDカードでは、パススルーモードを使用できます。それがある場合は、これを行うことをお勧めします。

Q.ハードウェアRAID機能がオフになっている場合、ハードウェアRAIDベースのSATA2およびSASコントローラは、非ハードウェアRAIDコントローラよりも読み取りおよび書き込みエラーを隠す可能性が高いですか、それとも低いですか?

A.これは問題のRAIDカードに完全に依存しています。マニュアルを確認するか、RAIDカードの製造元/ベンダーに問い合わせて調べる必要があります。特に、RAID機能を「オフにする」ことで実際に完全にオフにならない場合は、そうする人もいます。

Q.カスタマイズ不可能なサーバーに関して、ハードウェアRAIDコントローラーのコストが実質的に中立である(または事前に構築されたサーバー製品のコストを下げる)場合、その存在により、ホスティング会社が提供する可能性が向上します。補完的なIPMIアクセス)、それはまったく避けられるべきですか?しかし、それは求められるべきでしょうか?

A.これは、最初の質問とほとんど同じです。繰り返しになりますが、ZFSを使用したいという唯一の願望がデータの復元力の向上であり、選択したハードウェアプラットフォームでRAIDカードがZFSに単一のLUNを提供する必要がある場合(または複数のLUN、ただしそれらにZFSストライプがある場合)、データの回復力を向上させるものは何もないため、ZFSの選択は適切ではない場合があります。ただし、他のZFS機能のいずれかが役立つ場合でも、それは役立つ場合があります。

追加の懸念事項を追加したいと思います。上記の回答は、ZFSの下でハードウェアRAIDカードを使用しても、データの復元力を向上させる機能を削除する以外にZFSに害を及ぼすことはないという考えに依存しています。真実はそれはもっと灰色の領域です。 ZFSには、rawディスクではなくマルチディスクLUNを渡した場合に必ずしも適切に動作するとは限らない、さまざまな調整可能要素と前提条件があります。これのほとんどは適切なチューニングで打ち消すことができますが、そのままでは、個々のスピンドルの上にある場合と比べて、大規模なRAID LUN上のZFSでは効率が良くありません。

さらに、従来のファイルシステムとは対照的に、ZFSがLUNと通信する方法がまったく異なるために、RAIDコントローラーやワークロードに慣れていないコードパスが頻繁に呼び出され、奇妙な結果になる可能性があることを示唆する証拠もあります。特に、個別のログデバイスも提供しない場合は、単一のLUNの上に配置したプールでZIL機能を完全に無効にすることで、おそらく自分自身に有利になるでしょう。もちろん、私は強くお勧めしますプールに個別のrawログデバイスを提供します(可能であれば、RAIDカードからのLUNではありません)。

15
Nex7

HP ProLiant SmartアレイRAID構成の上でZFSをかなり頻繁に実行しています。

どうして?

  • ブートパーティションではなく、データパーティションのZFSが好きだからです。
  • LinuxとZFSのブートは、おそらく今のところ私にとって完全なものではないからです。
  • HP RAIDコントローラは RAWデバイスパススルー を許可しないためです。複数のRAID 0ボリュームの構成は、RAWディスクとは異なります。
  • サーバーバックプレーンは通常、ドライブベイを特定のコントローラー専用にしたり、2つのコントローラー間で役割を分割したりするのに十分な柔軟性を備えていないためです。最近では、8ベイと16ベイのセットアップが最もよく見られます。本来あるべき姿をセグメント化するのに必ずしも十分ではありません。
  • しかし、私はまだZFSのボリューム管理機能が好きです。 zpoolを使用すると、動的に切り分けて、使用可能なディスク領域を最大限に活用できます。
  • 圧縮、ARC、L2ARCはキラー機能です!
  • ハードウェアRAIDの上に適切に設計されたZFSセットアップは、依然として適切な警告と障害アラートを提供しますが、ハードウェアのみのソリューションよりも優れています。

例:

RAIDコントローラー構成

[root@Hapco ~]# hpacucli ctrl all show config

Smart Array P410i in Slot 0 (Embedded)    (sn: 50014380233859A0)

   array B (Solid State SATA, Unused Space: 250016  MB)
      logicaldrive 3 (325.0 GB, RAID 1+0, OK)

      physicaldrive 1I:1:3 (port 1I:box 1:bay 3, Solid State SATA, 240.0 GB, OK)
      physicaldrive 1I:1:4 (port 1I:box 1:bay 4, Solid State SATA, 240.0 GB, OK)
      physicaldrive 2I:1:7 (port 2I:box 1:bay 7, Solid State SATA, 240.0 GB, OK)
      physicaldrive 2I:1:8 (port 2I:box 1:bay 8, Solid State SATA, 240.0 GB, OK)

デバイスリストのブロック

[root@Hapco ~]# fdisk  -l /dev/sdc

Disk /dev/sdc: 349.0 GB, 348967140864 bytes
256 heads, 63 sectors/track, 42260 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       42261   340788223   ee  GPT

zpool構成

[root@Hapco ~]# zpool  list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
vol1   324G  84.8G   239G    26%  1.00x  ONLINE  -

zpool詳細

  pool: vol1
 state: ONLINE
  scan: scrub repaired 0 in 0h4m with 0 errors on Sun May 19 08:47:46 2013
config:

        NAME                                      STATE     READ WRITE CKSUM
        vol1                                      ONLINE       0     0     0
          wwn-0x600508b1001cc25fb5d48e3e7c918950  ONLINE       0     0     0

zfsファイルシステムのリスト

[root@Hapco ~]# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
vol1            84.8G   234G    30K  /vol1
vol1/pprovol    84.5G   234G  84.5G  -
9
ewwhite

通常、RAIDアレイで構成されたディスクの上でZFSを実行しないでください。 ZFSはRAIDモードで実行する必要がないことに注意してください。個別のディスクのみを使用できます。ただし、実質的に99%の人がRAID部分のZFSを実行しています。ディスクをストライプモードで実行することもできますが、これはZFSの使用方法としては不十分です。他のポスターが言ったように、ZFSはハードウェアについて多くを知りたいと思っています。 ZFSは、JBODモードに設定できる、またはできればHBAに接続できるRAIDカードにのみ接続する必要があります。 IRC Freenodeチャネル#openindianaにジャンプします。チャネル内のZFSエキスパートが同じことを教えてくれます。HBAを提供しない場合は、ホスティングプロバイダーにJBODモードを提供するよう依頼してください。

6
chris

みなさんのために...あらゆるレイド上のZFSは完全な苦痛であり、MADの人々によってのみ行われます!...非ECCメモリでZFSを使用するように。

サンプルを使用すると、理解が深まります。

  • Raid1上のZFSでは、電源をオフにしていないときに1つのディスクにビットが変更されています...確認してください。ZFSは、読み取られたディスクに応じて、いくつかの損傷があるかどうかを確認します(Raidコントローラーはそのビットが変更されたことを認識せず、両方のディスクが正常であると考えました)...障害がVDEV部分にある場合... ZPOOL全体がすべてのデータを永久に失います。
  • Raid0上のZFS、1つのディスクの電源がオフになっていないときにビットが変更された...知っていることすべてを確認してください(Raidコントローラーはそのビットが変更されたことを認識せず、両方のディスクに問題がないと考えました)... ZFSはその損傷を確認しますが、失敗はVDEV部分にあります... ZPOOL全体がすべてのデータを永久に失います。

ZFSが適しているのは、ディスクに電源が入っていない場合(RAIDコントローラーはそれができない)に変更されたビットを検出することです。

これは、RAMモジュールのビットが要求されずに自発的に変化する場合と同じ問題です...メモリがECCの場合、メモリはそれを自動修正します。そうでない場合、そのデータは変更されたため、そのデータは変更されたディスクに送信されます;失敗がVDEV部分にある場合、その変更はUDEV部分にありません... ZPOOL全体がすべてのデータを永久に失います。

これはZFSの弱点です... VDEVが失敗すると、すべてのデータが永久に失われます。

ハードウェアRAIDとソフトウェアRaidは、自発的なビット変更を検出できません。チェックサムがなく、最悪の場合Raid1レベル(ミラー)であり、すべてのパーツを読み取って比較するわけではありません。すべてのパーツが常に同じデータを持っていると想定します。大声で)RAIDは、データが他のもの/方法によって変更されていないと推測します...しかし、ディスク(メモリとして)は、自発的なビット変更の傾向があります。

非ECCでZFSを使用しないでくださいRAMおよびRAIDディスクでZFSを使用しないでください。ZFSにすべてのディスクを表示させ、VDEVとプールを破壊する可能性のあるレイヤーを追加しないでください。

そのような失敗をシミュレートする方法... PCの電源を切り、そのRAID1のディスクを1つ取り出し、1ビットだけを変更します...再接続して、RAIDコントローラーが変更を認識できない方法を確認します...すべての読み取りがテストされるため、ZFSが可能チェックサムに対して、一致しない場合は、別の部分から読み取ります... RAIDが失敗したために再度読み取ることはありません(ハードウェアによる読み取り不可が失敗した場合を除く)... )... RAIDが読み取りを行うのは、「読み取り、そこから読み取れない、ハードウェア障害」と書かれている場合にのみ、別のディスクから読み取ろうとする...チェックサムが一致しない場合と同様に、ZFSが別のディスクから読み取った場合と同じように読み取る「ねえ、私はそこから読むことができません、ハードウェアが失敗します」と言います。

私がそれを非常に明確にすることを願っています...どのレベルのRaidでもZFSは非常に苦痛であり、データに対する完全なリスクです!非ECCメモリ上のZFSだけでなく。

しかし、(私を除いて)誰も言っていないことは:

  • 内部キャッシュを備えたディスクを使用しないでください(SHDDだけでなく、8Mibから32MiBキャッシュを備えたディスクなど)...一部のディスクは、このようなキャッシュに非ECCメモリを使用します
  • SATA NCQ(書き込みをキューイングする方法)は使用しないでください。電源が緩むと、ZFSが破壊される可能性があります。

それで、どのディスクを使うのですか

  • すべてのキューが電源障害時にディスクに書き込まれ、内部にECCメモリを使用することを保証する内部バッテリーを備えたディスク(申し訳ありませんが、それをすべて備えたものはほとんどなく、高価です)。

しかし、ねえ、ほとんどの人はこれをすべて知っているわけではなく、問題が発生したことは一度もありません...私は彼らに言います:わあ、あなたはどれほど幸運か、幸運が去る前に宝くじを購入します。

リスクがあります...そのような失敗の偶然が発生する可能性があります...したがって、より良い答えは次のとおりです:

  • ZFSとデータが実際に格納される場所(RAM、Raid、NCQ、内部ディスクキャッシュなど)の間にレイヤーを置かないようにしてください...

私は個人的に何をしていますか?

  • いくつかの層を追加して... USB 3.1 Gen2タイプCエンクロージャーで各2.5インチSATA III 7200 rpmディスクを使用し、一部のエンクロージャーをPCに接続するUSB​​ 3.1 Gen 2タイプAハブに接続し、他のエンクロージャーを別のハブに接続するPCの別のルートポートなどに接続すること。
  • システムでは、ZFS(Raid0レベル)の内部SATAコネクタを使用します。これは、不変の(LiveCDのような)Linuxシステムを使用するため、それぞれが内部ディスクの同一のコンテンツを起動します...そして、復元できるシステムのクローンイメージがあります。 (1GiBシステム未満)...また、トリックを使用してシステムをファイルに含め、RAMマッピングされたドライブを使用して、ブート時にクローンを作成するため、ブート後にすべてのシステムが実行されますRAMに... DVDにそのようなファイルを置くと、同じ方法でブートすることもできるので、内蔵ディスクに障害が発生した場合は、DVDでブートするだけでシステムは再びオンラインになります... SystemRescueCDと似たトリックですが、少しより複雑なため、ISOファイルは内部ZFSに置くことも、実際のDVDにすることもできますが、2つの異なるバージョンは必要ありません。

Raidに対してZFSに少し光を当てることができるといいのですが、物事がうまくいかないときは本当に苦痛です!

2
Claudio

要するに、ZFSの下でRAIDを使用すると、ZFSを使用するという考えがなくなるだけです。どうして? — RAIDではなく純粋なディスクで動作するように設計されているためです。

2
poige