glusterfs: восстановить том после сбоя узлов
У меня очень странный кластер: набор вычислительных узлов, которые используют заголовочный узел nfs в качестве корня файловой системы. Каждый узел имеет независимый каталог на головном узле, который является корневой файловой системой для узла.
Кроме того, некоторые узлы имеют диски, а некоторые нет. Если у них есть диски, все диски находятся в массиве RAID 6. Рейд массив установлен на /exports
каталог каждого узла. Выглядит так:
On head-node:
/nodes/cn-0 ---> / for compute node 0
`/export ---> mount /dev/md0 /export
/nodes/cn-1 ---> / for compute node 1
/nodes/cn-3 ---> / for compute node 2
`/export ---> mount /dev/md0 /export
Пространство в массивах raid содержит блоки для томов glusterfs. Это огромное пространство было разделено всеми узлами как хранилища данных пользователя (временное и постоянное).
Все работало просто отлично, пока жесткий диск, содержащий все корневые файловые системы (/node) узлов, не вышел из строя на head-node.
Я перестроил файловые системы для каждого узла, и они работают нормально. Они устанавливают рейдовые массивы в нужном месте. Я вижу кирпичи для томов glusterfs. Но я изо всех сил пытаюсь вернуть объемы к работе.
Вот что я сделал:
(1) Запустите glusterd на узлах
(2) Peer от головного узла все вычислительные узлы:
root@headnode: for i in 0 1 2 3 ; do gluster peer probe cn-$i ; done
peer probe: success. Host cn-0 port 24007 already in peer list
peer probe: success. Host cn-1 port 24007 already in peer list
peer probe: success. Host cn-2 port 24007 already in peer list
peer probe: success. Host cn-3 port 24007 already in peer list
(3) Головной узел одноранговой сети из всех вычислительных узлов:
root@headnode: for i in 0 1 2 3; do ssh cn-$i 'gluster peer probe headnode'; done
peer probe: success. Host headnode port 24007 already in peer list
peer probe: success. Host headnode port 24007 already in peer list
peer probe: success. Host headnode port 24007 already in peer list
peer probe: success. Host headnode port 24007 already in peer list
(4) Проверьте состояние пула кластеров:
gluster pool list
UUID Hostname State
XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx cn-3 Connected
XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx cn-2 Connected
XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx cn-1 Connected
XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx cn-0 Connected
XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx localhost Connected
(5) Проверьте объем информации
root@headnode: gluster volume info
Volume Name: gv0
Type: Distribute
Volume ID: XXXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Status: Started
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: headnode:/exports/users
Brick2: cn-0:/exports/brick1
Brick3: cn-1:/exports/brick1
Brick4: cn-2:/exports/brick1
Brick5: cn-3:/exports/brick1
Options Reconfigured:
performance.readdir-ahead: on
Однако, это не восстанавливает объем:
root@headnode: gluster volume status gv0
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick headnode:/exports/users N/A N/A N N/A
NFS Server on localhost N/A N/A N N/A
Task Status of Volume gv0
------------------------------------------------------------------------------
There are no active volume tasks
Все данные доступны на RAID-массивах. Так что это должен быть способ вернуть весь том (ы), верно?
Если я пытаюсь смонтировать том, он возвращает ошибку:
root@headnode: mount -t glusterfs headnode:/gv0 /mnt
WARNING: getfattr not found, certain checks will be skipped..
Mount failed. Please check the log file for more details.
Вот /var/log/mnt.log
[2018-01-17 22:08:29.470362] I [MSGID: 100030] [glusterfsd.c:2318:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.7.6 (args: /usr/sbin/glusterfs --volfile-server=headnode --volfile-id=/gv0 /mnt)
[2018-01-17 22:08:29.561784] I [MSGID: 101190] [event-epoll.c:632:event_dispatch_epoll_worker] 0-epoll: Started thread with index 1
[2018-01-17 22:08:29.599777] I [MSGID: 114020] [client.c:2118:notify] 0-gv0-client-0: parent translators are ready, attempting connect on transport
[2018-01-17 22:08:29.601841] I [MSGID: 101190] [event-epoll.c:632:event_dispatch_epoll_worker] 0-epoll: Started thread with index 2
[2018-01-17 22:08:29.608559] I [MSGID: 114020] [client.c:2118:notify] 0-gv0-client-1: parent translators are ready, attempting connect on transport
[2018-01-17 22:08:29.615844] E [MSGID: 114058] [client-handshake.c:1524:client_query_portmap_cbk] 0-gv0-client-0: failed to get the port number for remote subvolume. Please run 'gluster volume status' on server to see if brick process is running.
[2018-01-17 22:08:29.617581] I [MSGID: 114018] [client.c:2042:client_rpc_notify] 0-gv0-client-0: disconnected from gv0-client-0. Client process will keep trying to connect to glusterd until brick's port is available
[2018-01-17 22:08:29.618400] I [MSGID: 114020] [client.c:2118:notify] 0-gv0-client-2: parent translators are ready, attempting connect on transport
Final graph:
+------------------------------------------------------------------------------+
1: volume gv0-client-0
2: type protocol/client
......
......
......
+------------------------------------------------------------------------------+
[2018-01-17 22:08:29.635956] E [MSGID: 114058] [client-handshake.c:1524:client_query_portmap_cbk] 0-gv0-client-1: failed to get the port number for remote subvolume. Please run 'gluster volume status' on server to see if brick process is running.
[2018-01-17 22:08:29.645294] I [MSGID: 114018] [client.c:2042:client_rpc_notify] 0-gv0-client-1: disconnected from gv0-client-1. Client process will keep trying to connect to glusterd until brick's port is available
[2018-01-17 22:08:31.162383] E [MSGID: 114058] [client-handshake.c:1524:client_query_portmap_cbk] 0-gv0-client-2: failed to get the port number for remote subvolume. Please run 'gluster volume status' on server to see if brick process is running.
[2018-01-17 22:08:31.191709] I [MSGID: 114018] [client.c:2042:client_rpc_notify] 0-gv0-client-2: disconnected from gv0-client-2. Client process will keep trying to connect to glusterd until brick's port is available
[2018-01-17 22:08:31.326902] I [fuse-bridge.c:5137:fuse_graph_setup] 0-fuse: switched to graph 0
[2018-01-17 22:08:31.328058] I [fuse-bridge.c:4030:fuse_init] 0-glusterfs-fuse: FUSE inited with protocol versions: glusterfs 7.22 kernel 7.23
[2018-01-17 22:08:31.329467] W [fuse-bridge.c:758:fuse_attr_cbk] 0-glusterfs-fuse: 2: LOOKUP() / => -1 (Transport endpoint is not connected)
[2018-01-17 22:08:31.437768] I [fuse-bridge.c:4984:fuse_thread_proc] 0-fuse: unmounting /home
[2018-01-17 22:08:31.499027] W [glusterfsd.c:1236:cleanup_and_exit] (-->/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f7da5a446ba] -->/usr/sbin/glusterfs(glusterfs_sigwaiter+0xdd) [0x40810d] -->/usr/sbin/glusterfs(cleanup_and_exit+0x4d) [0x407f8d] ) 0-: received signum (15), shutting down
[2018-01-17 22:08:31.525897] I [fuse-bridge.c:5683:fini] 0-fuse: Unmounting '/mnt'.
ОБНОВЛЕНИЕ Я смог смонтировать том после команды: gluster volume start gv0 force
но это не решает проблему. Та же ошибка появляется после перезагрузки снова и снова.
Любые идеи, как заставить Glusterfs работать снова?