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

# 問題

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

```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個で `10x2` の `Distributed-Replica` という構成になってます。（ただしコレは今回の問題とは本質的に関係ない）

# 原因

この GlusterFS ボリュームは数年前から使ってるので色んなバージョンの GlusterFS を乗り越えてきている。
その過程で 3.3 から 3.4 になった際、`lk-version` という内部的な通信プロトコルか何かそういうののバージョンが上がったらしい。
で、それを放置したままだったのでクライアントは新バージョンでつなげようとしたけど、サーバ側ボリュームの `lk-version` が3.3のままだからしゃーないから古いバージョンで繋げ直すわ。っていうログが時々出ていたわけだ。
ログにある通りボリュームのマイグレーションきちんとしなくてもバージョン不一致を検出して再接続で対応してくれる仕組みはあるらしいので大きな問題にはなっていなかった模様。

# 解決

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

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

`gluster volume set saba2 brick-log-level INFO`

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


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

## Before

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

```log:/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

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

```log:/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のマイグレーションとかしてる人は居ないだろうから誰かの役に立つことがあるのかどうかは謎ｗ