GlusterFS 4.1 版本选择和部署

1 前言相关

1.1 glusterfs优势

1、无元数据设计

GlusterFS设计没有集中或分布式元数据,取而代之的是弹性哈希算法。集群中的任何服务器、客户端都可利用哈希算法、路径及文件名进行计算,就可以对数据进行定位,并执行读写访问操作。

结论:

  • 无元数据设计带来的好处是极大地提高了扩展性,同时也提高了系统的性能和可靠性。
  • 如果需要列出文件或目录,性能会大幅下降,因为列出文件或目录,需要查询所在的节点并对节点中的信息进行聚合。
  • 但是如果给定确定的文件名,查找文件位置会非常快。

2、服务器间的部署

GlusterFS集群服务器之间是对等的,每个节点服务器都掌握了集群的配置信息。

所有信息都可以在本地查询。每个节点的信息更新都会向其他节点通告,保证节点信息的一致性。

但是集群规模较大后,信息同步效率会下降,非一致性概率会提高。

3、客户端访问

首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是远端服务器上。

读写操作会被交给VFS(Virtual File System,虚拟文件系统) 来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client计算,并最终通过网络将请求或数据发送到GlusterFS Servers上。

关于glusterfs的原理详情,可以参考以下文章

glusterfs架构和原理

换个视角深入理解GlusterFS,GlusterFS缺点分析

glusterfs中文资料推荐刘爱贵博士的GlusterFS原创资源系列

1.2 版本选择

网上大部分文章都是基于3.x版本部署的,但是3.x版本已经在centos7中的阿里云的epel源中消失了,最低的也是4.0版本

[root@kaifa-supply ~]# yum search  centos-release-gluster
......
centos-release-gluster-legacy.noarch : Disable unmaintained Gluster repositories from the CentOS Storage SIG
centos-release-gluster40.x86_64 : Gluster 4.0 (Short Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster41.noarch : Gluster 4.1 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster5.noarch : Gluster 5 packages from the CentOS Storage SIG repository
centos-release-gluster6.noarch : Gluster 6 packages from the CentOS Storage SIG repository
centos-release-gluster7.noarch : Gluster 7 packages from the CentOS Storage SIG repository

并且明确的提示,4.0版本也是短期支持板,所以我们选择更新一些的4.1版本来部署

1.3 volume知识

存储类型介绍详见:Setting Up Volumes - Gluster Docs

在老版本中,共有7种卷类型

在新版本中,共有5种卷类型

共有的卷类型是:

  • Distributed (分布式卷 根据hash结果存放,无备份,可直读)
  • Replicated (复制卷 类似 RAID1,可直读)
  • Distributed Replicated (分布式复制卷 类比 RAID10,可直读)

不同的卷类型是:

  • 老版本中有stripe(条带卷),块存储方式,不能直读
  • 以及基于条带卷组合的分布式条带卷,复制条带卷,分布式复制条带卷
  • 新版本中放弃了stripe,启用了基于EC纠错码的Dispersed(纠错卷)
  • 以及组合出的Distributed Dispersed(分布式纠错卷)

不过我们不用考虑那么多,因为常规都用分布式复制卷,优点如下

  • 分布式存储,效率高
  • 基于复制卷,数据有备份
  • 文件可直读
  • 所有版本都支持

当然Dispersed(纠错卷 类似于RAID5)从3.6开始一直更新到7.x版本,花费了gluster吞对大量心血,想了解的可以看这篇文章

2 服务部署

参考 官方:快速部署指南

2.1 服务规划

操作系统 IP 主机名 附加硬盘
centos 7.4 10.0.0.101 gf-node1 sdb:5G
centos 7.4 10.0.0.102 gf-node2 sdb:5G
centos 7.4 10.0.0.103 gf-node3 sdb:5G

2.2 环境准备

5台服务器都做以下相同操作

# 关闭防火墙、selinux等不解释
# 完成hosts解析
cat >>/etc/hosts <<EOF
10.0.0.101 gf-node01
10.0.0.102 gf-node02
10.0.0.103 gf-node03
EOF # 安装4.1yum源和程序
yum install -y centos-release-gluster41
yum install -y glusterfs glusterfs-libs glusterfs-server # 启动服务并开机启动
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service

2.3 格式化挂载磁盘

总共创建3个目录,brick1用来挂载sdb,另外两个目录作为本地文件夹

格式化磁盘

# 查看磁盘列表
[root@gf-node01 ~]# fdisk -l
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors # 不分区直接格式化磁盘
mkfs.xfs -i size=512 /dev/sdb

挂载磁盘

# 创建目录并挂载
mkdir -p /data/brick{1..3}
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
mount -a && mount # 查看结果
[root@gf-node01 ~]# df -h|grep sd
/dev/sda2 48G 1.7G 47G 4% /
/dev/sdb 5.0G 33M 5.0G 1% /data/brick1

2.4 建立主机信任池

在任意一台主机上,执行以下命令都可以建立信任池,建立并不需要账号密码,因为默认是将部署环境考虑为安全的可信环境

# 建立可信池
gluster peer probe gf-node02
gluster peer probe gf-node03 # 查看状态
[root@gf-node01 ~]# gluster peer status
......
[root@gf-node01 ~]# gluster pool list
UUID Hostname State
4068e219-5141-43a7-81ba-8294536fb054 gf-node02 Connected
e3faffeb-4b16-45e2-9ff3-1922791e05eb gf-node03 Connected
3e6a4567-eda7-4001-a5d5-afaa7e08ed93 localhost Connected

注意: 一旦信任池建立后,只有在信任池中的节点才能添加新服务器信任池中

3 使用分布式复制卷

只实验GlusterFs的分布式复制卷,其他卷类型有需要的话参考百度自行测试

3.1 分布式复制卷创建说明

  1. 命令gluster volume create gv1 replica 3 DIR1 DIR2 DIR3 ....
  2. 副本数不能小于3 replica 3,否则会阻止创建,因为可能脑裂,会提示
    Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this
  3. 副本的数量如果等于副本数(3个),则是分布式卷,是倍数则是分布式复制卷
  4. 会先将3个副本一组创建为复制卷,然后再将多个复制卷组成分布卷
  5. 分布式复制卷的副本顺序,和创建命令相关,不会随机排列
  6. 如果不是所有副本卷都是独立硬盘,需要添加force参数,否则会提示错误
    volume create: gv1: failed:
    The brick gf-node01:/data/brick2/gv1 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.

3.2 分布式复制卷创建

# 创建分布式复制卷
gluster volume create gv1 replica 3 \
gf-node01:/data/brick1/gv1 \
gf-node01:/data/brick2/gv1 \
gf-node02:/data/brick1/gv1 \
gf-node02:/data/brick2/gv1 \
gf-node03:/data/brick1/gv1 \
gf-node03:/data/brick2/gv1 \
force # 启动卷
gluster volume start gv1 # 查看卷的状态
[root@gf-node01 ~]# gluster volume info
Volume Name: gv1
Type: Distributed-Replicate
Volume ID: e1e004fa-5588-4629-b7ff-048c4e17de91
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
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
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

3.3 分布式复制卷的使用

# 挂载卷
[root@gf-node01 ~]# mount -t glusterfs gf-node01:/gv1 /mnt # 写入数据测试
[root@gf-node01 ~]# touch /mnt/test{1..9}
[root@gf-node01 ~]# ls /mnt/test{1..9}
/mnt/test1 /mnt/test2 /mnt/test3 /mnt/test4 /mnt/test5 /mnt/test6 /mnt/test7 /mnt/test8 /mnt/test9 # 验证测试数据
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
test1 test2 test4 test5 test8 test9 [root@gf-node02 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1: [root@gf-node03 ~]# ls /data/brick*/*
/data/brick1/gv1:
test3 test6 test7
/data/brick2/gv1:
test3 test6 test7

结论: 可以看出前三个为一个复制集,后三个为一个复制集,所以创建卷的时候,卷的顺序很关键

GlusterFS 4.1 版本选择和部署的更多相关文章

  1. PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)

    PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版) 先看流程图: 大概介绍一下: 版本选择使用jenkins 中的 git parameter 插件实现 回滚方式 ...

  2. 【大数据技术】操作系统和Hadoop版本选择

    1.操作系统选择 Hadoop产品是由Java语言开发的,所以推荐的是Linux操作系统,理由很简单开源免费,推荐的操作系统CentOS. CentOS是一个基于Red Hat 企业级 Linux 提 ...

  3. 微服务与Spring Cloud基本概念、Spring Cloud版本命名方式与版本选择

    微服务是什么?Spring Cloud是什么?Spring Cloud版本命名方式?Spring Cloud版本选择? 一.微服务是什么 微服务是一种架构风格,是一种将单体应用开发为一组小型服务的方法 ...

  4. netcore sdk版本选择

    NetCore sdk并不是每个版本都支持VS2017工具,也不是每个版本的sdk版本号和Runtime版本号都一样,这就需要我们在创建某个版本的net core应用时注意: 使用不同版本的vs时需要 ...

  5. CentOS7安装CDH 第四章:CDH的版本选择和安装方式

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  6. F版本SpringCloud 2—什么是SpringCloud?SpringCloud版本选择

    引言:搭建微服务架构就像是买电脑,使用SpringCloud就是在买品牌机. 前言 昂,美好的天气里,不想直接说技术,给小伙伴萌看看傍晚的天空吧. -- 能找到天上的北极星吗? 上一篇文章中,通过一个 ...

  7. PHP的版本选择 (转)

    PHP的版本选择 http://yubosun.akhtm.com/tech/php-version.htm PHP版本特别多,特别杂,想自己搭一套php的运行环境可不是一件容易的事,稍不留神就遇到一 ...

  8. 总结一下安装linux系统经验-版本选择-安装ubuntu

    linux版本选择: 初次接触,建议选 Ubuntu 或者 Fedora,这两个发行版都很容易上手,而且两者都有很强大的中文社区,遇到问题比较容易解决,而且都有国内的源,安装或者更新软件时体验相对会好 ...

  9. 转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

    原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模 ...

随机推荐

  1. 2020 还不会泡 Github 你就落伍了

    前言 回想起两年前缸接触 GitHub 那会儿,就发现网上完全搜不到一篇关于 github 使用的文章,虽然自己倒腾几下慢慢的也就上手了,但毕竟花费了不少时间. 时间对每个人都是宝贵的,一直很好奇 G ...

  2. docker报错Error response from daemon: driver failed programming external connectivity on endpoint *

    服务端 通常会显示 port xxx allocated的,意思就是 xxx 端口被占用了. 如果报port allocated端口占用,就docker ps 查看正使用的镜像,docker kill ...

  3. Docker 技术系列之安装Docker Desktop for Mac

    终于要进入到Docker技术系列了,感谢大家的持续关注. 为什么要选择Docker?因为Docker 轻巧快速,提供了可行.经济.高效的替代方案.举个例子,安装Nginx,Mysql,Redis等常用 ...

  4. ubutu 12.04

    1.[系统设置]->[外观]->[行为]->[自动隐藏启动器],隐藏左侧边栏后,可以按快捷键[CTRL+a]弹出侧边栏. 2.QtCreator调试,提示[ptrace不允许的操作] ...

  5. 建议20:建议通过Function扩展类型

    JavaScript允许为语言的基本数据类型定义方法.通过Object.prototype添加原型方法,该方法可被所有的对象,.这样的方法对函数,数组,字符串,数字,正则表达式和布尔值都适用.例如,通 ...

  6. ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale proteomics datasets(大规模蛋白组学数据集中鉴定和定量蛋白复合物)

    文献名:ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale ...

  7. Spring Cloud 系列之 Netflix Hystrix 服务监控

    Actuator Hystrix 除了可以实现服务容错之外,还提供了近乎实时的监控功能,将服务执行结果和运行指标,请求数量成功数量等等这些状态通过 Actuator 进行收集,然后访问 /actuat ...

  8. CF1327D Infinite Path 题解

    原题链接 太坑了我谔谔 简要题意: 求一个排列的多少次幂能达到另一个排列.排列的幂定义见题.(其实不是新定义的,本来就是这么乘的) 很显然,这不像快速幂那样可以结合律. 既然这样,就从图入手. 将 \ ...

  9. [dp]牛牛与数组

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 牛牛喜欢这样的数组: 1:长度为n 2:每一个 ...

  10. intern()方法的使用

    intern() intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象, 否则将其添加到常量池并返回常量池中的引用. ...