通過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工具建立條帶或冗餘機制,以加快性能和提升容錯能力。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章