Я играю с GlusterFS. И теперь мне любопытно, как полностью восстановить реплицированных том.
Таким образом, я создал 1 реплицированных том из server1 и server2 узлов:
root@server1:~# gluster volume create replicated replica 2 transport tcp server1:/mnt/repl1 server2:/mnt/repl2 force
root@server1:~# gluster volume start replicated
volume start: replicated: success
И смонтированный это к клиентскому узлу:
root@client:~# mount.glusterfs server1:/distributed /mnt/distrib/
Теперь я пытаюсь протестировать высокую доступность. Таким образом, я выключил server1 и пытающийся записать что-то в клиентскую точку монтирования:
root@client:/mnt/replica# ls -lh
total 106M
-rw-r--r-- 1 root root 19 Jul 12 2015 1.txt
-rw-r--r-- 1 root root 1.3K Jul 12 2015 2.txt
-rw-r--r-- 1 root root 106M Jul 12 2015 testfile1
Так хорошо до сих пор. Все файлы находятся также на server2:
root@server2:/mnt/repl2# ls -lh
total 106M
-rw-r--r-- 2 root root 19 Jul 12 03:52 1.txt
-rw-r--r-- 2 root root 1.3K Jul 12 03:54 2.txt
-rw-r--r-- 2 root root 106M Jul 12 03:53 testfile1
root@server2:/mnt/repl2#
После того, как весь мой server1 идет онлайн, и там я вижу только скелет файлов w/o данные в нем:
root@server1:/mnt/repl1# ls -lh
total 4.0K
-rw-r--r-- 2 root root 0 Jul 12 12:21 1.txt
-rw-r--r-- 2 root root 0 Jul 12 03:54 2.txt
-rw-r--r-- 2 root root 0 Jul 12 12:21 testfile1
Только после доступа в файлы от клиентской точки монтирования (с кошкой или как это) информация вытягивает в server2 файлы:
root@client:/mnt/replica# cat 2.txt
GlusterFS — blalabla..
root@server1:/mnt/repl1# ls -lh
total 4.0K
-rw-r--r-- 2 root root 0 Jul 12 12:21 1.txt
-rw-r--r-- 2 root root 1.3K Jul 12 03:54 2.txt
-rw-r--r-- 2 root root 0 Jul 12 12:21 testfile1
root@server1:/mnt/repl1#
Действительно ли возможно восстановить все файлы автоматически на ранее неудавшемся сервере w/o получающий доступ им от клиентской точки монтирования?
stat ()
- файлы с точки монтирования клиента - вот откуда Gluster знает, что файлы нужно заново переписать plicated, поэтому в основном ответ на ваш вопрос - «нет».
Решение, тем не менее, заключается в использовании stat ()
каждого файла - что на самом деле проще, чем кажется, просто запустите это с клиента:
find /mnt/repl1 -exec stat {} \;
Это описано здесь .