iscsi initiator+gjournalが固まる(2)

iscsi initiator+gjournalが固まるというのを前に書いた。
しかしどうやら、負荷のかけ方によっては、

  • 複数のiscsi targetに接続したとき
  • geom_gateを使ったzfsを作って書き込んだとき

にも同じように固まることが分かった。
この状態ではまると、gstatで問題のデバイスがキュー長が非零のままで止まり、いつまでたっても解消しない。
そして 、こっちのほうが困るのだが、再起動ができなくなる。panicですら自動再起動できずに止まる。カーネルのコアも吐けない。

マシン固有の問題か、それともほかのなにかか。同じ型番のマシン複数で起きてるから、個体のバグではなさそう。
とりあえずは環境を別のマシンに移して起きるか確認して、あとはシリアル経由でカーネルデバッグかな……。

GlusterFSの構成ディスクを交換する

図らずも一台のデータを壊してしまったので嬉々として復旧実験。
ノード自体は生きているが、brickの中身を壊しちゃったという場合の話。

参考にするのはGlusterFSの公式資料。

http://www.gluster.org/community/documentation/index.php/Gluster_3.4:_Brick_Restoration_-_Replace_Crashed_Server

  1. とりあえずglusterfsを止める。
    現状、FreeBSD版のservice stopだと子プロセスが残るのでkillallしてくださいな。
    (そのうち直します。あとglusterfsdじゃなくてglusterdが正しいという話もね……。)

    # service glusterfsd stop
    # killall glusterfsd
  2. ディスクを入れ替えたりいろいろする。
    newfsとかmountまで済ませる。
  3. brickのディレクトリを手動で作る。
  4. setextattrbinを持ってきてビルドしておく。(→おまけ)
  5. brickのディレクトリにvolume-idを設定する。ちょっと長いone-linerだけどこんな感じ。
    # cat /var/db/glusterd/vols/<ボリューム名>/info |
        perl -ne 'm/volume-id=/ and s/^.*=// and s/-//g and print' |
        setextattrbin user trusted.glusterfs.volume-id -stdin 
  6. glusterfsを起動して、healを開始させる。
    replicatedなら、

    # service glusterfsd start
    # gluster vol heal <ボリューム名> full

    disperseならNFSでマウントしてから、

    # find <マウント先> -exec stat {}\;

    などで復旧を開始。

おわり。

おまけのバイナリ値なxattrの話

標準のsetextattrだと文字列しか設定できない。
一応バイナリ(表示不可文字)も引き数に設定できるものの、万が一”00″が入ったらダメ。
たとえば、こんな風に消えてしまう。(これだけだとperlの責任が否定できないけどね)

# echo -n "110022" | perl -e 'print pack("H*", );' > a
# hexdump -C a
00000000  11 00 22                                          |.."|
00000003
# perl -e 'print $ARGV[0]' `cat a` | hexdump -C
00000000  11                                                |.|
00000001

そんなわけでsetextattrbinを作ったのです。

iscsi initiator+gjournalが固まる

glusterfs環境のパフォーマンステストのため、iscsi initiatorでNASに接続している/dev/da*に、gjournal labelでローカルなSSDをjournalとしてくっつけた。
newfsはうまくいってmountgluster volume createしてgluster volume start、と思ったら固まってしまった。

いろいろ条件を変えて速度測定したかったのになぁ……。

Continue reading

GlusterFSをESXiから使う(2)

XtreemFSに見切りをつけてGlusterFSに戻ってきた。

前回はVMware ESXiからつなぐとデータストアを表示しても何も表示されないままとなってそのうち切断されていたので、ここを調査&修正。
修正版はGitHubにcommit/push済み。(4853f4d)

2016/06/11追記: Makefileがコミットされてなかったりpatchが動かないとかひどいコミットミスがあったから直したよ!!
0118d4d

Continue reading

XtreemFSをFreeBSDで動かす(6) 書き込み速度の改善

どうもFreeBSD+OpenJDKのバグで、Selector.select(int)がタイムアウト前に返ってくる模様。
このせいでMRCやOSDのあるスレッドが空回りしてCPUを食いつぶすことがある。(よくある)

これを直してやって、7.4MB/sまで改善した。(前回は6MB/s)

# dd if=/dev/zero of=/mnt/xtfstest/test bs=65536 count=4096
4096+0 records in
4096+0 records out
268435456 bytes transferred in 36.120514 secs (7431662 bytes/sec)

2016/05/31追記:

上記はiSCSI+ZFS+SSD ZILでの測定結果。
気になって夜も眠れないので、UFS on SSDにOSDを置いて計ってみたら、6.7MB/sになった。
遅くなってるけど、きっと測定誤差だと信じたい。(だとすると改善も誤差だけど……)

# dd if=/dev/zero of=/mnt/xtfstest/test bs=65536 count=4096
4096+0 records in
4096+0 records out
268435456 bytes transferred in 39.965025 secs (6716759 bytes/sec)

正直なところ心が折れそうだけど、GlusterFSは(xattrが必要だから)zfsのzilで加速、とかができないし、微妙に柔軟性が足りない気がするのでもう少しがんばりたい。

Continue reading