使用 GlusterFS 進行簡單複製

使用 GlusterFS 進行簡單複製

新手問題。我需要建構這個:

  • /shared資料夾 ~500GB 文件,每個文件 ~1MB。
  • 透過 1Gbs LAN 連接的兩個盒子(server1 和 server2)
  • 每個盒子都需要對文件進行讀取/寫入訪問,因此它們都是客戶端
  • 我希望檔案在兩個機器上複製,每次在一台伺服器中寫入檔案時,另一台伺服器中應該存在相同的檔案。

我關於 GlusterFS 的問題:

  • 它會在同一個盒子上複製文件嗎?例如,檔案位於 on/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 也會始終檢查其他卷,但實際檔案是直接從磁碟檢索的
  • 效能很好,但客戶端進程似乎佔用了記憶體。我認為與快速閱讀量有關,我需要進一步調查

修改後的客戶端配置:

# 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 預設 0 0

相反,我應該直接使用檔案系統,在 /shared 上進行本地寫入嗎?複製是否可以在不安裝客戶端的情況下以這種方式工作?

不,始終使用已安裝的磁碟區進行讀取/寫入,直接使用檔案系統可能會導致不一致。

答案3

設定起來會容易得多rsync 進行主動鏡像,或者只是設定一個 nfs 共享並讓它們都從同一個實際驅動器中提取。

相關內容