专栏首页Rainbond开源「容器云平台」敲黑板 | 云帮储存那点事儿

敲黑板 | 云帮储存那点事儿

应用场景

正常安装环境下云帮需要一个分布式文件系统,社区版默认使用NFS作为共享存储,如果你的环境中有分布式文件存储系统,需要使用dc-ctl set storage --mode custom 命令安装存储管理服务,然后再将你系统中的分布式存储挂载到 /grdata 目录。 本文的应用场景主要针对使用GlusterFS。

GlusterFS介绍

GlusterFS是一个开源的分布式文件系统,它可以将分散的存储空间聚合在一起,形成一个虚拟的存储池。它支持横向扩展(Scale-Out),可通过增加存储节点来提升整个系统的容量或性能,存储容量可扩展至PB级。这一扩展机制是目前的存储技术热点,能有效应对容量、性能等存储需求。GlusterFS除了支持分散存储(Distributed,将不同的文件放在不同的存储节点)之外,还支持镜像存储(Replicated,同一个文件存放在两个以上的存储节点) 和分片存储(Stripped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储节点)

安装GlusterFS

集群环境

  • 安装GlusterFS 至少需要2个节点,在本例中我们成为gfs01,gfs02,
  • 需要这两台机器可以通过网络互相连接
  • 两个节点的系统中必须包含2块磁盘,假设sda作为系统盘,那么sdb则作为GlusterFS的存储盘
  • 注意:GlusterFS会将集群的动态配置信息存放到/var/lib/glusterd文件中,需要确保这个文件可以写入,否则集群可能会发生问题,甚至下线,因此,需要确保系统某有足够的空间,不要让磁盘写满。

机器配置

格式化和挂载磁盘

主要目的就是将磁盘格式化为xfs,作为glusterfs的底层存储文件系统.

(2个节点都需要执行): 注意: 这个示例是以/dev/sdb作为数据磁盘。 如果是Debian/Ubuntu系统可能没有mkfs.xfs命令,需要手动执行安装 apt-get install -y xfsprogs

mkfs.xfs -i size=512 /dev/sdb
mkdir -p /grdataecho '/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-commonsudo add-apt-repository ppa:gluster/glusterfs-3.8sudo apt-get updatesudo 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: 1Hostname: gfs02
Uuid: c191b17b-ab9d-4b15-a70d-dcc92be067c9
State: Peer in Cluster (Connected)

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

设置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 infoVolume Name: gv0
Type: Replicate
Volume ID: fde79f7d-294b-4eea-ac95-73bba9f24435
Status: Started
Snapshot Count: 0Number of Bricks: 1 x 2 = 2Transport-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 存储卷挂载到/mntmount -t glusterfs 172.16.0.151:/gv0 /grdata
df -h172.16.0.151:/gv0   97M  5.4M   92M   6% /grdata# 确认挂载结果mount -t fuse.glusterfs172.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/fstab172.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

逻辑卷问题

逻辑卷由一个或多个存储块(Brick)组成,每个存储块对应存储池中的一个目录。 GlusterFS的基本类型有三个,分别是分散存储(Distributed,将不同的文件放在不同的存储块)、镜像存储(Replicated,同一个文件存放在两个以上的存储块,相当于RAID1) 和分片存储(Striped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储块,相当于RAID0)。另外Distributed也可以跟Replicated和Striped组合形成新的类型。

END

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


本文分享自微信公众号 - 好雨云(goodrain-cloud)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 行为型模式:模板方法

    Define the skeleton of an algorithm in an operation,deferring some steps to subc...

    LieBrother
  • 【R语言温故而知新】使用for、while 以及repeat-break实现循环语句

    在R语言中,可以使用for、while 以及repeat-break实现循环语句。循环语句可以简单依据计数操作(当计数器达到了设定的循环次数时自动停止)或者某一...

    统计学家
  • 【C#】SM2C多云平台安全数据库应用

    下文为论文中的程序实现进行了英文描述,在此做备份,该应用上传在Github上https://github.com/qqxx6661/SMC_Yang,欢迎for...

    Rude3Knife
  • 【R语言经典实例8】如何定义一个R函数。

    使用关键字function,并在其后跟随函数参数列表和函数主体。其基本形式如下: function(param1, ...., paramN) expr

    统计学家
  • 【R的极客理想系列文章】R语言中的数学计算

    R是作为统计语言,生来就对数学有良好的支持,一个函数就能实现一种数学计算,所以用R语言做数学计算题特别方便。如果计算器中能嵌入R的计算函数,那么绝对是一种高科技...

    统计学家
  • 【推荐阅读--R语言在最优化中的应用】用Rglpk包解决线性规划与整数规划 ​

    线性规划(linear programming)和整数规划(integerprogramming)的主要区别是决策变量的约束不同,其中线性规划的变量为正实数,而...

    统计学家
  • 温故知新--R基础知识(下)

    数组可以看作是带有多个下标类型相同的元素集合。 维度向量(dimension vector)是一个正整数向量。如果它的长度为k,那么该数组就是k-维的。

    统计学家
  • 温故知新--R基础知识(上)

    R是一种语法非常简单的表达式语言(expression language),大小写敏感。可以在R环境下使用的命名字符集依赖于R所运行的系统和国家(系统的loca...

    统计学家
  • 【R语言经典实例5】如何比较两个向量

    比较运算符(==、!=、<、>、<=、>=)能对两向量间的各个元素进行比较。这些运算符也能将向量中所有元素与一个常数进行比较。返回结果是每两个元素间比较结果的逻...

    统计学家
  • 【R语言经典实例6】对整个向量执行计算

    基本的数学运算符可以对向量中的元素进行逐个计算。许多其他的函数也能对向量元素逐个进行运算,并以向量的形式输出结果。

    统计学家

扫码关注云+社区

领取腾讯云代金券