经过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工具创建条带或冗余机制,以加快性能和提高容错能力。
相关文章
相关标签/搜索