1. 程式人生 > >通過GlusterFS黏合多節點SSD剩餘空間

通過GlusterFS黏合多節點SSD剩餘空間

固態盤(SSD)的速度比機械硬碟快很多(400MB/s~1.7GB/s),但是價格昂貴,所以往往容量比較小。通過GlusterFS可以把多節點SSD黏合為一塊大的網路SSD,可以在區域網上任意節點上連線使用,從而更方便使用,大幅度提高SSD的使用效率,提升系統速度、降低總體成本。

  • 建議使用多口的萬兆網路,否則網路會成為GlusterFS傳輸的瓶頸。
  • 頻寬計算參考:一般頻寬使用bps計算,標稱頻寬*80%/8為以Byte計算的頻寬。
    • 如10Gbps網路,實際傳輸速度大概為1GB/s。
    • Intel 760P寫入速度大概1.4GB/s,Samsung 960P寫入速度大約1.7GB/s。
    • 同一個盤同時讀寫,速度至少減半。

這裡使用的系統為Ubuntu18.04.1 LTS版本,下面是對實驗過程的一些記錄。

1、安裝支援軟體

安裝軟體:

#安裝ZFS系統
sudo apt install zfsutils-linux

#安裝GlusterFS系統
sudo apt install glusterfs-server

在所有節點上安裝上面的軟體,也可以通過ansible來批量完成。

每個節點建立好zfs的儲存池zpool,如:sudo zpool create zpool /dev/sda /dev/sdb /dev/sdc,更多的設定模式參見:

然後在每個節點上新增儲存的對端節點,如下(假設操作伺服器為server1):

gluster peer probe server2
gluster peer probe server3

然後,確認一下設定是否成功:

gluster peer status

2、建立三種GlusterFS卷

主要建立分散式卷、條帶卷、副本卷三種進行測試。

  • 分散式卷,將不同檔案分別放到不同的節點資料夾中,可以獲得一個虛擬的“大”硬碟。
    • 比如,我這三個節點分別有2T、2T、1T的空間,最後可以得到5T的GlusterFS虛擬卷。
    • 對單個檔案的讀寫是由單節點完成,效能受制於該選中節點的最大速度。
    • 節點之間沒有映象等容錯,建議節點內設定RAID1/5等容錯機制。
  • 條帶卷,將同一個檔案分帶存放到不同節點資料夾,容量加合可以獲得“大”硬碟,可以並行地對條帶讀寫,適合大檔案。
  • 副本卷,將同一個檔案在多個節點上覆制,可以提升可靠性和讀取效能,寫入效能比單節點略有降低。
  • 還有一些其它的的卷型別(比如副本+條帶),這裡暫不做測試。

指令碼命令如下:

echo "建立分散式卷gvx"
gluster volume create gvx \
server1:/home/supermap/gvx \
server2:/home/supermap/gvx \
server3:/home/supermap/gvx

echo "建立條帶卷gvxs"
gluster volume create gvxs strip 3 \
server1:/home/supermap/gvxs \
server2:/home/supermap/gvxs \
server3:/home/supermap/gvxs

echo "建立分散式卷gvxr"
gluster volume create gvx0 replica 3 \
server1:/home/supermap/gvx \
server2:/home/supermap/gvx \
server3:/home/supermap/gvx

echo "啟動卷gvx gvxs gvxr"
gluster volume start gvx gvxs gvxr

echo "當前Gluster的卷資訊:"
gluster volume info

3、掛載GlusterFS卷

可以從任意一個節點掛載GlusterFS網路卷。如下:

echo "掛載分散式卷/home/supermap/gvxv"
mkdir /home/supermap/gvxv
mount -t glusterfs server1:/gvx /home/supermap/gvxv

echo "掛載條帶卷/home/supermap/gvxsv"
mkdir /home/supermap/gvxsv
mount -t glusterfs server1:/gvxs /home/supermap/gvxsv

echo "掛載副本卷/home/supermap/gvxrv"
mkdir /home/supermap/gvxrv
mount -t glusterfs server1:/gvxr /home/supermap/gvxrv

使用命令 ls -l 檢視目錄資訊,df -h檢視掛載卷的資訊。

  • 注意:顯示的每個卷容量是共享的最大容量,系統並沒有所顯示的加和總容量。

4、效能簡單測試

使用dd進行簡單的測試,如下:

echo "=============================================="
echo "測試分散式SSD,基於GlusterFS。"

echo "================="
echo "測試分散式卷gvxv"
echo "寫入:"
sudo dd if=/dev/zero of=/home/supermap/gvxv/testx.img bs=1M count=20480
echo "複製:"
sudo dd if=/home/supermap/gvxv/testx.img of=/home/supermap/gvxv/testx2.img bs=1M count=20480
echo "讀取:"
sudo dd if=/home/supermap/gvxv/testx2.img of=/dev/null bs=1M count=20480

echo "================="
echo "測試條帶卷gvxsv"
echo "寫入:"
sudo dd if=/dev/zero of=/home/supermap/gvxsv/testx.img bs=1M count=20480
echo "複製:"
sudo dd if=/home/supermap/gvxsv/testx.img of=/home/supermap/gvxsv/testx2.img bs=1M count=20480
echo "讀取:"
sudo dd if=/home/supermap/gvxsv/testx2.img of=/dev/null bs=1M count=20480

echo "================="
echo "測試複本卷gvxrv"
echo "寫入:"
sudo dd if=/dev/zero of=/home/supermap/gvxrv/testx.img bs=1M count=20480
echo "複製:"
sudo dd if=/home/supermap/gvxrv/testx.img of=/home/supermap/gvxrv/testx2.img bs=1M count=20480
echo "讀取:"
sudo dd if=/home/supermap/gvxrv/testx2.img of=/dev/null bs=1M count=20480

echo "=============================================="
echo "Finished, by openthings"
echo "=============================================="

更細節的測試,可以使用pts,具體方法參見 Ubuntu測試-使用phoronix-test-suite

上面的方法也適用於其它磁碟,包括通過USB連線的外接磁碟盒。

  • 對於機械硬碟建議使用ZFS或RAID工具建立條帶或冗餘機制,以加快效能和提升容錯能力。