テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

RFC: ホットスワップ用ターゲット

既存の技術ですでに出来ることならばそちらを使うので教えて欲しい.

キャッシュデバイスとしてSSDを使う時, SSDが単一障害点となる. つまり, SSDが死んだらデータが消える. ライトブーストの場合はログ構造化の特性により, 仮にSSDが死んでもストレージの状態が時系列的に少し戻ってしまうだけなので他のキャッシュソフトウェアよりはタチが良いが, それでもデータが消えることには変わりない.

対策としてはSSDRAID冗長化する方法があるが, 同じタイプのSSDを使うといきなり全死することもあり, RAIDとして機能しない(製品によっては生産ごとに敢えて寿命を散らしているものもあるが, 全部ではない). RAID自体をキャッシュソフトウェアのロジックに組み込むことによってオーバーヘッドを無くすという研究はあるが, これもあまり解決にならない.

そこで, SSDが死ぬことは避けられないとして, 死ぬ前に交換することを考える. もっとも簡単な方法は, IOを全部止めてしまい, キャッシュデバイスの情報をddでコピーすることだ. これはどう考えても, 10分はかかる. コピー自体は高速だが, さまざまな手間が上乗せされて, 10分はかかるだろう. 仮に土日はIOがないだとか, メンテ宣言出来るということであればこれでもいいが, めんどうな意味はある.

世の中にはホットスワップという技術があり, デバイスが壊れたら情報をこいつにコピーをしてRAIDを再構築出来る. これをやりたい. 同一のデバイスを2つ用意して, 外から「スワップしなさい」命令を送るとデータを同期して, 同期が終わった時点で主副を逆転する. スワップしなさい命令はデバイスが死んだ時でもいいし, 毎晩スワップさせるでもいい.

dmsetup create mysyncdev sync 0 $size
dmsetup create mycachedev writeboost 0 $size /dev/hdd /dev/mapper/mysyncdev
dmsetup message add /dev/sdb # main
dmsetup message add /dev/sdc # sub0
dmsetup message add /dev/sdd # sub1
dmsetup message swap /dev/sdd # sync sdb and sdd

コピーしつつ, コピー元デバイスに来るIOも同期をとり続けるのはなかなかめんどくさいが, 私ならばDMで実装出来るだろう. 例えばdm-syncという名前をつける.

DMにはこのような機能はない. では, DMの外にあるのか?私はそれを知りたい.