使用 GlusterFS 进行简单复制

k7k*_*7k0 4 ubuntu replication distribution glusterfs

新手问题。我需要构建这个:

  • /shared 文件夹 ~500GB 的文件,每个 ~1MB。
  • 通过 1Gbs LAN 连接的两个盒子(server1 和 server2)
  • 每个盒子都需要获得对文件的 r/w 访问权限,因此它们都是客户端
  • 我希望在两个盒子上复制文件,每次将文件写入一台服务器时,另一台服务器中都应该存在相同的文件。

我关于 GlusterFS 的问题:

  • 它会复制同一个盒子上的文件吗?。例如,文件在上/shared,安装在/mnt/shared. 每台服务器需要 1GB 空间?
  • 相反,我应该直接使用文件系统,在本地写入/shared吗?在没有安装客户端的情况下,复制是否以这种方式工作?

另外,如果有人知道任何其他方式来完成此设置,我将不胜感激。提前致谢。

k7k*_*7k0 8

我终于设法在两个盒子中使用 GlusterFS 解决了这个问题。在这个过程中学到的一些东西:

  • 首先,我尝试了通用 RAID 1 设置。这样做的主要问题是客户端总是使用 tcp 来联系两个服务器,即使其中一个在同一台机器上。因此,我必须更改客户端配置以将 tpc 'local' 卷替换为直接访问(存储/posix)卷
  • 为了避免给网络链接带来压力,每次客户端读取都使用带有指令的本地存储option read-subvolume。当然为了保持 RAID1 的完整性 GlusterFS 也总是检查其他卷,但实际文件是直接从磁盘检索的
  • 性能很好,但客户端进程似乎是内存拥抱。我认为与快速阅读量有关,我需要进一步调查

修改客户端配置:

# Server1 configuration (RAID 1)
volume server2-tcp
    type protocol/client
    option transport-type tcp
    option remote-host server2
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume posix-local
    type storage/posix
    option directory /shared
end-volume

volume locks-local
    type features/posix-locks
    subvolumes posix-local
end-volume

volume brick-local
    type performance/io-threads
    option thread-count 8
    subvolumes locks-local
end-volume

volume mirror-0
    type cluster/replicate
    option read-subvolume brick-local
    subvolumes brick-local server2-tcp
end-volume

.....
Run Code Online (Sandbox Code Playgroud)

回答我的两个问题:

它会复制同一个盒子上的文件吗?

不,fs 是使用 FUSE 挂载的。当前 /etc/fstab 行:

/etc/glusterfs/client.vol /mnt/shared glusterfs 默认值 0 0

相反,我应该直接使用文件系统,在 /shared 上本地写入吗?在没有安装客户端的情况下,复制是否以这种方式工作?

不,总是使用挂载的卷进行读/写,直接使用文件系统可能会导致不一致。


小智 5

实际上 Gluster 非常适合这种情况。您可以获得双向复制和从任何一台机器挂载文件系统的能力,如果其中一个机器出现故障,您(理论上)的有效 I/O 容量是 NFS 和主动故障转移的两倍。

以这种方式进行主动 rsync 的问题是由于文件锁定而阻塞 I/O。根据您的应用程序和数据的变化,这可能是无关紧要的或灾难性的!分布式文件系统具有非常特定的锁定语义,可以防止这种情况发生。即使现在 inotify 有更好的锁定功能(当我上次尝试时它没有),那么您的文件访问可能会阻塞,这取决于您的网络是否可以应对这些变化。这些都是理论上的警告,但值得研究,具体取决于您的应用程序的功能。