阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

GlusterFS 分布式存储部署使用

502次阅读
没有评论

共计 8505 个字符,预计需要花费 22 分钟才能阅读完成。

GlusterFS 是一款非常易于使用的分布式文件存储系统,实现了全部标准 POSIX 接口,并用 fuse 实现虚拟化,让用户看起来就像是本地磁盘一样。因此程序想从本地磁盘切换到 GlusterFS 时是不用修改任何代码的,做到了无缝切换。并且让多台电脑的程序看起来在使用同一块硬盘,简化了很多逻辑。如果您的应用单机磁盘不够放时,不妨考虑下 GlusterFS。

一、GlusterFS 源码安装

1. glusterfs 依赖安装

a. CentOS 下 yum 安装

yum install -y flex bison openssl-devel libacl-devel sqlite-devel libxml2-devel libtool automake autoconf gcc attr

liburcu-bp 需源码安装,yum 源里面没有

先执行常规命令安装,进入源码目录后

./bootstrap

./configure

make

sudo make install

执行完常规安装命令后需要执行下面两个命令,才可以让系统找到 urcu.

sudo ldconfig

sudo pkg-config –libs –cflags liburcu-bp liburcu

b. Ubuntu 下 apt-get 安装

sudo apt-get install flex bison libssl-dev libacl1-dev  libsqlite3-dev libxml2-dev liburcu-dev automake autoconf gcc attr

d. 可选安装

此外如果要 geo 复制功能,需要额外安装,并开启 ssh 服务:

yum install -y passwd openssh-client openssh-server

e. docker 下安装额外操作

如果机器只有一台,又想测试集群,可以考虑用 docker,然而 docker 对应用有些功能限制,所以不能直接使用,需要多操作一些。

①需要安装 attr

yum install attr -y

②没有 fuse 的时候需要手动建一个

mknod /dev/fuse c 10 229

③运行容器的时候需要提升权限

docker run –privileged=true

例如:

sudo docker run –privileged=true -it -h glfs0 -v /dk/d0:/d –name=glfs0  gfs7:2  /bin/bash

sudo docker run –privileged=true -it –rm -v /dk/rm0:/d gfs7:2 /bin/bash

④. 需要加载一个本地卷,将数据文件放在本地卷的目录中,否则磁盘的额外属性不能使用。

2. glusterfs 编译安装

安装完以上依赖后,我们从官网 http://www.gluster.org/download/ 下载源码,再编译 glusterfs,gluserfs 编译命令为常规命令,配置时加上 –enable-debug 表示编译为带 debug 信息的调试版本

./configure –prefix=/usr

make

sudo make install

二、GlusterFS 服务启停

glusterfs 的大部分命令都需要在 root 权限下运行,没有 root 权限会出现各种错误,因此我这里的命令前面都加了 sudo,如果您直接用 root 登录,需免去 sudo。

1. 启动命令

sudo service glusterd start

sudo /etc/init.d/glusterd start

sudo glusterd

2. 停止命令

sudo service glusterd stop

sudo /etc/init.d/glusterd stop

ps aux|grep glusterd

sudo kill xxxxxx-pid

或 ubuntu 下

sudo killall glusterd

直接 kill 需要先停止各 volume 才比较安全。

三、集群关联

1. 准备机器(或虚拟机、docker)若干台,我这里启动了 4 个 docker,IP 为 172.17.0.2 ~ 172.17.0.5

2. 在每台机器上启动 glusterFS 服务,如上一节。

3. 得到每一台机器的 ip 或 hostname

4. 在第一台机器 (172.17.0.2) 上执行关联命令,

sudo gluster peer probe 172.17.0.3

sudo gluster peer probe 172.17.0.4

sudo gluster peer probe 172.17.0.5

……

这样所有机器已经连在一起,注意该命令的意思相当于集群邀请某人加入自己的组织。

四、卷 /volume 操作

1.创建 volume

a. 单磁盘,调试环境推荐

sudo gluster volume create vol_name 172.17.0.2:/d/disk0

b. 多磁盘,无 raid,试验、测试环境推荐。

sudo gluster volume create vol_name 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0

c. 多磁盘,有 raid1。线上高并发环境推荐。

sudo gluster volume create vol_name replica 2 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0

注意:以上命令中,磁盘数量必须为复制份数的整数倍。

此外有 raid0,raid10,raid5,raid6 等方法,但是在线上小文件集群不推荐使用。

2.启动 volume

刚创建好的 volume 还没有运行,需要执行运行命令方可使用。

sudo gluster volume start vol_name

3.挂载 volume

sudo mkdir /local_mount_dir

sudo mount -t glusterfs -o acl 172.17.0.2:/vol_name /local_mount_dir

4.使用 GlusterFS

a. 挂载了 GlusterFS 的某个卷后,就可以将其当做本地文件访问,代码中只需使用原生的文件 api 即可。这种方式使用不一定需要 root 权限,只要拥有对应目录或文件的权限即可。

b. 直接 API 方式,这种方式需要 root 权限才能使用,并且 Java、Python、ruby 的 api 包装目前都不够完整,一般情况不推荐使用。

5.卸载 volume

卸载与挂载操作是一对。虽然没有卸载也可以停止 volume,但是这样做是会出问题,如果集群较大,可能导致后面 volume 启动失败。

sudo umount /local_mount_dir

6.停止 volume

停止与启动操作是一对。停止前最好先卸载所有客户端。

sudo gluster volume stop vol_name

7.删除 volume

删除与创建操作是一对。删除前需要先停止 volume。在生产上一般不会删除 volume

sudo gluster volume delete vol_name

8.在线修复

当某块磁盘损坏后,需要换一块新的磁盘回去,这时集群中恰好还预留了备用磁盘,因此用备用磁盘替换损坏的磁盘,命令如下两条命令

sudo gluster volume replace-brick vol_name 172.17.0.3:/d/damaged_disk 172.17.0.16:/d/new_disk commit

sudo gluster volume heal vol_name full

9.在线扩容

随着业务的增长,集群容量不够时,需要添加更多的机器和磁盘到集群中来。

a. 普通情况只需要增加分布的广度就可以,增加的磁盘数量必须为最小扩容单元的整数倍,即 replica×stripe,或 disperse 数的整数倍:

sudo gluster volume add-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0

该方法执行完后,需要新增的磁盘可能还没有被实际使用,这时需要平衡数据:

sudo gluster volume rebalance vol_name start

b. 当集群达到一定规模,希望增加备份数时,增加的磁盘数量必须为原分布数量的整数倍。gluster volume info 中看到的第一个值,这时需要增加一个参数让系统知道是修改了数据的备份数。假设原先的 replica 是 2,想要改为 3,命令如下:

sudo gluster volume add-brick vol_name replica 3 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0

执行完 add-brick 命令后,新增的磁盘还没有被实际使用,且系统不会自动复制,这时需要修复数据,让系统达到新指定的备份数

sudo gluster volume heal vol_name full

注意:一次只增加一个备份,如果一次增加多个备份,目前版本可能出错。

10.在线收缩

可能原先配置比例不合理,打算将部分存储机器用于其他用途时,跟扩容一样,也分两种情况。

a. 降低分布广度,移除的磁盘必须是一整个或多个存储单元,在 volume info 的结果列表中是连续的多块磁盘。该命令会自动均衡数据。

sudo gluster volume remove-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0 start

启动后需要查看删除的状态,实际是自动均衡的状态,直到状态从 in progress 变为 completed。

sudo gluster volume remove-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0 status

状态显示执行完成后,提交该移除操作。

sudo gluster volume remove-brick vol_name commit

b. 降低备份数,移除磁盘必须是符合要求(好难表达)。在 volume info 的结果列表中一般是零散的多块磁盘(ip 可能是连续的)。该命令不需要均衡数据。

sudo gluster volume remove-brick vol_name replica 2 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0 force

降低备份数时,只是简单删除,而且命令最后用的也是 force 参数,如果原先系统数据没有复制好,那么也就会出现部分丢失。因此该操作需要极其谨慎。必须先保证数据完整,执行 sudo gluster volume heal vol_name full 命令修复,并执行 sudo gluster volume heal vol_name info,和 sudo gluster volume status 检查,确保数据正常情况下再进行。

11.配额设定

a. 一个 volume 经常会让多个系统去同时使用,这时为了方便管理,可以为一级或二级目录加上磁盘配额,避免因某个系统的过量使用,而影响其他系统的正常使用。

sudo gluster volume quota vol_name enable

sudo gluster volume quota vol_name limit-usage /srv_a 10GB

sudo gluster volume quota vol_name limit-usage /srv_b 200MB

b. 查看当前配额使用量,会以相当直观的列表展示。

sudo gluster volume quota vol_name list

c. 去掉某个目录的配额,

sudo gluster volume quota vol_name remove /srv_a

d. 停止配额,该方法慎用,否则会全部清除,往往不是自己想要的结果,因为重新 enable 后,原先设定的配额都已消失。当然,如果打算重新配置所有目录时则比较合适。

sudo gluster volume quota vol_name disable

e. 如果系统不打算将所有磁盘都用于 GlusterFS,那么可以在根目录上设置配额。考虑到 glusterFS 不能充分利用所有的磁盘空间,因此最好将大小设置的比实际空间稍小。

sudo gluster volume quota vol_name limit-usage / 100TB

f. 并且想将这个配额当做磁盘的大小使用,需要执行如下命令,这样 df 时显示的磁盘大小就是配额了。配额使用的是 1024 进制的,而非磁盘的 1000 进制。当配额量超过磁盘量时,df 也会显示配额量,因此一定不能这样设置。

gluster volume set vol_name quota-deem-statfs on

以上配额是针对磁盘使用量,另外 glusterFS 提供文件数量的配额,limit-objects,list-object。可以根据场景使用。

磁盘配额功能 gluster volume quota 目录容量达到目标大小时,不是马上生效,而是有一定的时间窗口,(若干秒),在这个时间内,数据还可以写入。这样的特性在配额比较大的时候并不影响,一般不会在短时间内超过太多。

12.raid 选型

raid1:适合线上中小文件场景,创建命令如前文。

单磁盘,无 raid,raid0 三种方式只适合于实验环境,允许数据的丢失,一旦数据丢失,基本上需要从头来过。

raid0:适合大文件实验环境。

sudo gluster volume create vol_name stripe 3 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0

raid10:适合大文件场景。

sudo gluster volume create vol_name replica 2 stripe 3 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0

raid5,raid6 等,一般不适合线上环境,但适合 geo 备份环境,因为是用软件的方式实现 raid5 等功能,因此 cpu 开销较大,而且一旦有磁盘损坏,计算的 cpu 开销更加大,如果在压力较大的线上环境跑,容易造成较大延迟。如果线上的读写压力很小,也可以考虑使用。

raid5:不很推荐,因为不够平衡,容错性太低,而且开销比较大。

sudo gluster volume create vol_name disperse 6 redundancy 1 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0

raid6:可以使用,比 raid5 平衡,容错性比 raid5 高很多,开销只是稍大。

sudo gluster volume create vol_name disperse 7 redundancy 2 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0 172.17.0.8:/d/disk0

更为安全的离线 geo 备份集群 raid 推荐:(最大可以允许一半的磁盘损坏,具有极高容错性,数据可用性可达 10 个 9)

sudo gluster volume create vol_name disperse 10 redundancy 5 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0 172.17.0.6:/d/disk0 172.17.0.7:/d/disk0 172.17.0.8:/d/disk0 172.17.0.9:/d/disk0 172.17.0.10:/d/disk0 172.17.0.11:/d/disk0

五、系统特性

1.cache、数据一致性

客户端带有 cache,但是该 cache 并不具备数据一致性,cache 的更新是定时更新,默认间隔 1 秒,也就是说,某个客户端修改或删除一个文件后,需要 1 秒钟以后,整个集群才能全部感知到,这一秒钟内会存在数据的不一致。因此 GlusterFS 不适用于数据一致性要求强的数据。对于图片、语音等文件,在应用中做限定,不修改图片,只增加图片,这样数据的一致性问题就不会出现。

客户端的 cache 会带来性能的提升,因此当集群有一定规模时,合理的规划客户端访问的文件也是有必要的,能够增强 cache 的利用率。

2.用户、权限

GlusterFS 所用的用户是 linux 自身的用户,linux 用户有两个属性,一个是用户名,一个是用户号,linux 在文件系统总标识一个文件的权限是用用户号的,而这个用户号可以在 GlusterFS 之间传递。比如某用户名 user1,用户号 1001,user1 用户创建了文件 A,权限是 0600。

这时另外一台电脑,有用户名 user1,用户号 1002,这时该用户不能访问 A 文件。

但是该电脑有一个用户 user3,用户号是 1001,该用户号与前面的 user1 用户号相同,可以访问 A 文件。

为了让用户名和用户号不冲突,在创建系统用户时,指定一个用户号,并且是不容易被系统自动分配到的区间,这样在集群之间能使用一致的用户权限。

六、集群规模

客户端或 mount 进程会跟所有 brick 连接,并且端口是小于 1024 的,因此 brick 数量一定不能超过 1024,

在 replica 模式下,每个服务器有个 glusterfs 进程会以客户端形式连接每个 brick,如果再在这些服务器上要进行 mount,那么最大 brick 数小于 500.

由于端口是使用有限的小于 1024 的端口,因此要注意保留部分常用的端口,如 21,22,80,443 端口。避免由于端口被占用导致重要服务无法启动。

修改 /etc/sysctl.conf 文件,添加一行,具体端口更据需要设定。

net.ipv4.ip_local_reserved_ports=0-25,80,443

然后执行 sysctl 命令使其生效:

sudo sysctl -p

线上集群,不同规模下,集群配置如下表。假设表中的每台机器拥有 12 块磁盘,平均可用于存储的磁盘 10 块。另外 2 块用于安装系统、记录日志、备用等功能。

GlusterFS 分布式存储部署使用

系统根据不同时期,不断进行扩容,最大规模可达 500 台。

系统需要准备一定的备用磁盘或备用机器,以备磁盘或机器损坏时可以及时修复数据。当规模在 2 -15 台时,准备 1 - 3 块磁盘作为备用;当规模在 15-500 台时,准备 1 - 3 台电脑作为备用。

系统集群较大时,要保证让数据的多个备份在不同的机器上,这样才可以在系统的某台机器宕机的情况,整个系统还是处于可用状态。

CentOS 7 搭建 GlusterFS  http://www.linuxidc.com/Linux/2015-10/124331.htm

使用 GlusterFS 作为 KVM 后端存储 http://www.linuxidc.com/Linux/2013-08/89108.htm

分布式存储系统 GlusterFS 初体验 http://www.linuxidc.com/Linux/2013-08/89107.htm

GlusterFS 全局统一命名空间 http://www.linuxidc.com/Linux/2013-08/89106.htm

设计新 Xlator 扩展 GlusterFS http://www.linuxidc.com/Linux/2013-08/89105.htm

GlusterFS Rebalance 简析 http://www.linuxidc.com/Linux/2013-08/89104.htm

CentOS 6.0-x86_64 下体验 Glusterfs  http://www.linuxidc.com/Linux/2015-01/111211.htm

GlusterFS 的详细介绍:请点这里
GlusterFS 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/125106.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8505字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7982146
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...