资讯专栏INFORMATION COLUMN

容器化管理平台存储那点事

xcold / 1375人阅读

摘要:机器配置主机名地址说明存储节点存储节点测试挂载的机器格式化和挂载磁盘主要目的就是将磁盘格式化为,作为的底层存储文件系统个节点都需要执行注意这个示例是以作为数据磁盘。

以 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
安装Glusterfs

Debian8

#add GPG key
wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.8/LATEST/rsa.pub | apt-key add -
#add source
echo deb http://download.gluster.org/pub/gluster/glusterfs/3.8/LATEST/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list
#update package
apt-get update
#install
apt-get install -y glusterfs-server

CentOS

 yum install centos-release-gluster38
 yum makechche
 yum install glusterfs-server

Ubuntu 14

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:gluster/glusterfs-3.8
sudo apt-get update
sudo apt-get install glusterfs-server
启动GlusterFS管理服务
Ubuntu/Debian启动
service glusterfs-server start
service glusterfs-server status
Centos启动
service glusterd start
service glusterd status
    glusterd.service - LSB: glusterfs server
           Loaded: loaded (/etc/rc.d/init.d/glusterd)
       Active: active (running) since Mon, 13 Aug 2012 13:02:11 -0700; 2s ago
      Process: 19254 ExecStart=/etc/rc.d/init.d/glusterd start (code=exited, status=0/SUCCESS)
       CGroup: name=systemd:/system/glusterd.service
           ├ 19260 /usr/sbin/glusterd -p /run/glusterd.pid
           ├ 19304 /usr/sbin/glusterfsd --xlator-option georep-server.listen-port=24009 -s localhost...
           └ 19309 /usr/sbin/glusterfs -f /var/lib/glusterd/nfs/nfs-server.vol -p /var/lib/glusterd/...
配置信任池(trusted pool)

在gfs01执行

  gluster peer probe gfs02

注意: 当使用主机名时,需要确保两台机器之间都设置了主机名(ip也可以)。

查看状态

# gluster peer status
Number of Peers: 1

Hostname: gfs02
Uuid: c191b17b-ab9d-4b15-a70d-dcc92be067c9
State: Peer in Cluster (Connected)

注意:一旦存储池建立之后,只有池中的信任成员可以添加新的节点,新服务器不能从外部加入到已经存在的池

#### 逻辑卷问题
逻辑卷由一个或多个存储块(Brick)组成,每个存储块对应存储池中的一个目录。
GlusterFS的基本类型有三个,分别是分散存储(Distributed,将不同的文件放在不同的存储块)、镜像存储(Replicated,同一个文件存放在两个以上的存储块,相当于RAID1) 和分片存储(Striped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储块,相当于RAID0)。另外Distributed也可以跟Replicated和Striped组合形成新的类型。
这里简单介绍一些基本卷
###### distribute volume 分布式卷
基于 Hash 算法将文件分布到所有 brick server,只是扩大了磁盘空间,不具备容错能力。由于distribute volume 使用本地文件系统,因此存取效率并没有提高,相反会因为网络通信的原因使用效率有所降低,另外本地存储设备的容量有限制,因此支持超大型文件会有一定难度。

###### stripe volume 条带卷
类似 RAID0,文件分成数据块以 Round Robin 方式分布到 brick server 上,并发粒度是数据块,支持超大文件,大文件的读写性能高。

###### replica volume 复制卷
文件同步复制到多个 brick 上,文件级 RAID1,具有容错能力,写性能下降,读性能提升。Replicated 模式,也称作 AFR(Auto File Replication),相当于 RAID1,即同一文件在多个镜像存储节点上保存多份,每个 replicated 子节点有着相同的目录结构和文件,replica volume 也是在容器存储中较为推崇的一种

设置GlusterFS逻辑卷

gfs01和gfs02都需要执行

#这里跳过,已经建立了
mkdir -p /grdata/

随便在一台机器上执行

root@gfs01:~# gluster volume create gv0 replica 2 gfs01:/grdata/ gfs02:/grdata/
volume create: gv0: success: please start the volume to access data
# 使用Replicated的方式,建立一个名为gv0的卷(Volume),存储块(Brick)为2个,分别为gfs01:/grdata和gfs02:/grdata。

启用逻辑卷

root@gfs01:~# gluster volume start gv0
volume start: gv0: success

查看逻辑卷状态,确认状态为 “Started”

root@gfs01:~# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: fde79f7d-294b-4eea-ac95-73bba9f24435
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 172.16.0.151:/grdata
Brick2: 172.16.0.150:/grdata
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

注意:如果存储卷没有启动,需要/var/log/glusterfs 目录查看日志,文件通常是 glusterfs-glusterd.vol.log

相关命令
1.创建信任存储池(如要创建一个包含3个服务器的存储池,则需要从第一个服务器server1中把另外两个服务器加入存储池中)
  # gluster peer probe server2
  Probe successful

  # gluster pool peer server3
  Probe successful
2.查看存储池状态
  # gluster peer status
  Number of Peers: 2

  Hostname: 172.16.0.151
  Uuid: 86bd7b96-1320-4cd5-b3e1-e537d06dd5f7
  State: Peer in Cluster (Connected)

  Hostname: 172.16.0.150
  Uuid: c191b17b-ab9d-4b15-a70d-dcc92be067c9
  State: Peer in Cluster (Connected)
3.从存储池移除服务器
  # gluster peer detach 172.16.0.150
  Detach successful
4.逻辑卷管理
  gluster volume delete/stop/start 逻辑卷名(gv0)
5.逻辑卷中新增存储块(操作存储块后都需要执行gluster volume rebalance gv0 start重建数据)
  gluster volume add-brick/remove-brick gv0 gfs03:/grdata
测试GlusterFS存储卷

在这一步中,我们使用client这台机器来挂载GlusterFS的存储卷进行测试。这台机器需要安装GlusterFS的client端程序,这里我们只使用client机器进行挂载和文件读写测试。

# 安装GlusterFS client程序
### CentOS / RHEL ###
yum install -y glusterfs-client

### Ubuntu / Debian ###
apt-get install -y glusterfs-client


# 将GlusterFS 存储卷挂载到/mnt
mount -t glusterfs 172.16.0.151:/gv0 /grdata
df -h
172.16.0.151:/gv0   97M  5.4M   92M   6% /grdata
# 确认挂载结果
mount -t fuse.glusterfs
172.16.0.151:/gv0 on /grdata type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
# 重启自动挂载 在/etc/fstab
172.16.0.151:/grdata /grdata glusterfs defaults,_netdev 0 0

# 将/var/log/messages复制到存储卷,循环执行100次
for i in `seq -w 1 100`; do cp -rp /var/log/messages /grdata/copy-test-$i; done

先检查挂载点

ls -lA /mnt | wc -l

可以看到 100个文件,在每个存储节点查看挂载点信息

ls -lA /grdata

因为创建卷gv0的时候使用的是镜像存储(Replicated),所以在gv0上写入的文件应该同时出现在两个服务器的/grdata目录上,你可以看到每台机器都有100个文件,如果集群不是复制模式,每台机器的存储文件应该各50

END

到这里关于GlusterFS介绍就到这里了。那么云帮如何配置呢,很简单第一步
dc-ctl set storage --mode custom,接着按照如上的操作将系统中的分布式存储挂载到 /grdata 目录即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26902.html

相关文章

  • pjax不再神秘,hash、state点事

    摘要:初步理解如果最近打电话给武汉的小伙伴,他说信号不好,那么相信我,他肯定不是真的信号不好,也不是不想和你说话,而是他可能在冰箱里。。。 初步理解 如果最近打电话给武汉的小伙伴,他说信号不好,那么相信我,他肯定不是真的信号不好,也不是不想和你说话,而是他可能在冰箱里。。。武汉的天气从来都是喜怒无常的,是吧,屌丝气十足,今年也是丝毫看不出有任何逆袭的迹象和可能性,当然咱也没必要去操那个心;好...

    solocoder 评论0 收藏0
  • 我在全球最大的同性社交平台点事

    摘要:从最大的同性社交平台获取数据好了,言归正传,回到题目。乌云密布的爬虫百度网盘这件事,是我不想看到的,这类安全问题的一个共同特点用户自身确实存在问题。 本文作者:夏之冰雪,i春秋签约作家 《我在百度网盘上看到上万条车主个人信息,企业、政府高官信息、各种数据库和无穷无尽的盗版》,一时间,这篇文章就火了,火爆程度另百度猝不及防。 其实呢,这事真不能全怪百度,毕竟用户分享出去了。之所以引起这么...

    AlphaWatch 评论0 收藏0
  • 写技术博客点事

    摘要:从现在开始,养成写技术博客的习惯,或许可以在你的职业生涯发挥着不可忽略的作用。如果想了解更多优秀的前端资料,建议收藏下前端英文网站汇总这个网站,收录了国外一些优质的博客及其视频资料。 前言 写文章是一个短期收益少,长期收益很大的一件事情,人们总是高估短期收益,低估长期收益。往往是很多人坚持不下来,特别是写文章的初期,刚写完文章没有人阅读会有一种挫败感,影响了后期创作。 从某种意义上说,...

    ddongjian0000 评论0 收藏0
  • 写技术博客点事

    摘要:从现在开始,养成写技术博客的习惯,或许可以在你的职业生涯发挥着不可忽略的作用。如果想了解更多优秀的前端资料,建议收藏下前端英文网站汇总这个网站,收录了国外一些优质的博客及其视频资料。 前言 写文章是一个短期收益少,长期收益很大的一件事情,人们总是高估短期收益,低估长期收益。往往是很多人坚持不下来,特别是写文章的初期,刚写完文章没有人阅读会有一种挫败感,影响了后期创作。 从某种意义上说,...

    NSFish 评论0 收藏0
  • 关于localStorage面试的点事

    摘要:已经超出本地存储限定大小可进行超出限定大小之后的操作,如下面可以先清除记录,再次保存面试官一波素质三连对于只是会使用的同学来说,肯定是不得其解的。 最近面试的时候关于html5API总会被问到localStorage的问题, 对于一般的问题很简单,无非就是 localStorage、sessionStorage和cookie这三个客户端缓存的区别 localStorage的API,g...

    timger 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<