[关闭]
@zhangsiming65965 2019-01-20T13:37:06.000000Z 字数 14835 阅读 144

分布式云存储Glusterfs

云计算项目

---Author:张思明 ZhangSiming

---Mail:1151004164@cnu.edu.cn

---QQ:1030728296

如果有梦想,就放开的去追;
因为只有奋斗,才能改变命运;


一、项目背景

1.1 公司以前用的存储

游戏公司一直以来用的是老牌的NFS网络文件系统,但是NFS近几年一直没有更新,从实用性和安全性出发考虑都已经不能再使用;NFS好处是允许公司内网的计算机通过TCP/IP协议网络共享资源,只需要简单的挂载NFS服务器即可,但是NFS存在的缺点很明显:

  • 存储空间有限,随着公司业务的增多,用户的增多,难以扩展存储空间
  • 存在NFS服务器自身的单点故障,公司极其不推荐使用单点故障的服务
  • 大量地并发IO读写承受能力差,因为所有的流量都会来到NFS一台服务器上

1.2 运维总监的要求

基于NFS难以扩展容量,存在IO瓶颈以及存在单点问题等缺陷,运维总监要求运维小组进行市场调研,更换公司的文件系统体系,改善这些缺陷

二、工具调研

2.1 Ceph,TFS,FastDFS,MooseFS,GlusterFS对比

既然已经不考虑NFS了,我们调研了市场上众多的文件系统,比较了其特性以及优缺点

TFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源

特性:

在TFS文件系统中,NameServer负责管理文件元数据,通过HA机制实现主备热切换,由于所有元数据都是在内存中,其处理效率非常高效,系统架构也非常简单,管理也很方便;TFS的DataServer作为分部署数据存储节点,同时也具备负载均衡和冗余备份的功能,由于采用自有的文件系统,对小文件会采取合并策略,减少数据碎片,从而提升IO性能;TFS将元数据信息(BlockID、FileID)直接映射至文件名中,这一设计大大降低了存储元数据的内存空间

优点 缺点
针对小文件量身定做,随机IO性能比较高 TFS只对小文件做优化,不适合大文件的存储
支持在线扩容机制,增强系统的可扩展性 不支持POSIX通用接口访问,通用性较低
实现了软RAID,增强系统的并发处理能力及数据容错恢复能力 不支持自定义目录结构,及文件权限控制
支持主备热倒换,提升系统的可用性 通过API下载,存在单点的性能瓶颈
支持主从集群部署,其中从集群主要提供读/备功能 官方文档非常少,学习成本高

FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃。系统中存在三种节点:Client、Tracker、Storage,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个Storage,从而实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容

特性:

在上述介绍中Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器,由此可见Tracker的作用至关重要,也就增加了系统的单点故障,为此FastDFS支持多个备用的Tracker,虽然实际测试发现备用Tracker运行不是非常完美,但还是能保证系统可用。在文件同步上,只有同组的Storage才做同步,由文件所在的源Storage服务器push至其它Storage服务器,目前同步是采用Binlog方式实现,由于目前底层对同步后的文件不做正确性校验,因此这种同步方式仅适用单个集群点的局部内部网络,如果在公网上使用,肯定会出现损坏文件的情况,需要自行添加文件校验机制。支持主从文件,非常适合存在关联关系的图片,在存储方式上,FastDFS在主从文件ID上做取巧,完成了关联关系的存储

优点 缺点
系统无需支持POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高 不支持断点续传,对大文件将是噩梦(FastDFS不适合大文件存储)
支持在线扩容机制,增强系统的可扩展性 不支持POSIX通用接口访问,通用性较低
实现了软RAID,增强系统的并发处理能力及数据容错恢复能力 对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略
支持主从文件,支持自定义扩展名 同步机制不支持文件正确性校验,降低了系统的可用性
主备Tracker服务,增强系统的可用性 通过API下载,存在单点的性能瓶颈

MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,同时其提供的web管理界面非常方便查看当前的文件存储状态

特性:

MooseFS是轻量级文件系统,性能相对较差,由四部分组成:Managing Server 、Data Server 、Metadata BackupServer及Client其中所有的元数据都是由Managing Server管理,为了提高整个系统的可用性,Metadata Backup Server记录文件元数据操作日志,用于数据的及时恢复DataServer可以分布式部署,存储的数据是以块的方式分布至各存储节点的,因此提升了系统的整体性能,同时Data Server提供了冗余备份的能力,提升系统的可靠性Client通过FUSE方式挂载,提供了类似POSIX的访问方式,从而降低了Client端的开发难度,增强系统的通用性

优点 缺点
部署安装非常简单,管理方便 存在单点性能瓶颈及单点故障(master服务器)
支持在线扩容机制,增强系统的可扩展性 MFS Master节点很消耗内存
实现了软RAID,增强系统的 并发处理能力及数据容错恢复能力 对于小于64KB的文件,存储利用率较低
数据恢复比较容易,增强系统的可用性;有回收站功能,方便业务定制

Ceph是一个彻底的的开源分布式文件系统,其设计之初,就将单点故障作为首先要解决的问题,因此该系统具备高可用性、高性能及可 扩展等特点。该文件系统支持目前还处于试验阶段的高性能文件系统BTRFS(B-Tree文件系统),同时支持按OSD方式存储,因此其性能是很卓越的, 因为该系统处于试商用阶段,需谨慎引入到生产环境

特性:

Ceph底层存储是基于RADOS(可靠的、自动的分布式对象存储),它提供了LIBRADOS/RADOSGW/RBD/CEPH FS方式访问底层的存储系统,通过FUSE,Ceph支持类似的POSIX访问方式;Ceph分布式系统中最关键的MDS节点是可以部署多台,无单点故障的问题,且处理性能大大提升Ceph通过使用CRUSH算法动态完成文件inode number到object number的转换,从而避免再存储文件metadata信息,增强系统的灵活性

优点 缺点
支持对象存储(OSD)集群,通过CRUSH算法,完成文件动态定位, 处理效率更高 目前处于试验阶段,系统稳定性有待考究
支持通过FUSE方式挂载,降低客户端的开发成本,通用性高
支持分布式的MDS/MON,无单点故障粗体文本
强大的容错处理和自愈能力5)支持在线扩容和冗余备份,增强系统的可靠性

GlusterFS是Red Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可 轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用 于垮集群的应用场景

特性:

目前GlusterFS支持FUSE方式挂载,可以通过标准的NFS/SMB/CIFS协议像访问本体文件一样访问文件系统,同时其也支持HTTP/FTP/GlusterFS访问,同时最新版本支持接入Amazon的AWS系统GlusterFS系统通过基于SSH的命令行管理界面,可以远程添加、删除存储节点,也可以监控当前存储节点的使用状态GlusterFS支持集群节点中存储虚拟卷的扩容动态扩容;同时在分布式冗余模式下,具备自愈管理功能,在Geo冗余模式下,文件支持断点续传、异步传输及增量传送等特点

优点 缺点
系统支持POSIX(可移植操作系统),支持FUSE挂载通过多种协议访问,通用性比较高 通用性越强,其跨越的层次就越多,影响其IO处理效率
支持在线扩容机制,增强系统的可扩展性 频繁读写下,会产生垃圾文件,占用磁盘空间
实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
强大的命令行管理,降低学习、部署成本
支持整个集群镜像拷贝,方便根据业务压力,增加集群节点
官方资料文档专业化,该文件系统由Red Hat企业级做维护,版本质量有保障

综上所述:

TFS是针对小文件量身定做的,FastDFS有着不支持断点续传的弊端,MooseFS有着master服务器的单点故障,Ceph还在试验阶段,不推荐投入生产环境。所以选择GlusterFS,因为其具有PB级容量,GB级别吞吐量,完全分布式不存在单点故障,拥有强大的横向扩容功能,单一化管理工具,方便集中化管理。对于我们游戏公司,没有琐碎的小文件存储,正好避开了GlusterFS的弱势,故选用GlusterFS代替NFS作为文件存储系统

三、项目运行环境

公司测试环境ansible部署机配置

服务器品牌 DELL
服务器型号 PowerEdge 12G M420
操作系统发行版信息 CentOS release 7.5(Final)
内核信息 2.6.32-431.el6.x86_64
CPU型号 Inter(R) Core(TM) i5-8250U CPU@1.60GHz
CPU主频 1800.001(MHz)
操作系统位数 64位
内存 2G
Python环境 3.5.2
ansible版本 2.7.4

石景山IDC机房租8个机位作为GlusterFS集群

服务器品牌 DELL
服务器型号 PowerEdge 12G M420
操作系统发行版信息 CentOS release 6.5(Final)
内核信息 2.6.32-431.el6.x86_64
CPU型号 Inter(R) Core(TM) i5-8250U CPU@1.60GHz
CPU主频 1800.001(MHz)
操作系统位数 64位
内存 2G
磁盘 STAT盘2T
一台服务器磁盘个数 8
网卡 每台节点服务器配两块网卡,一块百兆网卡,一块千兆网卡
计划项目上线时间 2018-5-20

环境要求概述

DELL 2U机型,磁盘STAT盘2T;为了充分保证系统的稳定性和性能,所有Glusterfs节点配置尽量一致;一台节点服务器8块硬盘,2块做一个Raid1,6块做一个Raid5,8个节点服务器组成Gluster吞吐量大概是32/64 *8 -0.8(实际会比官方数据小一些)=3.2GB/s,GlusterFS受网络带宽影响,需要专门配8块千兆网卡,交换机需要是万兆交换机。系统要求使用CentOS6,分区的时候,swap分区和内存一样大小(服务器内存小于16G),剩余空间给Glusterfs用,划分单独的硬盘空间,其他杂余的工具一概不装;服务器主备机器要放在不同的机柜,连接不同的交换机,即使一个机柜出现问题,不影响服务的运行;选用分布式复制卷部署(加强安全性)

四、项目实施本人主要职责

配合运维组长,全程跟踪项目,进行GlusterFS分布式复制卷的全网部署及NFS-->GlusterFS数据迁移

五、部署Gluster

5.1 利用脚本和ansible一键给所有GlusterFS节点服务器部署GlusterFS工具

  1. #一键分发脚本
  2. #!/bin/bash
  3. ssh-keygen -f ~/.ssh/id_rsa -t rsa -P "" &>/dev/null < /yes.txt
  4. tar zcf glu.tar.gz glu
  5. for i in 192.168.17.22{1..8}
  6. sshpass -p "666666" ssh-copy-id -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" root@$i &>/dev/null
  7. scp /glu.tar.gz root@$i:/
  8. scp /etc/hosts root@$i:/etc/hosts
  9. done
  10. echo "transfer successful"
  11. #脚本执行
  12. [root@GlusterFS5 /]# sh Glu.sh
  13. glu.tar.gz 100% 6751KB 27.7MB/s 00:00
  14. hosts 100% 309 102.9KB/s 00:00
  15. glu.tar.gz 100% 6751KB 9.7MB/s 00:00
  16. hosts 100% 309 96.5KB/s 00:00
  17. glu.tar.gz 100% 6751KB 8.9MB/s 00:00
  18. hosts 100% 309 100.9KB/s 00:00
  19. glu.tar.gz 100% 6751KB 13.0MB/s 00:00
  20. hosts 100% 309 52.4KB/s 00:00
  21. glu.tar.gz 100% 6751KB 16.0MB/s 00:00
  22. hosts 100% 309 181.4KB/s 00:00
  23. glu.tar.gz 100% 6751KB 9.7MB/s 00:00
  24. hosts 100% 309 96.5KB/s 00:00
  25. glu.tar.gz 100% 6751KB 8.9MB/s 00:00
  26. hosts 100% 309 100.9KB/s 00:00
  27. glu.tar.gz 100% 6751KB 13.0MB/s 00:00
  28. hosts
  29. transfer successful
  30. #ansible一键安装glusterfs脚本
  31. #!/bin/bash
  32. mount /dev/sr0 /media/cdrom
  33. cd /
  34. tar xf /glu.tar.gz
  35. cd /glu
  36. yum -y install createrepo &>/dev/null
  37. createrepo -v .
  38. cat > /etc/yum.repos.d/glu.repo << FOF
  39. [glu]
  40. name=glu
  41. baseurl=file:///glu
  42. gpgcheck=0
  43. enabled=1
  44. FOF
  45. rm -rf /etc/yum.repos.d/CentOS-Media.repo
  46. yum -y install glusterfs-server glusterfs-cli glusterfs-geo-replication &>/dev/null
  47. #ansible一键运行命令
  48. ansible nginx -m script -a 'Gluinstall.sh'
  49. #安装结果
  50. [root@GlusterFS3 glu]# which glusterfs
  51. /usr/sbin/glusterfs #所以GlusterFS服务器节点安装成功
  52. [root@GlusterFS3 glu]# glusterfs -V
  53. glusterfs 3.7.20 built on Jan 30 2017 15:39:27
  54. Repository revision: git://git.gluster.com/glusterfs.git
  55. Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
  56. GlusterFS comes with ABSOLUTELY NO WARRANTY.
  57. It is licensed to you under your choice of the GNU Lesser
  58. General Public License, version 3 or any later version (LGPLv3
  59. or later), or the GNU General Public License, version 2 (GPLv2),
  60. in all cases as published by the Free Software Foundation.

5.2 启动所有节点的glusterfs服务,并加入信任池

  1. [root@GlusterFS1 ~]# /etc/init.d/glusterd start
  2. Starting glusterd: [ OK ]
  3. [root@GlusterFS1 ~]# chkconfig glusterd on #开启glusterfs服务,并添加开机自启动
  4. [root@GlusterFS1 ~]# gluster peer probe GlusterFS2
  5. peer probe: success.
  6. [root@GlusterFS1 ~]# gluster peer probe GlusterFS3
  7. peer probe: success.
  8. [root@GlusterFS1 ~]# gluster peer probe GlusterFS4
  9. peer probe: success.
  10. [root@GlusterFS1 ~]# gluster peer probe GlusterFS5
  11. peer probe: success.
  12. [root@GlusterFS1 ~]# gluster peer probe GlusterFS6
  13. peer probe: success.
  14. [root@GlusterFS1 ~]# gluster peer probe GlusterFS7
  15. peer probe: success.
  16. [root@GlusterFS1 ~]# gluster peer probe GlusterFS8
  17. peer probe: success.
  18. [root@GlusterFS1 ~]# gluster peer status
  19. Number of Peers: 7 #把四个gluster加入信任池(在一台操作即可)
  20. Hostname: GlusterFS2
  21. Uuid: 3618a2a3-2ef4-48c9-a7a5-32a11db7d58d
  22. State: Peer in Cluster (Connected)
  23. Hostname: GlusterFS3
  24. Uuid: 07f31c0f-3c17-4928-a1fe-b008593fe327
  25. State: Peer in Cluster (Connected)
  26. Hostname: GlusterFS4
  27. Uuid: e3b38653-2ede-43d6-8e63-4260801b359c
  28. State: Peer in Cluster (Connected)
  29. Hostname: GlusterFS5
  30. Uuid: e3b38653-2ede-43d6-8e63-4260801b359c
  31. State: Peer in Cluster (Connected)
  32. Hostname: GlusterFS6
  33. Uuid: e3b38653-2ede-43d6-8e63-4260801b359c
  34. State: Peer in Cluster (Connected)
  35. Hostname: GlusterFS7
  36. Uuid: e3b38653-2ede-43d6-8e63-4260801b359c
  37. State: Peer in Cluster (Connected)

5.3 先分区,之后格式化分区,并挂载到相应目录

  1. #ansible一键格式化sdb,sdc;并挂载
  2. #ansible脚本
  3. #!/bin/bash
  4. mkfs.ext4 /dev/sd{b..i} < /yes.txt
  5. mkdir -p /gluster/brick{1..8}
  6. mount /dev/sdb /gluster/brick1
  7. mount /dev/sdc /gluster/brick2
  8. mount /dev/sdd /gluster/brick3
  9. mount /dev/sde /gluster/brick4
  10. mount /dev/sdf /gluster/brick5
  11. mount /dev/sdg /gluster/brick6
  12. mount /dev/sdh /gluster/brick7
  13. mount /dev/sdi /gluster/brick8
  14. #ansible运行命令
  15. ansible Glu -m script -a '/fs.sh' #一键给所有GlusterFS节点挂载
  16. #挂载结果
  17. [root@GlusterFS3 glu]# df -h | tail -8
  18. Filesystem Size Used Avail Use% Mounted on
  19. /dev/sdb 20G 172M 19G 1% /gluster/brick1
  20. /dev/sdc 20G 172M 19G 1% /gluster/brick2
  21. /dev/sdd 20G 172M 19G 1% /gluster/brick3
  22. /dev/sde 20G 172M 19G 1% /gluster/brick4
  23. /dev/sdf 20G 172M 19G 1% /gluster/brick5
  24. /dev/sdg 20G 172M 19G 1% /gluster/brick6
  25. /dev/sdh 20G 172M 19G 1% /gluster/brick7
  26. /dev/sdi 20G 172M 19G 1% /gluster/brick8

至此,gluster工具及节点基本部署完毕

5.4 创建分布式复制卷

  1. [root@GlusterFS1 ~]# gluster volume create gs1 replica 2 GlusterFS1:/gluster/brick1 GlusterFS2:/gluster/brick1 GlusterFS3:/gluster/brick1 GlusterFS4:/gluster/brick1 GlusterFS5:/gluster/brick1 GlusterFS6:/gluster/brick1 GlusterFS7:/gluster/brick1 GlusterFS8:/gluster/brick1force
  2. volume create: gs1: success: please start the volume to access data
  3. [root@GlusterFS1 ~]# gluster volume info gs2
  4. Volume Name: gs2
  5. Type: Replicate #复制卷
  6. Volume ID: db4b349a-ef68-49cf-8fdc-8946dd2a32cc
  7. Status: Created
  8. Number of Bricks: 2 x 4 = 8
  9. Transport-type: tcp
  10. Bricks:
  11. Brick1: GlusterFS1:/gluster/brick1
  12. Brick2: GlusterFS2:/gluster/brick1
  13. Brick3: GlusterFS3:/gluster/brick1
  14. Brick4: GlusterFS4:/gluster/brick1
  15. Brick5: GlusterFS5:/gluster/brick1
  16. Brick6: GlusterFS6:/gluster/brick1
  17. Brick7: GlusterFS7:/gluster/brick1
  18. Brick8: GlusterFS8:/gluster/brick1
  19. Options Reconfigured:
  20. performance.readdir-ahead: on
  21. #挂载测试
  22. [root@GlusterFS1 glusterfs]# gluster volume start gs1 #启动gs2复制卷
  23. volume start: gs1: success
  24. [root@GlusterFS1 glusterfs]# mount -t glusterfs 127.0.0.1:gs1 /workspace #挂载Glusterfs到挂载点目录

5.5 打开NFS方式挂载

因为往往公司服务器不一定都有安装了gluster工具,所有还要开启NFS挂载方式

  1. [root@GlusterFS1 ~]# rpm -qa rpcbind
  2. rpcbind-0.2.0-13.el6_9.1.x86_64
  3. [root@GlusterFS1 ~]# rpm -qa nfs-utils
  4. nfs-utils-1.2.3-75.el6_9.x86_64
  5. #查看是否安装了rpc和nfs工具
  6. #所有节只点开启rpcbind服务,不要开启nfs服务,如果开启了nfs服务,会导致volume失败
  7. [root@GlusterFS3 glu]# /etc/init.d/rpcbind start
  8. Starting rpcbind: [ OK ]
  9. [root@GlusterFS3 glu]# /etc/init.d/glusterd restart
  10. Stopping glusterd: [ OK ]
  11. Starting glusterd: [ OK ]
  12. #现在所有节点都可以通过NFS方式挂载了
  13. [root@GlusterFS5 ~]# mount -t nfs 192.168.17.225:/gs1 /workspace #测试服务器nfs方式挂载到/workspace目录
  14. [root@GlusterFS5 ~]# df -hT
  15. Filesystem Type Size Used Avail Use% Mounted on
  16. /dev/mapper/VolGroup-lv_root ext4 18G 972M 16G 6% /
  17. tmpfs tmpfs 491M 0 491M 0% /dev/shm
  18. /dev/sda1 ext4 485M 33M 427M 8% /boot
  19. /dev/sr0 iso9660 4.2G 4.2G 0 100% /media/cdrom
  20. 192.168.17.225:/gs1 nfs 40G 344M 38G 1% /workspace
  21. #挂载成功

5.6 企业Glusterfs文件系统优化

  1. [root@GlusterFS1 ~]# cat /etc/glusterfs/glusterd.vol
  2. volume management
  3. type mgmt/glusterd
  4. option working-directory /var/lib/glusterd
  5. option transport-type socket,rdma
  6. option transport.socket.keepalive-time 10
  7. option transport.socket.keepalive-interval 2
  8. option transport.socket.read-fail-log off
  9. option ping-timeout 0
  10. option event-threads 1
  11. # option base-port 49152 #给glusterfs节点之间的tcp连接换一个端口

GlusterFS支持的优化参数:

调整参数方法:Glusster volume set <卷> <参数>

参数项目 说明 缺省值
Auth.allow IP访问授权 allow all
Cluster.min-free-disk 剩余磁盘空间阈值 10%
Cluster.stripe-block-size 条带大小 128KB
Network.frame-timeout 请求等待时间 1800s
Network.ping-timeout 客户端等待时间 42s
Nfs.disabled 关闭NFS服务 OFF
Performance.io-thread-count IO线程数 16
Performance.cache-refresh-timeout 缓存校验周期 1s
Performance.cache-size 读缓存大小 32MB
Performance.quick-read 优化读取小文件的性能 off
Performance.read-ahead 用预读的方式提高读取的性能,有利于应用频繁持续性的访问文件,当应用完成当前数据块读取的时候,下一个数据块就已经准备好了 off
Performance.write-behind 写入数据时,先写入缓存内,再写入硬盘内,以提高写入的性能 off
Performance.io-cache 缓存已经被读过的 off
  1. [root@GlusterFS1 ~]# gluster volume set gs1 performance.read-ahead on
  2. volume set: success
  3. [root@GlusterFS1 ~]# gluster volume set gs1 performance.cache-size 256MB #优化设置预先缓存优化,并且读缓存设为256MB
  4. volume set: success

5.7 监控及日常维护

监控使用Zabbix的自带模板,监控项:CPU,内存,主机存活,磁盘空间,主机运行时间,系统负载LOAD...

还可以对GlusterFS做quota磁盘限额

以下命令针对复制卷

  1. [root@GlusterFS1 gs2]# mkdir /bbb
  2. [root@GlusterFS1 gs2]# mount -t glusterfs 127.0.0.1:gs2 /bbb #挂载Glusterfs分布式复制卷
  3. [root@GlusterFS1 gs2]# gluster volume quota gs2 enable
  4. quota command failed : Quota is already enabled
  5. [root@GlusterFS1 gs2]# gluster volume quota gs2 limit-usage / 10GB #进行磁盘限额,这里的/指卷的挂载点目录
  6. volume quota : success
  7. [root@GlusterFS1 gs2]# gluster volume quota gs2 list #查看磁盘限额
  8. Path Hard-limit Soft-limit Used Available Soft-limit exceeded? Hard-limit exceeded?
  9. -------------------------------------------------------------------------------------------------------------------------------
  10. / 10.0GB 80%(8.0GB) 0Bytes 10.0GB No No
  11. /dir1 10.0GB 80%(8.0GB) 0Bytes 10.0GB No No
  12. [root@GlusterFS1 gs2]# gluster volume quota gs2 remove / #删除磁盘限额
  13. volume quota : success
  14. [root@GlusterFS1 gs2]# gluster volume quota gs2 disable #关闭Glusterfs磁盘限额服务
  15. Disabling quota will delete all the quota configuration. Do you want to continue? (y/n) y
  16. volume quota : success

六、项目验收成果

运维总监通过,让我们运维小组继续跟踪监控,GlusterFS的使用情况,看系统负载,承受IO能力的表现等,一周后,如果稳定,拷贝NFS的文件到GlusterFS上,实现NFS到G'lusterFS的彻底过渡

七、在后续维护过程中遇到过什么问题?以及如何解决的?

首先配置一台与故障机完全一致的机器(IP,硬盘,等等...),查看故障节点的UUID

  1. [root@GlusterFS2 ~]# gluster peer status
  2. Number of Peers: 3
  3. Hostname: GlusterFS3
  4. Uuid: 07f31c0f-3c17-4928-a1fe-b008593fe327
  5. State: Peer in Cluster (Disconnected) #记录下这个UUID
  6. Hostname: GlusterFS1
  7. Uuid: c4ef65ed-9dec-4e85-8577-ffb3eb35f471
  8. State: Peer in Cluster (Connected)
  9. Hostname: GlusterFS4
  10. Uuid: e3b38653-2ede-43d6-8e63-4260801b359c
  11. State: Peer in Cluster (Connected)
  12. #把新主机的环境设置为和GlusterFS3一致
  13. [root@GlusterFS5 glu]# hostname -I
  14. 192.168.17.226 #IP一致
  15. [root@GlusterFS5 glu]# df -hT | tail -2
  16. df: `/zhangsiming': Stale file handle
  17. /dev/sdb ext4 20G 172M 19G 1% /gluster/brick1
  18. /dev/sdc ext4 20G 172M 19G 1% /gluster/brick2
  19. [root@GlusterFS5 glu]# which glusterfs
  20. /usr/sbin/glusterfs #安装glusterfs工具

把UUID赋给新主机,执行修复命令

  1. [root@GlusterFS5 glu]# vim /var/lib/glusterd/glusterd.info
  2. [root@GlusterFS5 glu]# cat /var/lib/glusterd/glusterd.info
  3. UUID=07f31c0f-3c17-4928-a1fe-b008593fe327
  4. operating-version=30712
  5. #执行修复命令
  6. [root@GlusterFS5 glu]# gluster volume heal gs2 full
  7. Launching heal operation to perform full self heal on volume gs2 has been successful
  8. Use heal info commands to check status
  9. #查看修复状态
  10. [root@glusterfs04 ~]# gluster volume heal gs2 info
  11. Brick glusterfs03:/gluster/brick1
  12. Status: Connected
  13. Number of entries: 0
  14. Brick glusterfs04:/gluster/brick1
  15. Status: Connected
  16. Number of entries: 0
  17. #修复成功

1.通过gluster volume status命令可以查看到其他节点对应服务的pid
2.由pid可以看到其他节点中,该服务的详细运行参数
3.由服务详细的运行参数可以看到服务的日志
4.查日志发现错误的详细信息:
O-socket.glusterfsd: binding to failed: Address already in use
5.由日志知道,错误是由地址和端口占用引起的,但netstat -nltp看到了一下,对应端口并没有使用,同时gluster volume status显示的
故障节点该服务的pid并不存在
6.后来注意到该服务详细运行参数中有该服务的pid file文件和socketfile文件,原来是之前某个事件点的pid文件和socket文件没有删除,才引起地址和端口占用问题。删除这些文件后,重启服务,一切OK

当你创建Volume时,使用曾经被用来创建过Volume的目录将出现这个错误。比如你曾经使用server1:/data目录创建了名叫dis-volume的卷,之后把这个卷删除了,然后又想用server1:/data创建一个名叫rep-volume的卷时,就会遇到这个错误。
解决办法,在server1上运行命令

  1. [root@GlusterFS5 glu]# setfattr -x trusted.glusterfs.volume-id /data
  2. [root@GlusterFS5 glu]# setfattr -x trusted.gfid /data
  3. [root@GlusterFS5 glu]# rm -rf /data/.glusterfs

运行上述命令时如果出现属性不存在的错误提示,忽略即可。然后这个目录就可以重新用于创建新Volume了

GlusterFS可以跟你所用的NFS版本有冲突,停用NFS然后重启GlusterFS或者重启服务器可以解决这个问题

  1. [root@GlusterFS5 glu]#/etc/init.d/nfs stop
  2. [root@GlusterFS5 glu]#chkconfig nfs off

遇到问题,不断排错,不断学习,并记录下来,学习运维才能事半功倍!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注