Gluster FS 部署复制卷与常用命令 常见问题解决
在 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
- 排查掉线节点防火墙
- 如果仍然无法成功上线 参考 故障节点排除方案
- 重启掉线节点 glusterfs程序,使其重新上线
故障节点排除(非复制卷,慎用)
如果重启节点仍然无法解决 节点掉线
- 备份故障节点目录 /var/lib/glusterd 中的 glusterd.info 文件 与 peers 文件夹
- stop gluster 服务 删除 /var/lib/glusterd 目录下的所有文件
- 启动 gluster 服务 将备份的 glusterd.info文件与 peers 文件夹覆盖到 /var/lib/glusterd 中
- 重启 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 部署复制卷与常用命令 常见问题解决相关推荐
- Linux逻辑卷、物理卷、卷组常用命令
文章目录 物理卷 卷组 逻辑卷 创建顺序 物理卷 物理卷可以对应位磁盘的分区.与物理卷相关的命令为: $ fdisk -l$ pvchange $ pvck $ pvcreate $ pvdispla ...
- kafka常用命令及问题解决
常用命令 Kafka内部提供了许多管理脚本,这些脚本都放在$KAFKA_HOME/bin目录下,而这些类的实现都是放在源码的kafka/core/src/main/scala/kafka/tools/ ...
- git常用命令和问题解决
常用命令: 克隆代码: git clone [url] 显示当前的git配置: git config --list 添加指定文件到暂存区: git add xxx 添加当前目录的所有文件到暂存区: g ...
- linux环境下如何部署war包及常用命令
linux环境下部署war包需要用到的一些命令 linux环境下部署war包 测试工具 常用的一些命令 对于使用navicat或者workbench进行脚本测试的一些注意事项执行 linux环境下部署 ...
- linux虚拟机tomcat上部署web项目的常用命令
1)查看 tomcat是否在运行 ps -ef | grep tomcat ps -ef 补充:Linux中的ps命令是Process Status的缩写,ps命令用来列出系统中当前运行的那些进程.p ...
- linux用pe大小做逻辑卷,Linux常用命令之--逻辑卷
逻辑卷管理概述 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能 ...
- [统信UOS.笔记]操作技巧.常用命令及问题解决
1. 在登录界面,用可以用"Ctrl + Alt + F2"切换到控制台模式. Ctrl + Alt + F2 进入tty2 命令行模式 Ctrl + Alt + F ...
- Linux常用命令 实用命令万字总结(转载学习)
原文链接 最高使用频率的命令之一. 命令格式: ls [OPTION]- [FILE]- 单纯的输入: [root@iz2ze76ybn73dvwmdij06zz /]# ls bin dev hom ...
- Linux常用命令 实用命令万字总结
❝ Linux其实是前后端都必会的技能,前端目前很多童鞋都再走大前端路线,后端就更不用说了,小编给大家盘了上万字(由于字数限制添加链接描述本文已删减)关于Linux的实战基础命令,可以说这些都是必须掌 ...
最新文章
- R语言使用Rtsne包进行TSNE分析:通过数据类型筛选数值数据、scale函数进行数据标准化缩放、提取TSNE分析结果合并到原dataframe中(tSNE with Rtsne package)
- 《圣洁》的读后感作文3000字
- JS-获取class类名为某个的元素-【getClass】函数封装
- 关于COPC后台配置的几个关键步骤及其事务代码
- Qt文档阅读笔记-Broadcast Sender Example解析
- Qt文档阅读笔记-Widgets Tutorial官方解析及实例
- 下面哪个对象能代表当前的HTML文件,华师网络学院作业答案-WEB程序设计选择题...
- HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)
- 【A little interesting】LeetCode 437. Path Sum III
- LeetCode Java面试刷题笔记汇总
- 解析.db文件,并且导出为sql语句
- 分享一些前端优质的掘金小册,学完技术感觉已经超神了
- Python报错:IndentationError: unindent does not match any outer indentation level问题的解决办法及原因
- service常驻后台
- 纳兰容若最经典的20首诗词,每一首都是经典,读完眼泪掉下来
- 服务器篇 使用Windows Server 2012R2搭建DHCP服务器-01
- android 实现果冻动画效果,Android高仿path小球刷新效果,类似IOS果冻效果
- keepalived结合nginx主备高可用实现
- 【论文阅读】3D Topology-Preserving Segmentation with Compound Multi-Slice Representation
- Pandas:1.创建、读和写操作
热门文章
- Visual C++ 2010如何解决程序运行闪退问题
- 秋招总结帖,还愿牛客
- 编辑为什么建议转投_编辑回信解读 —“建议转投子刊”实例
- CentOS7.9安装教程,以及出现dracut- initqueue timeout-starting…starting timeout scripts 解决办法,linux配置静态IP地址
- 文本关键词的提取算法实验
- 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)
- 【智能制造】工业软件:智能制造的大脑
- pygame实现找方块(色彩敏感度测试)游戏
- 密西西比河谷州立大学:Android应用程序开发(三)
- u盘iso安装服务器系统怎么安装win7系统安装系统教程,u盘iso安装系统,小编教你u盘怎么安装win7系统...