使用GlusterFS进行简单的复制

新手问题。 我需要build立这个:

  • /shared文件夹〜500GB的文件,每个〜1MB。
  • 两个盒子(server1和server2)通过1Gbs LAN连接
  • 每个盒子都需要r / w访问文件,所以他们都是客户端
  • 我希望在两个盒子上复制文件,每次在一台服务器上写入一个文件时,另一台文件应该出现在同一个文件中。

我有关GlusterFS的问题:

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

此外,如果有人知道任何其他方式来实现这个设置,我将非常感激。 提前致谢。

其实Gluster是完美的这种情况。 您可以获得双向复制,并且可以从任一台计算机上挂载文件系统,从理论上讲,您可以为NFS提供两倍的有效I / O容量,并在其中一个框出现故障时进行主动故障转移。

以这种方式进行活动rsync的问题是阻止由于文件locking导致的I / O。 根据您的应用程序和数据的变化,这可能是不相关的或灾难性的! 分布式文件系统具有非常特定的locking语义,可以防止这种情况发生。 即使inotify有更好的locking(当我最后一次尝试它没有),那么你的文件访问可能会阻止,取决于你的networking是否可以应付变化。 这些都是理论上的警告,但值得一看,取决于你的应用程序。

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

  • 首先,我尝试了一个通用的RAID 1设置。 主要的问题是客户端总是使用tcp来联系两台服务器,即使其中一台服务器在同一台机器上。 因此,我必须更改客户端configuration,以直接访问(存储/ posix)卷来replacetpc“本地”卷
  • 为了避免给networking链接造成压力,每个客户端读取都使用带有指令option read-subvolume的本地存储。 为了保持RAID1的完整性,GlusterFS总是检查其他卷,但实际的文件是直接从磁盘中检索的
  • performance不错,但客户端过程好像是记忆拥抱。 我觉得是有关快速阅读量,我需要进一步调查

修改客户端configuration:

 # 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 ..... 

回答我的两个问题:

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

不,fs使用FUSE安装。 当前/ etc / fstab行:

/etc/glusterfs/client.vol / mnt / shared glusterfs defaults 0 0

相反,我应该直接使用文件系统,本地写/共享? 如果没有安装客户端,复制是否以这种方式工作?

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

设置rsync来做主动镜像 ,或者只是设置一个nfs共享,并让它们都从相同的实际驱动器拉动,会容易得多。