ひさしぶりだけど、ただのメモ。
前に 同じ入力で複数処理をしたい ってのをメモったんだけど、これと rsh で zfs send では使わなかった mbuffer の合わせ技です。
お題
host A にある zfs snapshot を host B と host C にまとめて send したい。
素直にやるなら、 A -> B に送ったあとに B -> C とかやればいいんですけど、けっこう時間かかることが多いので待つ時間が無駄な気がしますよね。
MySQL で MyISAM なデータベースが入ったディレクトリがそのまま zfs になってれば、複数 slave を作るのも楽ちんです。やっぱ MyISAM 最高だね!
回答
- host A (送信側)
ichii386@hostA% time pfexec zfs send -v hoge@snap | mbuffer -R60M -O hostB:10001
- host B (プロキシ的な)
ichii386@hostB% time mbuffer -I10001 | tee >/dev/null >(mbuffer -O hostB:10002) >(mbuffer -O hostC:10002)
- host B (受信側)
ichii386@hostB% time mbuffer -I10002 | pfexec zfs recv -F hoge@snap
- host C (受信側)
ichii386@hostC% time mbuffer -I10002 | pfexec zfs recv -F hoge@snap
GNU screen とかで 4 つターミナル開いて、下から順に実行していきましょう。最後に一番上の send を実行したら、下 3 つが一斉に動き出します。
こんなかんじで A -> B(proxy) -> B, C と並列に受信できました。