Glusterfs

有人可以解釋這個 GlusterFS 設置嗎?

  • September 23, 2011

在深入了解如何使用 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 上,它會導致兩件事發生:

  1. 寫一份到/opt/files
  2. 通過網路發送要寫入/opt/files機器 B的副本。

這很好,因為我們希望有冗餘,這意味著我們必須擁有多個數據副本。

接下來,假設我們要讀取同一個文件。再次在機器 A 上:

  1. 您發出讀取/mnt/gluster-files/example
  2. GlusterFS 說“我需要檢查所有副本節點以找出誰擁有此文件的最新版本”
  3. GlusterFS 檢查每個節點
  4. 事實證明,所有副本都是相同的,因為複制工作得很好
  5. 您將從本地磁碟返回文件。§

(§ 有一個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. 僅當您的應用程序允許您為讀取和寫入文件指定不同的路徑時,這才是可能的,而很少有人這樣做。

引用自:https://serverfault.com/questions/314758