Edited at

GlusterFSで "Server and Client lk-version numbers are not same, reopening the fds" て言われた際の対処法

More than 3 years have passed since last update.


問題

/var/lib/glusterfs/path-to-mount.log で以下のようなログが出ていたのをずっと放置してたんだが解決したのでメモ。

[2016-10-10 16:23:23.142607] I [MSGID: 114057] [client-handshake.c:1446:select_server_supported_programs] 0-saba2-client-2: Using Program GlusterFS 3.3, Num (1298437), Version (330)

[2016-10-10 16:23:23.143175] I [MSGID: 114046] [client-handshake.c:1222:client_setvolume_cbk] 0-saba2-client-2: Connected to saba2-client-2, attached to remote volume '/media/bricks/r16-box01-slot02.saba074/saba2'.
[2016-10-10 16:23:23.143211] I [MSGID: 114047] [client-handshake.c:1233:client_setvolume_cbk] 0-saba2-client-2: Server and Client lk-version numbers are not same, reopening the fds
[2016-10-10 16:23:23.143442] I [MSGID: 114035] [client-handshake.c:201:client_set_lk_version_cbk] 0-saba2-client-2: Server lk version = 1
[2016-10-10 16:23:23.146428] I [MSGID: 114057] [client-handshake.c:1446:select_server_supported_programs] 0-saba2-client-6: Using Program GlusterFS 3.3, Num (1298437), Version (330)
[2016-10-10 16:23:23.146859] I [MSGID: 114046] [client-handshake.c:1222:client_setvolume_cbk] 0-saba2-client-6: Connected to saba2-client-6, attached to remote volume '/media/bricks/r16-box01-slot04.saba082/saba2'.
[2016-10-10 16:23:23.146882] I [MSGID: 114047] [client-handshake.c:1233:client_setvolume_cbk] 0-saba2-client-6: Server and Client lk-version numbers are not same, reopening the fds
[2016-10-10 16:23:23.147027] I [MSGID: 114035] [client-handshake.c:201:client_set_lk_version_cbk] 0-saba2-client-6: Server lk version = 1

ちなみに saba2 というボリュームが /media/gluster/saba2 にマウントされていて、ブリック数は20個で 10x2Distributed-Replica という構成になってます。(ただしコレは今回の問題とは本質的に関係ない)


原因

この GlusterFS ボリュームは数年前から使ってるので色んなバージョンの GlusterFS を乗り越えてきている。

その過程で 3.3 から 3.4 になった際、lk-version という内部的な通信プロトコルか何かそういうののバージョンが上がったらしい。

で、それを放置したままだったのでクライアントは新バージョンでつなげようとしたけど、サーバ側ボリュームの lk-version が3.3のままだからしゃーないから古いバージョンで繋げ直すわ。っていうログが時々出ていたわけだ。

ログにある通りボリュームのマイグレーションきちんとしなくてもバージョン不一致を検出して再接続で対応してくれる仕組みはあるらしいので大きな問題にはなっていなかった模様。


解決

もう GlusterFS のバージョンが 3.8 という今更においてマイグレーション処理をちゃんとすることにしたわけだ。で、肝心のマイグレーション方法は問題のボリュームに 「何でもよいので何かしらの操作を実行する」 と解決するとのこと。

例えば、↓こんなふうな意味のないコマンドを一発実行してやるだけでよい。(実際コレだけで一瞬で解決したw)

gluster volume set saba2 brick-log-level INFO

この値は元々 INFO だから同じ値で設定上書きしても何も変わらないんだが「何かしらの操作」を行うことでボリューム構成が内部的に一旦フラッシュされて、そのタイミングで内部で lk-version の設定がマイグレーションされて綺麗な状態になるというオチのようだ。


設定ファイルはどう変わったか?


Before

↓こんな風にHDD(Brick)の追加時期によってブリックの設定が新し目なのと古めなのが混じっていた。そしてログメッセージで指摘されていた lk-version とやらも見えるしこの辺りのチグハグが問題なんだろうなーという気配を感じる。


/var/lib/glusterd/glustershd/glustershd-server.vol(一部抜粋)

volume saba2-client-4

type protocol/client
option clnt-lk-version 1
option volfile-checksum 0
option volfile-key /saba2
option client-version 3.8.4
option process-uuid r16.kawaz.jp-3881-2016/10/10-16:23:19:105728-saba2-client-4-0-0
option fops-version 1298437
option ping-timeout 42
option remote-host r16
option remote-subvolume /media/bricks/r16-box01-slot03.saba080/saba2
option transport-type socket
option username 71e422d3-0fee-4bae-bd95-444444444444
option password fc50b472-8b13-419c-b147-444444444444
option send-gids true
end-volume

volume saba2-client-5
type protocol/client
option ping-timeout 42
option remote-host r17
option remote-subvolume /media/bricks/r17-box01-slot03.saba092/saba2
option transport-type socket
option username 71e422d3-0fee-4bae-bd95-555555555555
option password fc50b472-8b13-419c-b147-555555555555
option send-gids true
end-volume



After

で、上述した一見意味のないオペレーションを実行してみたところ以下のようなスッキリした内容に設定がマイグレーションされていた。


/var/lib/glusterd/glustershd/glustershd-server.vol(一部抜粋)

volume saba2-client-4

type protocol/client
option password fc50b472-8b13-419c-b147-444444444444
option username 71e422d3-0fee-4bae-bd95-444444444444
option transport-type tcp
option remote-subvolume /media/bricks/r16-box01-slot03.saba080/saba2
option remote-host r16
option ping-timeout 42
end-volume

volume saba2-client-5
type protocol/client
option password fc50b472-8b13-419c-b147-555555555555
option username 71e422d3-0fee-4bae-bd95-555555555555
option transport-type tcp
option remote-subvolume /media/bricks/r17-box01-slot03.saba092/saba2
option remote-host r17
option ping-timeout 42
end-volume



まとめ


  • バージョンアップの際はちゃんとドキュメント読んで必要なマイグレーション等は行っておこう。

  • ちなみに一応備忘録としてエントリ起こしたけど、多分今更3.3→3.4のマイグレーションとかしてる人は居ないだろうから誰かの役に立つことがあるのかどうかは謎w