有人可以解釋這個 GlusterFS 設置嗎?
在深入了解如何使用 gluster 設置複製之後,我遇到了這個問題:Apache 可以直接讀取 GlusterFS 塊但寫入 GlusterFS 掛載嗎?
我還找到了一個似乎可以解釋同一件事的方法,我以為我明白了,但現在我想我不明白。
因此,為了獲得這種複制,我需要讓兩台機器同時充當伺服器和客戶端?現在我不明白這種關係是如何運作的:不是 B,例如 A 的客戶嗎?
是否涉及不止一層的客戶端-伺服器關係?A 是 A 的客戶端,B 是 B 的客戶端,每個都在一個文件夾中安裝一個來自同一台機器的捲,並且這 2 個卷在第三層關係中以某種方式同步(從 A 到 B)?
為什麼上面的問題詢問有關寫入文件系統或已安裝卷的問題?當我讓 B 成為 A 的客戶端時,A 導出一個文件夾,B 將其作為遠端卷安裝在一個文件夾中時,我從來沒有問過自己我在寫什麼:我寫入 A 上的原始文件夾和安裝的捲B. 這不是它應該如何工作的嗎?
假設您有兩台機器,A 和 B。在每台機器上,您導出
/opt/files
為 Gluster 磚塊,並設置客戶端複製。然後我們將生成的目錄掛載/mnt/gluster-files
在兩台機器上。這個很重要!使用該掛載點,我們現在在兩台機器上擁有了一個高度可用的文件系統。
當你寫一個文件時——比如說
/mnt/gluster-files/example
在機器 A 上,它會導致兩件事發生:
- 寫一份到
/opt/files
- 通過網路發送要寫入
/opt/files
機器 B的副本。這很好,因為我們希望有冗餘,這意味著我們必須擁有多個數據副本。
接下來,假設我們要讀取同一個文件。再次在機器 A 上:
- 您發出讀取
/mnt/gluster-files/example
- GlusterFS 說“我需要檢查所有副本節點以找出誰擁有此文件的最新版本”
- GlusterFS 檢查每個節點
- 事實證明,所有副本都是相同的,因為複制工作得很好
- 您將從本地磁碟返回文件。§
(§ 有一個
read-subvolume
客戶端選項,將其設置為 Gluster 客戶端和伺服器的任何機器上的本地捲是明智的,如本例所示。否則,步驟 5 可能是“您從隨機發送的文件節點’。)在幕後,GlusterFS
/opt/files
在兩台機器上保持同步。檢查每個節點,尤其是大量小文件,會增加不小的性能損失。因此提出了一個問題:如果我在這兩台機器中的一台上執行一個程序,並且我知道文件是同步的,為什麼我不能從本地共享中讀取文件?
不建議這樣做,但您可以這樣做。從 讀取文件
/opt/files
。手動跟踪您是否不同步,如果不同步,請執行類似 als -laR
的操作,/mnt/gluster-files
其中將觸發同步。那麼,如果您
/opt/files
在機器 A 上寫入會發生什麼?該文件位於 GlusterFS 沒有註意到的位置。Gluster 不是這樣工作的。它不會進入機器 B,除非你碰巧做了一些讓 Gluster 在機器 A 上註意到它的事情。
因此,您不能只告訴 Apache 讀取和寫入
/opt/files
. 似乎一個不錯的折衷方案是告訴它讀取/opt/files
但寫入/mnt/gluster-files
. 僅當您的應用程序允許您為讀取和寫入文件指定不同的路徑時,這才是可能的,而很少有人這樣做。