我正在玩 GlusterFS。现在我很好奇如何完全重建复制卷。
因此我从 server1 和 server2 节点创建了 1 个复制卷:
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#
是否有可能在先前发生故障的服务器上自动重建所有文件,而无需从客户端挂载点访问它们?
答案1
stat()
- 从客户端挂载点复制文件是 Gluster 知道文件需要重新复制的方式,所以基本上你的问题的答案是“否”。
但解决方案只是针对stat()
每个文件 - 这实际上比听起来更容易,只需从客户端运行它即可:
find /mnt/repl1 -exec stat {} \;
这是有记录的这里。