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

固態盤(SSD)的速度比機械硬盤快不少(400MB/s~1.7GB/s),可是價格昂貴,因此每每容量比較小。經過GlusterFS能夠把多節點SSD黏合爲一塊大的網絡SSD,能夠在局域網上任意節點上鍊接使用,從而更方便使用,大幅度提升SSD的使用效率,提高系統速度、下降整體成本。linux

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

這裏使用的系統爲Ubuntu18.04.1 LTS版本,下面是對實驗過程的一些記錄。服務器

一、安裝支持軟件

安裝軟件:網絡

#安裝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

二、建立三種GlusterFS卷

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

  • 分佈式卷,將不一樣文件分別放到不一樣的節點文件夾中,能夠得到一個虛擬的「大」硬盤。
    • 好比,我這三個節點分別有2T、2T、1T的空間,最後能夠獲得5T的GlusterFS虛擬卷。
    • 對單個文件的讀寫是由單節點完成,性能受制於該選中節點的最大速度。
    • 節點之間沒有鏡像等容錯,建議節點內設置RAID1/5等容錯機制。
  • 條帶卷,將同一個文件分帶存放到不一樣節點文件夾,容量加合能夠得到「大」硬盤,能夠並行地對條帶讀寫,適合大文件。
  • 副本卷,將同一個文件在多個節點上覆制,能夠提高可靠性和讀取性能,寫入性能比單節點略有下降。
  • 還有一些其它的的卷類型(好比副本+條帶),這裏暫不作測試。

腳本命令以下:spa

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

三、掛載GlusterFS卷

能夠從任意一個節點掛載GlusterFS網絡卷。以下:.net

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查看掛載卷的信息。

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

四、性能簡單測試

使用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工具創建條帶或冗餘機制,以加快性能和提高容錯能力。
相關文章
相關標籤/搜索