在 liunx 下部署Gluster FS分布式文件系统,以及Gluster FS遇到的一些问题解决,常用命令

概述

Gluster FS 是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA 或Tcp/Ip 方式将许多廉价的x86 主机,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。

Gluster FS采用可堆叠的用户空间设计,如图所示:

什么是分布式文件系统

简单的说,分布式文件系统就是将固定于某个点的某个文件系统,扩展到任意多个地点/多个文件系统,众多的节点组成一个文件系统网络。通过网络进行节点间的通信和数据传输。你无需关心数据是存储在哪个节点,或是从哪个节点读取数据。

Gluster FS 卷类型

部署

安装Gluster FS

此处为安装单机流程,安装集群请参考 搭建复制卷

搜索可用安装版本

yum search centos-release-gluster

指定 Glusterfs 6 版本(根据自己要求选择安装版本)

yum -y install centos-release-gluster6.noarch

安装 服务端 + 客户端

yum install -y glusterfs*

只安装客户端

yum install -y glusterfs-fuse.x86_64

查看版本(如果只有客户端无法使用该命令)

glusterfs -V

启动服务

service glusterd start

添加开机启动

systemctl enable glusterd.service

搭建复制卷

参考 centos7下glusterFs 分布式文件系统环境搭建
参考 CentOS7安装GlusterFS

以上两个参考已经很详细了,你也可以自行搜索文章教程,关键字 (CentOS7、GlusterFS、复制卷)

以下是自行总结的步骤

开放通信端口

Linux 有两种防火墙(firewall、iptables ),请确定自己使用的是什么类型防火墙再放行端口

firewall 防火墙

# 通信端口
firewall-cmd --zone=public --add-port=49152/tcp--permanent
firewall-cmd --zone=public --add-port=24007:24011/tcp--permanent
firewall-cmd --zone=public --add-port=38465:38485/tcp--permanent

重新载入

firewall-cmd --reload

查看防火墙规则

firewall-cmd --list-ports

iptables 防火墙

iptables -A INPUT -p tcp --dport 49152 -j ACCEPT
iptables -A INPUT -p tcp --dport 24007:24011 -j ACCEPT
iptables -A INPUT -p tcp --dport 38465:38485 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -j ACCEPT

保存规则

service iptables save

查看防火墙规则

iptables -L -n

安装Gluster FS

集群环境与角色

name ip
node-2 172.16.10.2
node-3 172.16.10.3
node-4 172.16.10.4
client 172.16.10.50
  • 安装 Gluster FS Server (node-2、3、4都需执行以下命令)

    # 搜索可用安装版本
    yum search centos-release-gluster
    # 指定 Glusterfs 6 版本(根据自己要求选择安装版本)
    yum -y install centos-release-gluster6.noarch
    # 安装 服务端 + 客户端 (可以选择不安装客户端)
    yum install -y glusterfs*
    # 查看版本
    glusterfs -V
    # 启动服务
    service glusterd start
    # 添加开机启动
    systemctl enable glusterd.service
    
  • 安装 Gluster FS Client (在 client 执行以下命令,Client 需与 Server 版本一致)

    # 搜索可用安装版本
    yum search centos-release-gluster
    # 指定 Glusterfs 6 版本(根据自己要求选择安装版本)
    yum -y install centos-release-gluster6.noarch
    # 只安装客户端
    yum install -y glusterfs-fuse.x86_64
    

增加集群节点

  • 关闭防火墙 or 开放端口

    • 开放端口参考 开放通信端口
    • 或者关闭每一台机器的防火墙
    # firewalld
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    # or iptables
    systemctl stop iptables.service
    systemctl disable iptables.service
    
  • 添加节点

    在node-2上执行,将node-3、node-4加入集群

    gluster peer probe 172.16.10.2
    gluster peer probe 172.16.10.3
    gluster peer probe 172.16.10.4
    
  • 在node-1上看集群节点状态

    [root@172.16.10.2 db]# gluster peer status
    Number of Peers: 2Hostname: 172.16.10.3
    Uuid: d8d232f-e5fb-4752-b40d-b0103afrf8ea
    State: Peer in Cluster (Connected)Hostname: 172.16.10.4
    Uuid: ff3gg732-ae12-4b6c-4rfb-65fd7886588c
    State: Peer in Cluster (Connected)# 如果节点 State 显示的不是 (Connected) 则添加节点未成功,需排查两个节点之间通信是否正常,可以ping 测试
    

创建网络卷

  • 创建数据存储目录(在三个节点都执行 node-2、3、4)

    mkdir -p /home/hotgv1
    
  • 创建复制卷三节点模式

    # 语法
    gluster volume create 卷名称 replica 节点数量 节点IP:目录... force
    # 示例
    gluster volume create hotgv1 replica 3 172.16.10.2:/home/hotgv1 172.16.10.3:/home/hotgv1 172.16.10.4:/home/hotgv1 force
    
  • 查看卷信息

    # 卷信息
    gluster volume info
    
  • 启动卷

    gluster volume start hotgv1
    
  • 查看卷状态

    gluster volume statusStatus of volume: hotgv1
    Gluster process                             TCP Port  RDMA Port  Online  Pid
    ------------------------------------------------------------------------------
    Brick 172.16.10.2:/home/hotgv1              49152     0          Y       6283
    Brick 172.16.10.3:/home/hotgv1              49152     0          Y       6216
    Brick 172.16.10.4:/home/hotgv1              49152     0          Y       6232# online Y | N  表示节点是否在线
    

性能调优

  • 性能调优(可选操作步骤)

    # 启用卷配额
    gluster volume quota hotgv1 enable
    # 限制 hotgv1中 / (既总目录) 最大使用 100GB 空间
    gluster volume quota hotgv1 limit-usage / 100GB
    # 设置 cache 大小(此处要根据实际情况,如果设置太大可能导致后面客户端挂载失败)
    gluster volume set hotgv1 performance.cache-size 512MB
    # 开启 异步,后台操作
    gluster volume set hotgv1 performance.flush-behind on
    # 设置 io 线程 32
    gluster volume set hotgv1 performance.io-thread-count 32
    # 设置 回写 (写数据时间,先写入缓存内,再写入硬盘)
    gluster volume set hotgv1 performance.write-behind on# 查看调优后的卷信息
    gluster volume info
    

挂载网络卷

  • 设置ip白名单

    # 仅白名单IP才能挂载客户端访问卷 *通配符
    gluster volume set hotgv1 auth.allow 172.16.10.50,172.16.10.*,
    
  • 挂载卷(在 client 172.16.10.50 执行)

    # 创建数据访问挂载点
    mkdir -p /mnt/hotgv1
    # 挂载卷
    mount -t glusterfs IP:卷名 挂载点目录
    # 例 1
    mount -t glusterfs 172.16.10.2:hotgv1 /mnt/hotgv1
    # 例 2 不要记录挂载日志
    mount -t glusterfs -o log-level=NONE 172.16.10.2:hotgv1 /mnt/hotgv1# df 命令检查挂载状态
    df -h# 挂载失败 检查卷白名单、测试节点之间通信Ping、防火墙
    

测试卷工作

  • 测试卷工作 (在 client 172.16.10.50 执行)

    # 往该目录写入文件,随后查看gluster服务器的存储情况
    time dd if=/dev/zero of=/mnt/hotgv1/hello bs=100M count=1
    
  • 查看卷节点文件是否同步

    # 172.16.10.2
    ll /home/hotgv1
    # 172.16.10.3
    ll /home/hotgv1
    # 172.16.10.4
    ll /home/hotgv1
    

常见问题

遇到问题,建议先排查错误日志,90%的问题都可以找到原因

cd /var/log/glusterfs/

节点

  • 新增节点到集群后,集群其余节点无法感知新增节点状态,或者新增节点无法同步数据,通信等情况

    参考 开放通信端口

  • 故障节点重新上线

    当执行 gluster volume status 命令发现有节点 Online 状态为 N,该情况一般为网络通信故障导致节点状态为掉线,解决方法:

    • 重启掉线节点 glusterfs程序,使其重新上线 service glusterd restart
    • 排查掉线节点防火墙
    • 如果仍然无法成功上线 参考 故障节点排除方案
  • 故障节点排除(非复制卷,慎用)

    ​ 如果重启节点仍然无法解决 节点掉线

    1. 备份故障节点目录 /var/lib/glusterd 中的 glusterd.info 文件 与 peers 文件夹
    2. stop gluster 服务 删除 /var/lib/glusterd 目录下的所有文件
    3. 启动 gluster 服务 将备份的 glusterd.info文件与 peers 文件夹覆盖到 /var/lib/glusterd 中
    4. 重启 gluster 服务

挂载

  • 挂载点异常处理方法

    • 当挂载点 出现 挂载点传输未建立

      ??? ? ? ? ? ? /mnt/hotgv1
      

      这种情况是挂载目标节点掉线,导致挂载点崩溃,通常带来 无法访问、写入网络卷等问题

      处理方法:卸载挂载点 重新挂载

      # 卸载挂载点(当出现此情况时通常无法使用该命令卸载)
      umount /mnt/hotgv1cn # 使用此命令卸载
      fusermount-glusterfs -uz /mnt/hotgv1# 重新挂载
      mount -t glusterfs 172.16.10.2:hotgv1 /mnt/hotgv1
      

      该情况一般 伴随网络卷有部分节点掉线

      # 使用此命令排查卷健康状态  每个节点都执行一遍
      gluster volume status# 发现存在掉线节点,可尝试重启服务解决,如果掉线节点自身参考卷状态正常,而其它节点无法连接掉线节点,可排查防火墙原因

注意事项

集群角色

  • Brick 表示是集群节点,集群节点只能读取文件,不支持向卷中写入数据或者改变数据,如果向节点目录写入数据,并不会同步到集群中。
  • Client 即 mount 挂载点,该目录下对文件操作,都会被同步到卷中所有节点,支持都集群中的文件读写。
  • Volume 即 网络卷,由多个节点组成,不同的网络卷模式,工作原理也不同。

网络卷维护

  • 定期查看网络卷健康状态,及时处理故障节点
  • 添加集群哨兵,监控挂载点状态,一但挂载点下线,网络卷就无法访问与存储,可实现多挂载点模式,防止单点故障。
  • 同一台服务器不仅可以作为节点,也可以做挂载点,同一台服务器可以承担多个网络卷的节点组成,自行考虑性能与存储

常用命令

参考 Glusterfs的常用命令

服务器节点

# 查看所有节点信息,显示时不包括本节点
gluster peer status
# 添加节点
gluster peer probe   NODE-NAME
# 移除节点,需要提前将该节点上的brick移除
gluster peer detach  NODE-NAME

Glusterd 服务

# 启动glusterd服务
/etc/init.d/glusterd start
# 关闭glusterd服务
/etc/init.d/glusterd stop
# 查看glusterd服务
/etc/init.d/glusterd status

卷管理

# 创建卷# <1> 复制卷# 语法:
gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK
# 示例1:
gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick# <2>条带卷# 语法:
gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick# <3>分布式卷# 语法:
gluster volume create NEW-VOLNAME [transport tcp | rdma | tcp, rdma] NEW-BRICK
# 示例1:
gluster volume create test-volume server1:/exp1/brick server2:/exp2/brick
# 示例2:
gluster volume create test-volume transport rdma server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <4>分布式复制卷# 语法:
gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <5>分布式条带卷# 语法:
gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <6>条带复制卷# 语法:
gluster volume create NEW-VOLNAME [stripe COUNT] [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# 启动卷
gluster volume start test-volume
# 停止卷
gluster volume stop test-volume
# 删除卷 先停止卷后才能删除
gluster volume delete test-volume
# 查看卷
# 列出集群中的所有卷
gluster volume list
# 查看集群中的卷信息
gluster volume info [all]
# 查看集群中的卷状态
gluster volume status [all]gluster volume status  [detail| clients | mem | inode | fd]# 配置卷
gluster volume set <VOLNAME> <OPTION> <PARAMETER># 扩展卷
gluster volume add-brick <VOLNAME> <NEW-BRICK>
# 注意,如果是复制卷或者条带卷,则每次添加的Brick数必须是replica或者stripe的整数倍。# 收缩卷
# 先将数据迁移到其它可用的Brick,迁移结束后才将该Brick移除:
gluster volume remove-brick  start
# 在执行了start之后,可以使用status命令查看移除进度:
gluster volume remove-brick  status
# 不进行数据迁移,直接删除该Brick:
gluster volume remove-brick  commit
# 注意,如果是复制卷或者条带卷,则每次移除的Brick数必须是replica或者stripe的整数倍。# 迁移卷
# 使用start命令开始进行迁移:
gluster volume replace-brick  start
# 在数据迁移过程中,可以使用pause命令暂停迁移:
gluster volume replace-brick  pause
# 在数据迁移过程中,可以使用abort命令终止迁移:
gluster volume replace-brick  abort
# 在数据迁移过程中,可以使用status命令查看迁移进度:
gluster volume replace-brick  status
# 在数据迁移结束后,执行commit命令来进行Brick替换:
gluster volume replace-brick  commit # 重新均衡卷
# 不迁移数据:
gluster volume rebalance  lay-outstart
gluster volume rebalance  start
gluster volume rebalance  startforce
gluster volume rebalance  status
gluster volume rebalance  stop

Brick管理

# 添加Brick
gluster volume add-brick test-volume 192.168.1.{151,152}:/mnt/brick2# 删除Brick
# 若是副本卷,则移除的Bricks数是replica的整数倍
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 start
# 在执行开始移除之后,可以使用status命令进行移除状态查看。
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 status#使用commit命令执行Brick移除,则不会进行数据迁移而直接删除Brick,符合不需要数据迁移的用户需求。
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 commit# 替换Brick
# 任务:把192.168.1.151:/mnt/brick0 替换为192.168.1.151:/mnt/brick2# <1>开始替换
gluster volume replace-brick test-volume 192.168.1.:/mnt/brick0 ..152:/mnt/brick2 start
# 异常信息:volume replace-brick: failed: /data/share2 or a prefix of it is already part of a volume
# 说明 /mnt/brick2 曾经是一个Brick。具体解决方法
rm -rf /mnt/brick2/.glusterfssetfattr -x trusted.glusterfs.volume-id /mnt/brick2
setfattr -x trusted.gfid  /mnt/brick2# 如上,执行replcace-brick卷替换启动命令,使用start启动命令后,开始将原始Brick的数据迁移到即将需要替换的Brick上。# <2>查看是否替换完
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 ..152:/mnt/brick2 status# <3>在数据迁移的过程中,可以执行abort命令终止Brick替换。
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 ..152:/mnt/brick2 abort# <4>在数据迁移结束之后,执行commit命令结束任务,则进行Brick替换。使用volume info命令可以查看到Brick已经被替换。
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 .152:/mnt/brick2 commit# 此时我们再往 /sf/data/vs/gfs/rep2上添加数据的话,数据会同步到 192.168.1.152:/mnt/brick0和192.168.1.152:/mnt/brick2上。而不会同步到 192.168.1.151:/mnt/brick0 上。

文件系统扩展属性

#获取文件扩展属性
getfattr -d -m . -e hex filename
getfattr -d -m "trusted.afr.*" -e hex filename

如果一句话反过来就必然不成立,那就根本没必要把这句话放进文档。—— Bob Martin

Gluster FS 部署复制卷与常用命令 常见问题解决相关推荐

  1. Linux逻辑卷、物理卷、卷组常用命令

    文章目录 物理卷 卷组 逻辑卷 创建顺序 物理卷 物理卷可以对应位磁盘的分区.与物理卷相关的命令为: $ fdisk -l$ pvchange $ pvck $ pvcreate $ pvdispla ...

  2. kafka常用命令及问题解决

    常用命令 Kafka内部提供了许多管理脚本,这些脚本都放在$KAFKA_HOME/bin目录下,而这些类的实现都是放在源码的kafka/core/src/main/scala/kafka/tools/ ...

  3. git常用命令和问题解决

    常用命令: 克隆代码: git clone [url] 显示当前的git配置: git config --list 添加指定文件到暂存区: git add xxx 添加当前目录的所有文件到暂存区: g ...

  4. linux环境下如何部署war包及常用命令

    linux环境下部署war包需要用到的一些命令 linux环境下部署war包 测试工具 常用的一些命令 对于使用navicat或者workbench进行脚本测试的一些注意事项执行 linux环境下部署 ...

  5. linux虚拟机tomcat上部署web项目的常用命令

    1)查看 tomcat是否在运行 ps -ef | grep tomcat ps -ef 补充:Linux中的ps命令是Process Status的缩写,ps命令用来列出系统中当前运行的那些进程.p ...

  6. linux用pe大小做逻辑卷,Linux常用命令之--逻辑卷

    逻辑卷管理概述 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能 ...

  7. [统信UOS.笔记]操作技巧.常用命令及问题解决

    1. 在登录界面,用可以用"Ctrl + Alt + F2"切换到控制台模式. Ctrl + Alt + F2        进入tty2 命令行模式 Ctrl + Alt + F ...

  8. Linux常用命令 实用命令万字总结(转载学习)

    原文链接 最高使用频率的命令之一. 命令格式: ls [OPTION]- [FILE]- 单纯的输入: [root@iz2ze76ybn73dvwmdij06zz /]# ls bin dev hom ...

  9. Linux常用命令 实用命令万字总结

    ❝ Linux其实是前后端都必会的技能,前端目前很多童鞋都再走大前端路线,后端就更不用说了,小编给大家盘了上万字(由于字数限制添加链接描述本文已删减)关于Linux的实战基础命令,可以说这些都是必须掌 ...

最新文章

  1. R语言使用Rtsne包进行TSNE分析:通过数据类型筛选数值数据、scale函数进行数据标准化缩放、提取TSNE分析结果合并到原dataframe中(tSNE with Rtsne package)
  2. 《圣洁》的读后感作文3000字
  3. JS-获取class类名为某个的元素-【getClass】函数封装
  4. 关于COPC后台配置的几个关键步骤及其事务代码
  5. Qt文档阅读笔记-Broadcast Sender Example解析
  6. Qt文档阅读笔记-Widgets Tutorial官方解析及实例
  7. 下面哪个对象能代表当前的HTML文件,华师网络学院作业答案-WEB程序设计选择题...
  8. HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)
  9. 【A little interesting】LeetCode 437. Path Sum III
  10. LeetCode Java面试刷题笔记汇总
  11. 解析.db文件,并且导出为sql语句
  12. 分享一些前端优质的掘金小册,学完技术感觉已经超神了
  13. Python报错:IndentationError: unindent does not match any outer indentation level问题的解决办法及原因
  14. service常驻后台
  15. 纳兰容若最经典的20首诗词,每一首都是经典,读完眼泪掉下来
  16. 服务器篇 使用Windows Server 2012R2搭建DHCP服务器-01
  17. android 实现果冻动画效果,Android高仿path小球刷新效果,类似IOS果冻效果
  18. keepalived结合nginx主备高可用实现
  19. 【论文阅读】3D Topology-Preserving Segmentation with Compound Multi-Slice Representation
  20. Pandas:1.创建、读和写操作

热门文章

  1. Visual C++ 2010如何解决程序运行闪退问题
  2. 秋招总结帖,还愿牛客
  3. 编辑为什么建议转投_编辑回信解读 —“建议转投子刊”实例
  4. CentOS7.9安装教程,以及出现dracut- initqueue timeout-starting…starting timeout scripts 解决办法,linux配置静态IP地址
  5. 文本关键词的提取算法实验
  6. 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)
  7. 【智能制造】工业软件:智能制造的大脑
  8. pygame实现找方块(色彩敏感度测试)游戏
  9. 密西西比河谷州立大学:Android应用程序开发(三)
  10. u盘iso安装服务器系统怎么安装win7系统安装系统教程,u盘iso安装系统,小编教你u盘怎么安装win7系统...