単一の Gluster ピアの再バランスが一貫していない

単一の Gluster ピアの再バランスが一貫していない

分散モードで動作するボリューム用の個別のブリックを持つ 5 つの Gluster サーバーのプールがあり、これに別のデータセンターの個別のブリックを持つ 5 つのピアを追加したため、このボリューム モードはブリック式 2 x (3 + 2) = 10 で「分散分散」になります。

10 個のピアのクラスターを完全に再調整した後、いくつかのテスト中に、プール 2 の 5 個のピアすべてがクラスターから切断されたときに、最初のプール (プール 1 と呼ぶことにします) で一部のファイルが失われていることに気付きました。私の理解では、各個別のプールには分散形式で独自の完全なデータ セットがあるはずなので、これは発生しないはずです。間違っていたら、訂正してください。

最初の再バランス調整中に気づいたこと (関連しているという仮説を立てていますが、証明できるほどの Gluster の専門知識はありません) は、プール #2 のノード #4 が数秒で再バランス調整の「完了」段階に入るのに対し、他の各ノードはスキャン部分を完了するのに 24 時間以上かかることです。このノードには、再バランス調整、スキップ、または失敗していない、正確に 2 つの「スキャン済み」ファイルがリストされています。

                                    Node Rebalanced-files          size       scanned      failures       skipped               status  run time in h:m:s
                               ---------      -----------   -----------   -----------   -----------   -----------         ------------     --------------
                               localhost              159       231.4MB        269931             0             0          in progress        3:10:26
                               pool-1-2                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-1-3                 0        0Bytes             0             0             0          in progress        3:10:25
                               pool-1-4                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-1-5                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-2-1                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-2-2                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-2-3                 0        0Bytes             0             0             0          in progress        3:10:26
                               pool-2-4                 0        0Bytes             2             0             0            completed        0:00:18
                               pool-2-5                 0        0Bytes             0             0             0          in progress        3:10:26
Estimated time left for rebalance to complete :       15:08:05
volume rebalance: dev-volume: success

pool-2-4 の再バランス ログを詳しく調べたところ、次の興味深いメッセージが見つかりました。

[2020-08-20 21:24:20.623006] I [MSGID: 109081] [dht-common.c:4209:dht_setxattr] 0-dev-volume-dht: fixing the layout of /
...
[2020-08-20 21:24:29.720716] I [MSGID: 0] [dht-rebalance.c:3737:gf_defrag_total_file_cnt] 0-dev-volume-dht: Total number of files = 1684196
[2020-08-20 21:24:29.720725] E [MSGID: 0] [dht-rebalance.c:3900:gf_defrag_start_crawl] 0-dev-volume-dht: Failed to get the total number of files. Unable to estimate time to complete rebalance.
...
[2020-08-20 21:24:29.725724] I [dht-rebalance.c:2745:gf_defrag_process_dir] 0-dev-volume-dht: migrate data called on /
[2020-08-20 21:24:29.725828] W [dict.c:416:dict_set] (-->/usr/lib64/glusterfs/3.10.1/xlator/cluster/distribute.so(+0x42f51) [0x7fed71172f51] -->/lib64/libglusterfs.so.0(dict_set_int32+0x2b) [0x7fed78af14eb] -->/lib64/libglusterfs.so.0(dict_set+0xe6) [0x7fed78aefc56] ) 0-dict: !this || !value for key=readdir-filter-directories [Invalid argument]
[2020-08-20 21:24:29.725845] E [MSGID: 109003] [dht-common.c:4917:dht_opendir] 0-dev-volume-dht: Failed to set dictionary value :key = readdir-filter-directories, ret:-1
[2020-08-20 21:24:32.718807] I [dht-rebalance.c:2959:gf_defrag_process_dir] 0-dev-volume-dht: Migration operation on dir / took 2.99 secs
[2020-08-20 21:24:32.718898] W [dict.c:416:dict_set] (-->/usr/lib64/glusterfs/3.10.1/xlator/cluster/distribute.so(+0x42f51) [0x7fed71172f51] -->/lib64/libglusterfs.so.0(dict_set_int32+0x2b) [0x7fed78af14eb] -->/lib64/libglusterfs.so.0(dict_set+0xe6) [0x7fed78aefc56] ) 0-dict: !this || !value for key=readdir-filter-directories [Invalid argument]
[2020-08-20 21:24:32.723301] I [dht-rebalance.c:3994:gf_defrag_start_crawl] 0-DHT: crawling file-system completed
...
[2020-08-20 21:24:32.723730] I [MSGID: 109028] [dht-rebalance.c:4277:gf_defrag_status_get] 0-dev-volume-dht: Files migrated: 0, size: 0, lookups: 2, failures: 0, skipped: 0
[2020-08-20 21:24:32.723894] W [glusterfsd.c:1329:cleanup_and_exit] (-->/lib64/libpthread.so.0(+0x7dc5) [0x7fed77958dc5] -->/usr/sbin/glusterfs(glusterfs_sigwaiter+0xe5) [0x556351afaf85] -->/usr/sbin/glusterfs(cleanup_and_exit+0x6b) [0x556351afadfb] ) 0-: received signum (15), shutting down

他の各ノードは「ファイルの合計数」が 0 で始まり、各サブフォルダー内の各ファイルはメッセージで再バランス調整されていることが明確にわかります。

[2020-08-12 19:56:49.614327] I [dht-rebalance.c:2745:gf_defrag_process_dir] 0-dev-volume-dht: migrate data called on /data/jobs
[2020-08-12 19:56:49.820702] I [MSGID: 109081] [dht-common.c:4209:dht_setxattr] 0-dev-volume-dht: fixing the layout of /data/jobs/201501
[2020-08-12 19:56:50.294380] I [dht-rebalance.c:2745:gf_defrag_process_dir] 0-dev-volume-dht: migrate data called on /data/jobs/201501
[2020-08-12 19:56:50.518000] I [MSGID: 109081] [dht-common.c:4209:dht_setxattr] 0-dev-volume-dht: fixing the layout of /data/jobs/201501/00
[2020-08-12 19:56:50.863319] I [dht-rebalance.c:2745:gf_defrag_process_dir] 0-dev-volume-dht: migrate data called on /data/jobs/201501/00
[2020-08-12 19:56:51.116676] I [MSGID: 109081] [dht-common.c:4209:dht_setxattr] 0-dev-volume-dht: fixing the layout of /data/jobs/201501/02

!value for key=readdir-filter-directories [Invalid argument]他のノードでもメッセージは受信されません。

Gluster マウントのデータ ディレクトリ内のすべてのファイルの合計サイズを確認すると (分散されているため、データの完全な表現ではありません)、明らかにかなりの量があることがわかります。

[root@pool-2-4 dev-volume]# du -csh *
8.0K    backups
158G    data
25M     etc
8.0K    lost+found
38G     static
783M    bin
196G    total

再バランス ログに表示されるエラーは、プール 2 がオフラインになったときにプール 1 のファイルが失われる問題を示しているのでしょうか? まったく別の問題なのでしょうか? 私の理解は完全に間違っているのでしょうか?

この質問が少し曖昧であったことをお詫びするとともに、何らかの洞察を提供してくださる方には感謝の意を表します。

関連情報