通過GlusterFS黏合多節點SSD剩餘空間
阿新 • • 發佈:2018-11-25
固態盤(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,更多的設定模式參見:
- ZFS的配置參見 ZFS快速安裝和效能測試 。
然後在每個節點上新增儲存的對端節點,如下(假設操作伺服器為server1):
gluster peer probe server2
gluster peer probe server3
然後,確認一下設定是否成功:
gluster peer status
- GlusterFS的配置參見 安裝 GlusterFS - 快速開始 。
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工具建立條帶或冗餘機制,以加快效能和提升容錯能力。