使用 GlusterFS 进行简单复制

使用 GlusterFS 进行简单复制

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

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

关于 GlusterFS 的问题:

  • 它会将文件复制到同一个盒子上吗?例如,文件位于 上/shared,并安装在 中/mnt/shared。它会在每个服务器上占用 1GB 空间吗?
  • 相反,我应该直接使用文件系统,在本地写入吗/shared? 复制是否可以以这种方式工作而无需挂载客户端?

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

答案1

实际上,Gluster 非常适合这种情况。您可以获得双向复制,并能够从任一机器挂载文件系统,从而为您提供(理论上)两倍于 NFS 的有效 I/O 容量,并且如果其中一个机器发生故障,还可以进行主动故障转移。

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

答案2

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

  • 首先,我尝试了通用 RAID 1 设置。主要问题是客户端始终使用 tcp 来联系两台服务器,即使其中一台服务器位于同一台机器上。因此,我必须更改客户端配置,将 tpc“本地”卷替换为直接访问(存储/posix)卷
  • 为了避免对网络链路造成压力,每个客户端都使用带有指令的本地存储进行读取option read-subvolume。当然,为了保持 RAID1 的完整性,GlusterFS 总是会检查其他卷,但实际文件是直接从磁盘检索的
  • 性能不错,但客户端进程似乎占用大量内存。我认为这与 quickread 量有关,我需要进一步调查

修改客户端配置:

# 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

.....

回答我的两个问题:

它会在同一个盒子里复制文件吗?

否,文件系统使用 FUSE 挂载。当前 /etc/fstab 行:

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

相反,我应该直接使用文件系统,在 /shared 上本地写入吗?无需挂载客户端,复制是否以这种方式工作?

不,始终使用已安装的卷进行读/写,直接使用文件系统可能会导致不一致。

答案3

设置起来会容易得多rsync 进行主动镜像,或者仅设置一个 nfs 共享并让它们都从同一个实际驱动器中提取。

相关内容