场景: GlusterFS 3节点的复制集,由于磁盘故障,其中一个复制集需要重装系统,所以需要重装glusterfs并将该节点加入glusterfs集群

一. 安装GlusterFS

首先在重装系统节点安装 glusterfs

  • Centos
yum -y install centos-release-gluster
yum -y install glusterfs-server
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
  • Ubuntu
apt-get -y install glusterfs-server
systemctl start glusterfs-server
systemctl enable glusterfs-server
systemctl status glusterfs-server

确保与之前节点的GlusterFS版本一致,如果不一致,可将之前节点GlusterFS进行版本升级

  • Ubuntu系统GlusterFS升级
apt install -y software-properties-common
add-apt-repository ppa:gluster/glusterfs-7
apt-get update
killall glusterfs
systemctl stop glustereventsd
apt-get -y install glusterfs-server

升级过程中可能会出现重启失败,ps -ef查看有关glusterfs的进程,kill掉重启即可

二. 加入GlusterFS集群

  • 修改UUID

在正常节点获取该节点UUID信息,损坏节点为 gfs02

在/var/lib/glusterd/peers目录下,新建glusterd.info,将原UUID和operating-version信息写入该文件。

$ vi /var/lib/glusterd/glusterd.info
UUID=a7d9c9a8-e0bc-44da-8a86-6077f37038b0
operating-version=30706

重启glusterd服务

 systemctl restart glusterd

若无法启动,将 /var/lib/glusterd/ 下文件除 glusterd.info 外全部删除,kill相关进程进行重启

  • 在正常节点为此节点添加授信
$ gluster peer probe gfs02
  • 在正常节点查看集群节点状态
$ gluster peer status
Number of Peers: 2 Hostname: gfs01
Uuid: f1061036-70cf-49b0-a482-4139b7e0eb7f
State: Peer in Cluster (Connected) Hostname: gfs02
Uuid: a7d9c9a8-e0bc-44da-8a86-6077f37038b0
State: Accepted peer request (Connected)

正常情况就能同步到集群的peer信息,若出现这种状态,请参考如下:

出现这种状态后排查原因得知是由于 /var/lib/glusterd/peers/a7d9c9a8-e0bc-44da-8a86-6077f37038b0 文件中state值不一致导致,将除gfs02节点外其他节点此文件值修改为与之前文件中的一致,重启服务

uuid=a7d9c9a8-e0bc-44da-8a86-6077f37038b0
state=3
hostname1=gfs02

再次查看,恢复正常

$ gluster peer status
Number of Peers: 2 Hostname: gfs01
Uuid: f1061036-70cf-49b0-a482-4139b7e0eb7f
State: Peer in Cluster (Connected) Hostname: gfs02
Uuid: a7d9c9a8-e0bc-44da-8a86-6077f37038b0
State: Peer in Cluster (Connected)

到此完成重新加入集群

三. 重新分配volum

通常加入集群后,自动就可以获得卷信息,如果未获得,参考如下

  • 查询故障节点的备份节点(gfs02)目录的扩展属性
$ getfattr -d -m. -e hex /data/gluster
getfattr: Removing leading '/' from absolute path names
# file: data/gluster
trusted.gfid=0x00000000000000000000000000000001
trusted.glusterfs.dht=0x00000001000000007fffffffffffffff
trusted.glusterfs.volume-id=0x8eafb261e0d24f3b8e0905475c63dcc6
  • 挂载卷并触发自愈

在客户端新建一个卷中不存在的目录并删除

$ cd /opt/gfsmount/
$ mkdir test1
$ rm -rf test2

客户端设置扩展属性触发自愈

$ setfattr -n trusted.non-existent-key -v abc <客户端挂载点>
$ setfattr -x trusted.non-existent-key <客户端挂载点>
  • 检查当前节点是否挂起xattrs

再次查询故障节点的备份节点(gfs02)目录的扩展属性

$  getfattr -d -m. -e hex /data/gluster
getfattr: Removing leading '/' from absolute path names
# file: data/gluster
trusted.afr.dirty=0x000000000000000000000000
trusted.afr.models-client-2=0x000000000000000000000000
trusted.afr.models-client-3=0x000000000000000200000002
trusted.gfid=0x00000000000000000000000000000001
trusted.glusterfs.dht=0x00000001000000007fffffffffffffff
trusted.glusterfs.volume-id=0x8eafb261e0d24f3b8e0905475c63dcc6

注意:留意第5行,表示xattrs已经将源标记为GlusterFS-slave3:/data/gluster

  • 在正常节点检查卷的状态是否显示需要替换
$ gluster volume heal models info
Brick GlusterFS-master:/data/gluster/
Number of entries: 0 Brick gfs03:/data/gluster/
Number of entries: 0 Brick gfs01:/data/gluster/
/
Number of entries: 1 Brick gfs02:/data/gluster
Status: Transport endpoint is not connected

注:状态提示传输端点未连接(最后一行)

  • 使用强制提交完成操作
$ gluster volume replace-brick redata gfs02:/data/gluster gfs02:/data/gluster1 commit force
提示如下表示正常完成:
volume replace-brick: success: replace-brick commit force operation successful

注意:也可以将数据恢复到另外一台服务器,详细命令如下(192.168.10.230为新增的另一个glusterfs节点)(可选):

# gluster peer probe 192.168.10.230
# gluster volume replace-brick redata gfs01:/data/gluster gfs05:/data/gluster commit force

  • 检查存储的在线状态
$ gluster volume status
Status of volume: redata
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gfs01:/data/gluster 49153 0 Y 316465
Brick gfs02:/data/gluster1 49153 0 Y 4813
Brick gfs03:/data/gluster 49153 0 Y 430245
Self-heal Daemon on localhost N/A N/A Y 415863
NFS Server on localhost N/A N/A N N/A
Self-heal Daemon on gfs01 N/A N/A Y 375512
NFS Server on gfs01 N/A N/A N N/A
Self-heal Daemon on gfs02 N/A N/A Y 4824
NFS Server on gfs02 N/A N/A N N/A Task Status of Volume redata
------------------------------------------------------------------------------
There are no active volume tasks

从上面信息可以看出,gfs02节点的Online项的状态为"Y"了,不过存储目录是/data/gluster1,查看gfs02节点的存储目录,发现数据已经在自动恢复了。

参考资料:

https://blog.csdn.net/weixin_30852419/article/details/98925513?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

https://www.cnblogs.com/kevingrace/p/8761747.html

GlusterFS分布式存储系统复制集更换故障Brick操作记录的更多相关文章

  1. GlusterFS分布式存储系统中更换故障Brick的操作记录

    前面已经介绍了GlusterFS分布式存储集群环境部署记录,现在模拟下更换故障Brick的操作: 1)GlusterFS集群系统一共有4个节点,集群信息如下: 分别在各个节点上配置hosts.同步好系 ...

  2. GlusterFS分布式存储系统中更换故障Brick的操作记录1

    前面已经介绍了GlusterFS分布式存储集群环境部署记录,现在模拟下更换故障Brick的操作: 1)GlusterFS集群系统一共有4个节点,集群信息如下: 分别在各个节点上配置hosts.同步好系 ...

  3. CentOS 7.6 部署 GlusterFS 分布式存储系统

    文章目录 GlusterFS简介 环境介绍 开始GlusterFS部署 配置hosts解析 配置GlusterFS 创建文件系统 安装GlusterFS 启动GlusterFS 将节点加入到主机池 创 ...

  4. Redis Cluster高可用集群在线迁移操作记录【转】

    之前介绍了redis cluster的结构及高可用集群部署过程,今天这里简单说下redis集群的迁移.由于之前的redis cluster集群环境部署的服务器性能有限,需要迁移到高配置的服务器上.考虑 ...

  5. Linux实战教学笔记52:GlusterFS分布式存储系统

    一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量 ...

  6. GlusterFS分布式存储系统

    一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量 ...

  7. MongoDb复制集实现故障转移,读写分离

    前言 数据库技术是信息系统的一个核心技术,发展很快,各种功能类型数据库层出不穷,之前工作中使用过关系型数据库(mysql.oracle等).面相对象数据库(db4o).key-value存储(Memc ...

  8. Hadoop入门学习笔记-第一天 (HDFS:分布式存储系统简单集群)

    准备工作: 1.安装VMware Workstation Pro 2.新建三个虚拟机,安装centOS7.0 版本不限 配置工作: 1.准备三台服务器(nameNode10.dataNode20.da ...

  9. mongodb复制集里查看主从操作日志oplog

    MongoDB的replica set架构是通过一个日志来存储写操作的,这个日志就叫做 oplog .oplog.rs 是一个固定长度的 Capped Collection,它存在于local数据库中 ...

随机推荐

  1. 来吧,自己动手撸一个分布式ID生成器组件

    在经过了众多轮的面试之后,小林终于进入到了一家互联网公司的基础架构组,小林目前在公司有使用到架构组研究到分布式id生成器,前一阵子大概看了下其内部的实现,发现还是存在一些架构设计不合理之处.但是又由于 ...

  2. 【超详细】MakeDown(Typora)+PicGo+Gitee实现图床

    [超详细]MakeDown(Typora)+PicGo+Gitee实现图床 序言:我们有时在用makedown整理笔记时想把自己的笔记上传到博客园,可是发现在上传过程中makedown中的图片显示不出 ...

  3. 【Go语言绘图】图片添加文字(二)

    这一篇将继续介绍gg库中绘制文字相关的方法,主要包括:DrawStringAnchored().DrawStringWrapped().MeasureMultilineString().WordWra ...

  4. 用 Java 训练出一只“不死鸟”

    作者:Kingyu & Lanking FlappyBird 是 2013 年推出的一款手机游戏,因其简单的玩法但极度困难的设定迅速走红全网.随着深度学习(DL)与增强学习(RL)等前沿算法的 ...

  5. ADO.NET 帮助类 参数传递 存储过程 分页

    SQLHelper public class SqlHelper { private readonly string _constr = ConfigurationManager.Connection ...

  6. 深度实战玩转算法, Java语言7个经典应用诠释算法精髓

    深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...

  7. 【Flutter 1-16】Flutter手把手教程UI布局和Widget——容器控件Container

    作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) Container 我们先来看一下Container初始化的参数: Container({ Key key, // 位置 居左.居右. ...

  8. cmd运行乱码或显示编码GBK的不可映射字符解决方法

    出现这样的错误,一般是因为代码中含有中文字符,注释中的中文字符也算.由于使用cmd运行java程序的时候,系统默认的编码格式是gbk.而包含中文字符的代码一般是Unicode格式,所以直接运行含有中文 ...

  9. 【探索之路】机器人篇(3)-给mwRobot建立模型

    在创建一个mwRobot_description程序包那一节中,我们添加了依赖roscpp  rospy std_msgs 和 urdf , 现在我们再添加一个xacro依赖. 如何添加依赖? 打开程 ...

  10. KafkaProducer 简析

    使用方式 KafkaProducer 发送消息主要有以下 3 种方式: Properties properties = new Properties(); properties.setProperty ...