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