目录

  • 简介
  • 安装
  • 将存储主机加入受信任主机池
  • 设置一个GlusterFS卷
  • 测试GlusterFS 卷
  • GlusterFS卷
  • FUSE
  • Translators(未完成)

简介

GlusterFS是一个可伸缩的分布式文件系统,适用于云存储和媒体流等数据密集型任务。实现了全部标准POSIX接口,并用fuse实现虚拟化,让用户看起来就像是本地磁盘一样。能够处理千数量级的客户端。

特征:

  • 容量可以按比例的扩展,且性能却不会因此而降低。
  • 廉价且使用简单,完全抽象在已有的文件系统之上。
  • 扩展和容错设计的比较合理,复杂度较低
  • 适应性强,部署方便,对环境依赖低,使用,调试和维护便利

安装

在生产中,网络要求全部千兆环境,gluster 服务器至少有 2 块网卡,1 块网卡绑定供 gluster 使用,剩余一块分配管理网络 IP,用于系统管理。如果有条件购买万兆交换机,服务器配置万兆网卡,存储性能会更好。网络方面如果安全性要求较高,可以多网卡绑定。

【注意】GlusterFS将动态生成的配置文件存储在/var/lib/glusterd,如果GlusterFs无法写入此文件,会导致集群不稳定,或者脱机。建议为创建单独的分区,以减少发生这种情况的机会。

  • 每个主机至少有两个磁盘,一个用于安装操作系统,一个用于GlusterFS存储。
  • 设置NTP,确保集群时间统一。

系统环境

  1. IP 主机名
    192.168.229.130 server1
    192.168.229.131 server2
    192.168.229.132 server3
  2. 时间同步
[root@server1 ~]# ntpdate 0.asia.pool.ntp.org
  1. 配置各主机可通过主机名解析IP地址 [略]

  2. 格式化磁盘

三个节点都要执行此操作

[root@server1 ~]# mkfs.xfs -i size=512 /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0[root@server1 ~]# mkdir -p /data/brick1[root@server1 ~]# echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab[root@server1 ~]# mount -a && mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=1005092k,nr_inodes=251273,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=203216k,mode=700)
/dev/sdb1 on /data/brick1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@server1 ~]# 可以看到 /dev/sdb1 已经挂在到 /data/brick1

安装GlusterFS

安装glusterfsyum仓库
yum install centos-release-gluster41.noarch[root@server3 ~]# cat /etc/yum.repos.d/CentOS-Gluster-4.1.repo # CentOS-Gluster-4.1.repo## Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more# information[centos-gluster41]name=CentOS-$releasever - Gluster 4.1 (Long Term Maintanance)baseurl=http://mirror.centos.org/$contentdir/$releasever/storage/$basearch/gluster-4.1/gpgcheck=1enabled=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage[centos-gluster41-test]name=CentOS-$releasever - Gluster 4.1 Testing (Long Term Maintenance)baseurl=http://buildlogs.centos.org/centos/$releasever/storage/$basearch/gluster-4.1/gpgcheck=0enabled=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage安装软件
yum install glusterfs-server启动glusterfs
[root@server1 ~]# systemctl start glusterd.service
[root@server1 ~]# systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system serverLoaded: loaded (/usr/lib/systemd/system/glusterd.service; disabled; vendor preset: disabled)Active: active (running) since Mon 2019-06-10 11:23:13 EDT; 7s agoProcess: 4506 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)Main PID: 4507 (glusterd)CGroup: /system.slice/glusterd.service└─4507 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFOJun 10 11:23:13 server1 systemd[1]: Starting GlusterFS, a clustered file-system server...
Jun 10 11:23:13 server1 systemd[1]: Started GlusterFS, a clustered file-system server.
[root@server1 ~]#

glusterd服务充当Gluster弹性卷管理器,监视glusterfs进程,并协调动态卷操作,例如跨多个存储服务器添加和删除卷。

将存储主机加入受信任主机池

在任意开启glusterd服务的主机上,将其他主机加入到受信任主机池

[root@server1 ~]# gluster peer probe server2
peer probe: success.
[root@server1 ~]# gluster peer probe server3
peer probe: success.
[root@server1 ~]# 

查看主机池中主机状态

[root@server1 ~]# gluster peer status
Number of Peers: 2Hostname: server2
Uuid: b1d87a2d-83bb-4412-9d21-c22007ce2c33
State: Accepted peer request (Connected)Hostname: server3
Uuid: 033444d4-886d-4a18-a051-3c537b9d75f5
State: Accepted peer request (Connected)
[root@server1 ~]# 【注意】 一旦主机池建立,只能由主机池中的主机添加新的主机,不能由新主机探测已经存再的主机池

设置一个GlusterFS卷

  1. 在所有的节点上执行
mkdir /data/brick1/gv1
  1. 在任一台服务器上执行
gluster volume create gv1 replica 3 server1:/data/brick1/gv1 server2:/data/brick1/gv1 server3:/data/brick1/gv1
gluster volume start gv1
  1. 确认volume启动成功
[root@server1 brick1]# gluster volume infoVolume Name: gv1
Type: Replicate
Volume ID: 5bfedb9a-b5df-4564-bbdc-20f57ad2f260
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: server1:/data/brick1/gv1
Brick2: server2:/data/brick1/gv1
Brick3: server3:/data/brick1/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

测试GlusterFS 卷

在其中一台服务器挂载卷。通常,是从外部机器(称为“客户机”)执行此操作。
由于使用这种方法将需要在客户机上安装额外的包,所以此处将使用其中一个服务器作测试。

mount -t glusterfs server1:/gv1 /mnt
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done

查看客户端挂载点

[root@server1 brick1]# ls -lA /mnt/copy* | wc -l
100

查看每个server的 GlusterFS 挂载点

[root@server1 brick1]# ls -lA /data/brick1/gv1/copy*

正常应该可以在每个server上看到100个文件

GlusterFS卷

分布式卷

这是默认的glusterfs卷i。如果没有指定卷的类型,则在创建卷时,默认选项是创建分布式卷。在这里,文件分布在卷中的各个bricks上。因此,file1可以只存储在brick1或brick2中,但不能同时存储在这两个文件中。因此没有数据冗余。这样一个存储卷的目的是方便和廉价地扩展卷大小。然而,这也意味着砖块故障将导致数据完全丢失,必须依赖底层硬件来保护数据丢失。

创建一个三节点的分布式卷

[root@server1 brick1]# mkdir /data/brick1/exp2
[root@server1 brick1]# gluster volume create test-volume server1:/data/brick1/exp2 server2:/data/brick1/exp2 server3:/data/brick1/exp2
volume create: test-volume: success: please start the volume to access data

查看volume信息

[root@server1 brick1]# gluster volume info
Volume Name: test-volume
Type: Distribute
Volume ID: 6ca102ae-9de8-4b74-a203-d008575a3e16
Status: Created
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: server1:/data/brick1/exp2
Brick2: server2:/data/brick1/exp2
Brick3: server3:/data/brick1/exp2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

复制式卷

Replicated: 复制式卷,类似 RAID 1

在复制卷中,解决了分布式卷中面临的数据丢失问题。在创建卷时,replica 数必须等于 volume 中 brick 所包含的存储服务器数,可用性高,这种卷的一个主要优点是,即使一个块失败,仍然可以从它的复制块访问数据。这样的卷用于更好的可靠性和数据冗余。

创建具有两个server的复制卷

[root@server1 brick1]# gluster volume create test-volume3 replica 2 transport tcp server1:/data/brick1/test1/ server2:/data/brick1/test1/
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?(y/n) y
volume create: test-volume3: success: please start the volume to access data

纠错卷

Dispersed Volume基于ErasureCodes(纠错码)提供了对磁盘或服务器故障的空间有效保护。它将原始文件的编码片段存储到每个块中,以一种只需要片段子集就可以恢复原始文件的方式存储。在不丢失对数据访问的情况下,可以丢失的块的数量由管理员在卷创建时配置。
类似于RAID5/6。通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率。

分布式纠错卷

分布式复制卷

Distributed Replicated: 分布式的复制卷,最少需要4台服务器才能创建。 brick 所包含的存储服务器数必须是 replica 的倍数,兼顾分布式和复制式的功能。

指定brick的顺序也很重要,因为相邻的砖块会成为彼此的复制品。当由于冗余和可伸缩存储而需要高可用性数据时,使用这种类型的卷。所以如果有8个brick和2个replica,那么前两个brick就会变成彼此的复制品,然后是下两个brick,以此类推。

创建volume 时 replica 2 server = 4 个节点

创建一个有两个replica的分布式复制卷

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful
Please start the volume to access data

FUSE

GlusterFS是一个用户空间文件系统,它利用FUSE(用户空间中的文件系统)与内核VFS交互。长期以来,用户空间文件系统的实现被认为是不可能的。FUSE就是为解决这个问题而开发的。FUSE是一个内核模块,它支持内核VFS和非特权用户应用程序之间的交互,并且它有一个可以从用户空间访问的API。使用这个API,几乎可以使用您喜欢的任何语言编写任何类型的文件系统,因为FUSE和其他语言之间有许多绑定。

这显示了一个文件系统“hello world”,它被编译为一个二进制“hello”。
它使用文件系统挂载点/tmp/fuse执行。然后用户在挂载点/tmp/fuse上发出ls -l命令。这个命令通过glibc到达VFS,由于mount /tmp/fuse对应于基于fuse的文件系统,所以VFS将其传递给fuse模块。FUSE内核模块在用户空间(libfuse)中通过glibc和FUSE库之后,将与实际的文件系统二进制文件“hello”进行联系。结果由“hello”通过相同的路径返回,并到达ls -l命令。
FUSE内核模块与FUSE库(libfuse)之间的通信是通过一个特殊的文件描述符进行的,该文件描述符是通过打开/dev/fuse. .获得的这个文件可以打开多次,获得的文件描述符被传递到挂载的syscall,以便将描述符与挂载的文件系统匹配起来。


Translators(未完成)

Translating “translators”:
translator将用户请求转换为存储请求

1对1,1对多,1对零(例如缓存)

https://www.cnblogs.com/myvic/p/6816924.html
https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/
https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/

转载于:https://www.cnblogs.com/mldblue/articles/11013390.html

gluster分布式存储 入门篇相关推荐

  1. 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...

  2. 女友问粉丝过万如何庆祝,我发长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学弟看了就懂

    文章目录 粉丝破万了 新星计划申请时粉丝数 新星内卷抢热榜之旅 运营整顿新星执行新规 重整旗鼓输出内容为王 女友问粉丝过万如何庆祝 保姆级大数据入门篇 一.学习重点划定 二.Java和大数据关系 三. ...

  3. 【C++基础】C++入门篇之一篇博客带你看懂为什么学习C++,C语言和C++的主要区别

    C++入门篇 C++入门 C++关键字(C++98) 命名空间 命名空间的用法 命名空间的嵌套 命名空间会被合并 命名空间的使用 C++的输入输出 缺省参数 函数重载 重载分类 重载原理 引用 引用用 ...

  4. 学习笔记---程序员练级攻略(入门篇、修养篇、专业基础篇、软件设计篇、高手成长篇)

    根据极客时间 左耳朵耗子 整理,请忽略每一行最后的数字 文章目录 1. 入门篇 47 2. 修养篇 51 3. 专业基础篇 56 4. 软件设计篇 60 5. 高手养成 63 1. 入门篇 47 1. ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  6. SQL注入漏洞全接触--入门篇

    随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  7. Symbian开发系列 - 入门篇

    要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源. [基础] 什么是Symbian 学习Symbian的基本概念  Symbian操 ...

  8. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  9. 【SSRS】入门篇(二) -- 建立数据源

    原文:[SSRS]入门篇(二) -- 建立数据源 通过 [SSRS]入门篇(一) -- 创建SSRS项目 这篇,我们建立了一个SSRS项目: 接下来,我们以 AdventureWorks2012 示例 ...

最新文章

  1. angularjs php登录验证,AngularJs表单验证的方法
  2. java数据集成是什么_数据集成 - BlueDavy之技术Blog - BlogJava
  3. jasperreports_JasperReports JSF插件用例系列
  4. gp的分布、分区策略(概述)
  5. List遍历删除元素remove()
  6. STL中vector小结
  7. 计算机科学与技术代码0812,一级学科代码及名称0812计算机科学与技术(2007年)本.doc...
  8. 软件测试之-系统测试
  9. 5G与人工智能有什么关系?
  10. 同花顺股票交易接口测试
  11. 今天去西安易朴通讯有限公司实习
  12. 比特大陆裁员潮据称已波及整个BCH开发团队
  13. java实时获取android网速_Android实现网速实时监测工具类
  14. SAP中图文展示分摊和分配的区别
  15. gcc 编译参数 -fPIC 的详解和一些问题
  16. 深圳学位分数计算机,深圳各区学位录取积分出炉!罗湖录取到C类,南山最高降40分……...
  17. 怎么把文字转换成语音,这里有简单的方法
  18. 植物大战僵尸:查找植物叠加种植CALL
  19. linux挂载2T以上硬盘
  20. Chrome扩展框架-浏览器插件安装方法

热门文章

  1. PyQt Graphics View 一个hello world例子
  2. javascript的bind方法
  3. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
  4. sql server 2000 更改账户默认数据库
  5. MASQUERADE
  6. 2018-07-25 异想天开
  7. c语言用链表实现成绩管理系统,C语言写的学生成绩管理系统(链表)
  8. ArcGIS——数据库与服务备份(一、oracle中的geodatabase备份使用impdp与expdp)
  9. 基于阿里云上实现全站https
  10. DXUT框架剖析(5)