以 Docker 为代表的容器技术在云计算领域正扮演着越来越重要的角色,甚至一度被认为是虚拟化技术的替代品。企业级的容器应用常常需要将重要的数据持久化,方便在不同容器间共享。为了能够持久化数据以及共享容器间的数据,Docker 提出了 Volume 的概念。单机环境的数据卷难以满足 Docker 集群化的要求,因此需要引入分布式文件系统。目前开源的分布式文件系统有许多,例如 GFS,Ceph,HDFS,FastDFS,GlusterFS 等。
应用场景
正常安装环境下云帮需要一个分布式文件系统,社区版默认使用NFS作为共享存储,如果你的环境中有分布式文件存储系统,需要使用dc-ctl set storage --mode custom
命令安装存储管理服务,然后再将你系统中的分布式存储挂载到 /grdata 目录。GlusterFS 支持文件接口, Ceph 支持块,文件,对象接口
本文的应用场景主要针对云帮如何使用GlusterFS,后期会介绍云帮如何支持块存储。
GlusterFS介绍
GlusterFS是一个开源的分布式文件系统,它可以将分散的存储空间聚合在一起,形成一个虚拟的存储池。它支持横向扩展(Scale-Out),可通过增加存储节点来提升整个系统的容量或性能,存储容量可扩展至PB级。这一扩展机制是目前的存储技术热点,能有效应对容量、性能等存储需求。GlusterFS除了支持分散存储(Distributed,将不同的文件放在不同的存储节点)之外,还支持镜像存储(Replicated,同一个文件存放在两个以上的存储节点) 和分片存储(Stripped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储节点),其总体架构如下所示:
安装GlusterFS
集群环境
- 安装GlusterFS 至少需要2个节点,在本例中我们成为gfs01,gfs02,
- 需要这两台机器可以通过网络互相连接
- 两个节点的系统中必须包含2块磁盘,假设sda作为系统盘,那么sdb则作为GlusterFS的存储盘
注意:GlusterFS会将集群的动态配置信息存放到/var/lib/glusterd
文件中,需要确保这个文件可以写入,否则集群可能会发生问题,甚至下线,因此,需要确保系统某有足够的空间,不要让磁盘写满。
机器配置
主机名 | IP地址 | 说明 |
---|---|---|
gfs01 | 172.16.0.151 | 存储节点01 |
gfs02 | 172.16.0.150 | 存储节点01 |
client | 172.16.0.152 | 测试挂载的机器 |
格式化和挂载磁盘
主要目的就是将磁盘格式化为xfs,作为glusterfs的底层存储文件系统.
(2个节点都需要执行): 注意: 这个示例是以/dev/sdb
作为数据磁盘。
如果是Debian/Ubuntu系统可能没有mkfs.xfs
命令,需要手动执行安装
apt-get install -y xfsprogs
mkfs.xfs -i size=512 /dev/sdb
mkdir -p /grdata
echo '/dev/sdb /grdata xfs defaults 1 2' >> /etc/fstab
mount -a && mount
命令执行完成后,你可以看到 /dev/sdb
被挂载到了 /grdata
目录下。
root@gfs01:~# df -h
...
/dev/sdb 97M 5.2M 92M 6% /grdata