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

Gluster FS. Восстановить реплицированный том

Играю с 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 выходит в сеть, и там я вижу только скелет файлов без данных:

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

Только после доступа к файлам из точки монтирования клиента (с помощью cat или подобным образом) информация загружается в файлы 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# 

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

stat()-загрузка файлов из точки монтирования клиента - это то, как Gluster узнает, что файлы необходимо реплицировать повторно, поэтому в основном ответ на ваш вопрос - «нет».

Решение, однако, просто stat() каждый файл - что на самом деле проще, чем кажется, просто запустите его от клиента:

find /mnt/repl1 -exec stat {} \;

Это задокументировано Вот.