新手問題。我需要建構這個:
/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 共享並讓它們都從同一個實際驅動器中提取。