在網站的叢集系統中 , 除了資料庫需要讓各個伺服器存取外 , 常常也會需要讓檔案 ( 圖檔 , CSS 等等 ) 可以被叢集中的伺服器存取 。 傳統上 , 常常使用 NFS 伺服器來達到此目的 , 但 NFS 本身往往成為單一失敗點 (single point of failure)。 本文介紹 GlusterFS 來建構一個簡單的雙節點叢集檔案系統 , 具備高可用性 、 高擴充性等特性 。

GlusterFS 是一套純軟體實現的檔案存儲解決方案 , 使用它的原因除了因為它具備叢集檔案系統必須的高可用性 、 高擴充性以及可靠性等優點外 , 主要在於其安裝與管理上的簡易性 。

目標

  • 要在兩個節點之間採用複製模式 (replication), 建立叢集檔案系統 。 在此模式下 , 任一台故障 , 都不會影響檔案的可存取性 。

前提假設

  • 假設叢集中有兩個節點 , 主機名稱分別為 node1 跟 node2。
  • 作業系統為 : Utuntu 10.04 64-bit
  • GlusterFS 版本 : 3.2.x
  • 所有安裝操作都是以 root 權限進行 。
  • node1 跟 node2 上作為真正儲存空間的檔案路徑 :/exp1。
  • 叢集的 Volume 名稱 (webshare)。
  • /srv/cfs 為共享的檔案目錄 , 任一主機可以同時對此目錄修改 , 其他主機可以即時看到修改後的結果 。

安裝 GlusterFS

下載 GlusterFS

到 GlusterFS 官網提供的下載網址 , 下載 Ubuntu 專用的安裝包 。

EDIT 2015-09-06: 本文使用的版本 , GlusterFS 已經不再提供下載 。

執行安裝指令

# apt-get -y install glusterfs_3.2.6-1_amd64.deb

建立叢集檔案系統

從 node1 的命令列 , 執行下列指令 :

# gluster peer probe node2
# gluster peer status
Number of Peers: 1

Hostname: node2
Uuid: cf79a2b7-39f3-40fc-a629-f980d8683cf2
State: Peer in Cluster (Connected)

注意 UUID 會跟環境有所不同 。

建立 Volume

# gluster volume create webshare replica 2 transport tcp node1:/exp1 node2:/exp1
Creation of test-volume has been successful
Please start the volume to access data.

筆者伺服器內部使用 IP 網段為 192.168.x.x, 因此設定這個 volume 只能由同網段的伺服器存取 。

# gluster volume set webshare auth.allow 192.168.*

設定 GlusterFS 客戶端

本文所介紹的設置方式 , 檔案系統的客戶端跟伺服端都需要在同一主機設定 。 由於希望能夠一開機時就自動掛載 (mount) /srv/cfs, 需要在 /etc/fstab 中新增下列內容 :

localhost:/webshare    /srv/cfs   glusterfs defaults,_netdev      0       0

可能因為 fuse 模組載入順序或者其他因素 , 在 /etc/fstab 作上述設定並無法成功讓 /opt/cfs 自動被掛載 , 需要在 /etc/rc.local 中加入 ( 加在最後的 exit 0 敘述前 ):

mount /srv/cfs

結語

透過這樣的設定 , 兩個節點可以即時分享檔案 , 只要將網站要用到的檔案佈署到這個叢集檔案目錄 , 不管客戶是從哪一台伺服器進入 , 應該都可以檢視同樣的內容 。