前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >GlusterFS 4.1 深入使用

GlusterFS 4.1 深入使用

原创
作者头像
jackxiao
发布于 2021-11-16 08:55:37
发布于 2021-11-16 08:55:37
45900
代码可运行
举报
文章被收录于专栏:DevOps运维DevOps运维
运行总次数:0
代码可运行

1 基本命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gluster peer probe	添加节点
gluster peer detach	移除节点
gluster volume create	创建卷
gluster volume start $VOLUME_NAME	启动卷
gluster volume stop $VOLUME_NAME	停止卷 
gluster volume delete $VOlUME_NAME	删除卷
gluster volume quota enable	开启卷配额
gluster volume quota disable	关闭卷配额
gluster volume quota limitusage	设定卷配额

2 增加副本及磁盘平衡

2.1 动态增加副本

glusterfs可以动态的增加副本,但是由于采用的hash方式动态计算出的数据存储位置,因而新增加的副本并不会有数据,需要手动执行磁盘数据平衡才行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加新副本,要是3的倍数
gluster volume add-brick gv1 replica 3 \
  gf-node01:/data/brick3/gv1 \
  gf-node02:/data/brick3/gv1 \
  gf-node03:/data/brick3/gv1 \
  force
  
# 查看资源池信息
[root@gf-node01 ~]# gluster volume info gv1 
Volume Name: gv1
Type: Distributed-Replicate
Volume ID: e1e004fa-5588-4629-b7ff-048c4e17de91
Status: Started
Snapshot Count: 0
Number of Bricks: 3 x 3 = 9
Transport-type: tcp
Bricks:
Brick1: gf-node01:/data/brick1/gv1
Brick2: gf-node01:/data/brick2/gv1
Brick3: gf-node02:/data/brick1/gv1
Brick4: gf-node02:/data/brick2/gv1
Brick5: gf-node03:/data/brick1/gv1
Brick6: gf-node03:/data/brick2/gv1
Brick7: gf-node01:/data/brick3/gv1
Brick8: gf-node02:/data/brick3/gv1
Brick9: gf-node03:/data/brick3/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

# 查看数据情况
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1  test2  test4  test5  test8  test9
/data/brick2/gv1:
test1  test2  test4  test5  test8  test9
/data/brick3/gv1:

2.2 磁盘平衡原因及操作

布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。 布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,还需要对卷中的数据进行平衡。

2.2.1 布局平衡前写入数据并查看位置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@gf-node01 ~]# touch /mnt/aaa{1..9}
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
aaa2  aaa5  aaa8  test1  test2  test4  test5  test8  test9

/data/brick2/gv1:
aaa2  aaa5  aaa8  test1  test2  test4  test5  test8  test9

/data/brick3/gv1:

2.2.2 磁盘布局平衡后再写入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@gf-node01 ~]# gluster volume rebalance gv1 fix-layout start
volume rebalance: gv1: success: Rebalance on gv1 has been started successfully. Use rebalance status command to check status of the rebala
nce process.ID: eeec5c76-88c7-4793-8074-25565270c128

[root@gf-node01 ~]# touch /mnt/bbb{1..9}
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
aaa2  aaa5  aaa8  bbb3  bbb8  bbb9  test1  test2  test4  test5  test8  test9
/data/brick2/gv1:
aaa2  aaa5  aaa8  bbb3  bbb8  bbb9  test1  test2  test4  test5  test8  test9
/data/brick3/gv1:
2.2.3 进行磁盘存储平衡后再次查看
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@gf-node01 ~]# gluster volume rebalance gv1 start
volume rebalance: gv1: success: Rebalance on gv1 has been started successfully. Use rebalance status command to check status of the rebala
nce process.ID: 5189b20c-6120-40d7-8e74-0ba114130a24

[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
aaa1  aaa2  aaa3  aaa5  aaa8  bbb3  bbb5  bbb8  bbb9  test2  test3  test4  test8
/data/brick2/gv1:
aaa1  aaa2  aaa3  aaa5  aaa8  bbb3  bbb5  bbb8  bbb9  test2  test3  test4  test8
/data/brick3/gv1:
aaa2  aaa4  aaa5  aaa6  aaa7  aaa8  aaa9  bbb1  bbb2  bbb3  bbb4  bbb6  bbb7  bbb8  bbb9  test2  test4  test6  test7  test8

每做一次扩容后都需要做一次磁盘平衡。数据量大的话平衡很浪费性能,需要提前规划好平衡时间

3 glustefs分布式存储优化

可以参考

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
命令格式:
glustervolume set <><参数>
例如:
#打开预读方式访问存储
[root@node01 ~]# gluster volume set gv2 performance.read-ahead on
#调整读取缓存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M

Auth_allow		#IP访问授权;缺省值(*.allow all);合法值:Ip地址
Nfs.disabled	#关闭NFS服务;缺省值(Off);合法值:Off|on
Network.frame-timeout	#请求等待时间;缺省值(1800s);合法值:1-1800
Network.ping-timeout	#客户端等待时间;缺省值(42s);合法值:0-42
Cluster.min-free-disk	#剩余磁盘空间阀值;缺省值(10%);合法值:百分比
Performance.cache-size	#读缓存大小;缺省值(32MB);合法值:字节
Performance.quick-read	#优化读取小文件的性能
Performance.read-ahead	#用预读的方式提高读取的性能
Performance.io-cache	#缓存已经被读过的、
Performance.write-behind	#先写入缓存内,在写入硬盘,以提高写入的性能。
Performance.io-thread-count	#IO线程数;缺省值(16);合法值:0-65
Performance.cache-refresh-timeout	#缓存校验时间;缺省值(1s);合法值:0-61

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Swift入门:协议扩展
Swift最强大的功能之一就是能够同时扩展整个数据类型。 这被称为协议扩展,它们通常用于在大型应用程序中构建灵活性。
韦弦zhy
2020/03/19
8490
Swift入门:结构体
结构体是复杂的数据类型,这意味着它们由多个值组成。然后创建结构的实例并填充其值,然后可以在代码中将其作为单个值传递。例如,我们可以定义一个Person结构体类型,它包含两个属性:clothes和shoes:
韦弦zhy
2020/03/19
4500
Swift — 协议(Protocol)
协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体和枚举都可以遵循协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵循这个协议。
Swift社区
2021/11/26
1.1K0
Swift — 协议(Protocol)
Swift基础 协议
翻译自:https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
郭顺发
2023/07/17
1590
Swift 中的抽象类型和方法
在面向对象的编程中,抽象类型提供了一个基础实现,其他类型可以从中继承,以获得某种共享的、共同的功能。抽象类型与普通类型的区别在于,它们永远不会被当作原样使用(事实上,一些编程语言甚至阻止抽象类型被直接实例化),因为它们的唯一目的是作为一组相关类型的共同父类。
韦弦zhy
2022/03/30
8260
Swift入门:扩展
扩展允许我们以一种非常干净的方式修改Swift的数据类型以添加新的功能——我们的新代码与现有代码没有区别。
韦弦zhy
2020/03/19
1.1K0
20.Swift学习之协议
协议为方法、属性、以及其他特定的任务需求或功能定义一个大致的框架。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。
YungFan
2018/12/12
3240
Swift入门: 数组
数组允许您将许多值组合到一个集合中,然后根据它们在集合中的位置访问这些值。Swift使用类型推断来确定数组保存的数据类型,如下所示:
韦弦zhy
2020/03/19
7780
Swift 5.1 中引入的部分有用的新特性
Swift 5.1现在已经正式发布,尽管只是次要版本,它包含了大量的更改和改进。从基本的新功能,例如模块稳定性(使SDK供应商可以交付预编译的Swift框架)到所有SwiftUI以及其他功能的新语法功能。
韦弦zhy
2020/02/18
1.4K0
Swift 5.1 中引入的部分有用的新特性
Swift入门: 函数
函数使您可以定义执行特定功能的可重用代码段。通常,函数能够接收一些值来修改其工作方式,但这不是必需的。
韦弦zhy
2020/03/19
7490
Swift入门:枚举
枚举(Enumerations)通常称为“ enum”,发音为“ ee-num”,是一种在Swift中定义自己的值的方法。在某些编程语言中,它们只是简单的小事,但是Swift给它们增加了巨大的功能。
韦弦zhy
2020/03/20
7860
Swift入门:枚举
Swift 中的反射 Mirror
前言 Mirror是Swift中的反射机制,对于C#和Java开发人员来说,应该很熟悉反射这个概念。反射就是可以动态的获取类型以及成员信息,同时也可以在运行时动态的调用方法和属性等。
Swift社区
2021/11/26
5.1K0
Swift 中的反射 Mirror
Swift 中的 Sendable 和 @Sendable 闭包
Sendable 和 @Sendable 是 Swift 5.5 中的并发修改的一部分,解决了结构化的并发结构体和执行者消息之间传递的类型检查的挑战性问题。
韦弦zhy
2022/11/14
1.5K0
Swift 中的 Sendable 和 @Sendable 闭包
Swift 5.6到5.10新特性整理
当你编写涉及共享状态的代码时,如果你不确保这个共享状态在跨线程使用时是安全的,你就会在许多地方遇到数据竞争的问题。
小刀c
2024/04/03
2.2K0
Swift 5.6到5.10新特性整理
Swift入门:属性
结构体和类(统称为“类型”)可以有自己的变量和常量,这些称为属性。这些方法允许您将值附加到类型以唯一地表示它们,但因为类型也可以有方法,所以您可以让它们根据自己的数据进行操作。
韦弦zhy
2020/03/19
5850
Swift 3到5.1新特性整理
Swift 5.0 最重要的自然是ABI Stability, 对此可以看这篇 Swift ABI 稳定对我们到底意味着什么 。
小刀c
2022/08/16
4.8K0
Swift 3到5.1新特性整理
Swift入门:类
Swift有另一种方法来构建称为类的复杂数据类型。它们看起来类似于结构体,但有许多重要的区别,包括:
韦弦zhy
2020/03/19
7610
Swift学习:协议
本篇将详细总结介绍Swift协议的用法; 协议是定义一些规范(属性、功能方法),然后由类、结构体或者枚举遵循并实现这些规范,这一过程被称为遵循了协议。
梧雨北辰
2018/08/09
4920
Swift入门:静态属性和方法
在Swift中,您可以创建属于类型而不是类型实例的属性和方法。这有助于通过存储共享数据来有意义地组织数据。
韦弦zhy
2020/03/19
1.3K0
Swift入门:多态性与类型转换
因为类可以相互继承(例如CountrySinger可以从Singer继承),这意味着一个类实际上是另一个类的超集:B类拥有A类所拥有的所有东西,还有一些额外的东西。这反过来意味着你可以把B当作B型或者A型,这取决于你的需要。
韦弦zhy
2020/03/19
9620
相关推荐
Swift入门:协议扩展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文