Назад | Перейти на главную страницу

Одноранговая перебалансировка единого Gluster непоследовательна

У меня есть пул из 5 серверов Gluster с отдельными блоками для тома, работающего в режиме Dispersed, к которому я добавил еще 5 одноранговых узлов с отдельными блоками в другом центре обработки данных, что сделало этот режим тома «Distributed-Dispersed» с формулой блока 2 х (3 + 2) = 10.

После полной перебалансировки кластера из 10 одноранговых узлов я заметил во время некоторых тестов, что некоторые файлы пропали в первом пуле (назовем его пулом-1), когда все 5 одноранговых узлов в пуле-2 были отключены от кластера. Насколько я понимаю, этого не должно происходить, поскольку каждый отдельный пул должен иметь свой полный набор данных в рассредоточенном формате. Если я ошибаюсь, поправьте меня, пожалуйста!

Что-то, что я заметил во время первоначальной перебалансировки (которая, как я предполагаю, связана, но у меня нет опыта Gluster, чтобы доказать), это то, что узел №4 пула №2 входит в «завершенную» стадию ребалансировки за считанные секунды, хотя каждый другому узлу требуется более 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

Могут ли ошибки, которые я вижу в журнале перебалансировки, указывать на проблему с отсутствием файлов в пуле 1, когда пул 2 отключен? Неужели это отдельная проблема? Полностью ли мое понимание этого неверно?

Я прошу прощения за небольшую расплывчатость этого вопроса и выражаю признательность всем, кто может предложить некоторые идеи.