Centos 7 的glusterFS 部署

glusterFS 介绍


GlusterFS概述

 GlusterFS系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。  

相关术语:

  • Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如‘SERVER:EXPORT‘

  • Client:挂载了GFS卷的设备

  • Extended Attributes:xattr是一个文件系统的特性,其支持用户或程序关联文件/目录和元数据。

  • FUSE:Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。

  • Geo-Replication

  • GFID:GFS卷中的每个文件或目录都有一个唯一的128位的数据相关联,其用于模拟inode

  • Namespace:每个Gluster卷都导出单个ns作为POSIX的挂载点

  • Node:一个拥有若干brick的设备

  • RDMA:远程直接内存访问,支持不通过双方的OS进行直接内存访问。

  • RRDNS:round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法

  • Self-heal:用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。

  • Split-brain:脑裂

  • Translator:

  • Volfile:glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname

  • Volume:一组bricks的逻辑集合

1、无元数据设计

    元数据是用来描述一个文件或给定区块在分布式文件系统中所在的位置,简而言之就是某个文件或某个区块存储的位置。传统分布式文件系统大都会设置元数据服务器或者功能相近的管理服务器,主要作用就是用来管理文件与数据区块之间的存储位置关系。相较其他分布式文件系统而言,GlusterFS并没有集中或者分布式的元数据的概念,取而代之的是弹性哈希算法。集群中的任何服务器和客户端都可以利用哈希算法、路径及文件名进行计算,就可以对数据进行定位,并执行读写访问操作。

    这种设计带来的好处是极大的提高了扩展性,同时也提高了系统的性能和可靠性;另一显著的特点是如果给定确定的文件名,查找文件位置会非常快。但是如果要列出文件或者目录,性能会大幅下降,因为列出文件或者目录时,需要查询所在节点并对各节点中的信息进行聚合。此时有元数据服务的分布式文件系统的查询效率反而会提高许多。

2、服务器间的部署

    在之前的版本中服务器间的关系是对等的,也就是说每个节点服务器都掌握了集群的配置信息,这样做的好处是每个节点度拥有节点的配置信息,高度自治,所有信息都可以在本地查询。每个节点的信息更新都会向其他节点通告,保证节点间信息的一致性。但如果集群规模较大,节点众多时,信息同步的效率就会下降,节点信息的非一致性概率就会大大提高。因此GlusterFS未来的版本有向集中式管理变化的趋势。

3、客户端访问流程

技术分享

    当客户端访问GlusterFS存储时,首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是在远程服务器上。读写操作将会被交给VFS(Virtual File System)来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client的计算,并最终经过网络将请求或数据发送到GlusterFS Server上。


 GlusterFS集群的模式

    GlusterFS 集群的模式只数据在集群中的存放结构,类似于磁盘阵列中的级别。

1、分布式卷(Distributed Volume)

    又称哈希卷,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上,优点是容量大,缺点是没冗余。

技术分享

2、复制卷(Replicated Volume)

    相当于raid1,复制的份数,决定集群的大小,通常与分布式卷或者条带卷组合使用,解决前两种存储卷的冗余缺陷。缺点是磁盘利用率低。

    复本卷在创建时可指定复本的数量,通常为2或者3,复本在存储时会在卷的不同brick上,因此有几个复本就必须提供至少多个brick,当其中一台服务器失效后,可以从另一台服务器读取数据,因此复制GlusterFS卷提高了数据可靠性的同事,还提供了数据冗余的功能。

技术分享

3、分布式复制卷(Distributed Replicated Volume)

   分布式复制GlusterFS卷结合了分布式和复制Gluster卷的特点,看起来类似RAID10,但其实不同,RAID10其实质是条带化,但分布式复制GlusterFS卷则没有。

技术分享

4、条带卷(Striped Volume)

    相当于raid0,文件是分片均匀写在各个节点的硬盘上的,优点是分布式读写,性能整体较好。缺点是没冗余,分片随机读写可能会导致硬盘IOPS饱和。

技术分享

5、分布式条带卷(Distributed Striped Volume)

    当单个文件的体型十分巨大,客户端数量更多时,条带卷已经无法满足需求,此时将分布式与条带化结合起来是一个比较好的选择。其性能与服务器数量有关。

技术分享

参考文档:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Architecture/


环境准备

 以下操作三台服务主机同步

 

 

4台主机全部ping通 

/etc/hosts 文件复制到每一台主机

 hosts文件 4台一致

创建 挂载目录

格式化 磁盘 3台主机 192.168.8.19/20/21 同步

 三台主机 同时挂载  写入/etc/fstab

 

查看效果 

 

 


操作命令

添加节点

gluster peer probe 

例子:gluster peer probe server01

删除节点:

gluster peer detach(一处节点,需要填将该节点的brick移除)

例子:gluster peer detach server01

一、创建卷

gluster volume create 

例子:gluster volume create gv0  server01:/g1/dv1 server02:/g1/dv1 server03:/g1/dv1

二、启动卷

gluster volume start 

例子:gluster volume start gv0

三、停止卷

gluster volume stop

例子:gluster volume stop gv0

四、删除卷

gluster volume delete

例子:gluster volume delete gv0

五、查看卷

gluster volume list      # 列出集群中的所有卷

gluster volume info[all]  # 查看集群中的卷信息

gluster volume status [all]   #查看集群中的卷状态

六、更改卷类型

1.先卸载挂载的目录

umount  /mnt

2 停止卷

3.更改卷的类型

语法:gluster volume set test-volume config.transport tcp,rdma OR tcp OR rdma

七、重新均衡卷

gluster volume rebalance <VOLNAME>fix-layout start

例子:gluster rebalance test-volume fix-layout start

八、收缩卷

1开始收缩

gluster volume remoe-brick gv0 server01:/g1/dv1 server02:/g1/dv1 server03:/g1/dv1 start

2.查看迁移状态

gluster volume remoe-brick gv0 server01:/g1/dv1 server02:/g1/dv1 server03:/g1/dv1 status

3.迁移完成提交

gluster volume remoe-brick gv0 server01:/g1/dv1 server02:/g1/dv1 server03:/g1/dv1 commit

九、glusterFS 的配额

glusterFS目录限额,允许你根据目录或卷配置限制磁盘空间的使用量

1.开启限额

gluster volume quota VolumeNAME enable

2.关闭限额

gluster volume quota VolumeNAME disbale

3.设置替换磁盘限制

  3.1根据卷限制

   gluster volume quota VolumeName limit-usage / size

例子:gluster volume quota gv0 limit-usage  / 10GB

  3.2 根据目录限制

gluster volume quota VolumeName limit-usage DirectoryPath LimitSize


开始部署 

下载epel 源 yum install centos-release-gluster

安装软件

[root@server02 ~]# yum -y install glusterfs-server nfs-utils samba rpcbind

启动服务

设置所有主机的关联

在一台主机操作即可 本地的无需设置

删除 关联用gluster peer detach 主机名或IP地址

[root@server01 ~]# gluster peer status
Number of Peers: 0
[root@server01 ~]# gluster peer probe kibana
peer probe: success. 
[root@server01 ~]# gluster peer probe logstash
peer probe: success. 
[root@server01 ~]# gluster peer status
Number of Peers: 2

Hostname: kibana
Uuid: 28162092-bc22-4ea3-b726-ec9c53538fc2
State: Peer in Cluster (Connected)

Hostname: logstash
Uuid: 144a3939-8466-4fc5-ad29-4deb26b9800b
State: Peer in Cluster (Connected)

创建分布巻

[root@server01 ~]# gluster volume create dis_vol \
> elasticsearch:/g1/dv1 kibana:/g1/dv1 logstash:/g1/dv1
volume create: dis_vol: success: please start the volume to access data
[root@server01 ~]# ls /g1
dv1

查看具体信息
[root@server01 ~]# gluster volume info dis_vol
 
Volume Name: dis_vol
Type: Distribute
Volume ID: d4f0d98e-3e53-488d-9e10-61204a6370bd
Status: Created
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: elasticsearch:/g1/dv1
Brick2: kibana:/g1/dv1
Brick3: logstash:/g1/dv1

Options Reconfigured:
nfs.disable: on
transport.address-family: inet

启动卷

[root@server01 ~]# gluster volume start dis_vol
volume start: dis_vol: success
 

客户端安装软件 

[root@server04 ~]# yum -y install nfs-utils glusterfs glusterfs-fuse attr 

挂载服务端的 卷

[root@server04 ~]# mount -t glusterfs elasticsearch:/dis_vol /gfs

查看验证
[root@server04 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  4.9G   13G  29% /
devtmpfs                 473M     0  473M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  7.1M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1               1014M  161M  854M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
elasticsearch:/dis_vol    30G  404M   30G   2% /gfs
写入数据

[root@server04 ~]# cp /etc/passwd /etc/shadow /etc/group /gfs

[root@server04 ~]# ls /gfs
group  passwd  shadow

服务端查看

elasticsearch端

[root@server01 ~]# ls /g1/dv1/
group   

kibana 端

[root@server02 ~]# ls /g1/dv1/
passwd  shadow
可以看到kibana 这台服务器上同时有两个文件

logstash端 没有任何数据

[root@server03 ~]# ls /g1/dv1/
[root@server03 ~]# 


创建复制卷

[root@server01 ~]# gluster volume create rep_vol replica 3 \
> elasticsearch:/g1/dv2 \
> kibana:/g1/dv2 \
> logstash:/g1/dv2
volume create: rep_vol: success: please start the volume to access data

查看 卷信息

[root@server01 ~]# gluster info rep_vol
unrecognized word: info (position 0)
[root@server01 ~]# gluster volume info rep_vol
 
Volume Name: rep_vol
Type: Replicate
Volume ID: e8e61fbd-6d49-44a8-9268-a4d52d49b2b0
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: elasticsearch:/g1/dv2
Brick2: kibana:/g1/dv2
Brick3: logstash:/g1/dv2

Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
启动卷

[root@server01 ~]# gluster volume start rep_vol
volume start: rep_vol: success
客户端挂载卷

[root@server04 ~]# mount -t glusterfs elasticsearch:/rep_vol /gfs1
[root@server04 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  4.9G   13G  29% /
devtmpfs                 473M     0  473M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  7.1M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1               1014M  161M  854M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
elasticsearch:/dis_vol    30G  405M   30G   2% /gfs
elasticsearch:/rep_vol    10G  135M  9.9G   2% /gfs1
写入数据验证

[root@server04 ~]# cp /etc/passwd /etc/shadow /etc/group /gfs1/
[root@server03 ~]# ls /g1/dv2/
group  passwd  shadow

[root@server02 ~]# ls /g1/dv2/
group  passwd  shadow

[root@server01 ~]# ls /g1/dv2/
group  passwd  shadow
三台服务器同时写入

 

创建条带卷

[root@server01 ~]# gluster volume create str_vol stripe 3 \
> elasticsearch:/g1/dv3 \
> kibana:/g1/dv3 \
> logstash:/g1/dv3
volume create: str_vol: success: please start the volume to access data
[root@server01 ~]# gluster
gluster> volume info str_vol
 
Volume Name: str_vol
Type: Stripe
Volume ID: daea70e7-cd75-4f4b-9b9f-9fed907e5e44
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: elasticsearch:/g1/dv3
Brick2: kibana:/g1/dv3
Brick3: logstash:/g1/dv3

Options Reconfigured:
transport.address-family: inet
nfs.disable: on
启动卷

[root@server01 ~]# gluster volume start str_vol
volume start: str_vol: success
客户端挂载测试

[root@server04 ~]# mount -t glusterfs kibana:/str_vol /gfs2/
[root@server04 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  4.9G   13G  29% /
devtmpfs                 473M     0  473M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  7.1M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1               1014M  161M  854M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
elasticsearch:/dis_vol    30G  405M   30G   2% /gfs
elasticsearch:/rep_vol    10G  135M  9.9G   2% /gfs1
kibana:/str_vol           30G  405M   30G   2% /gfs2
[root@server04 ~]# cp /etc/passwd /gfs2/
.glusterfs/ passwd      
[root@server03 dv3]# ls /g1/dv3/
passwd
[root@server03 dv3]# cat passwd 
[root@server03 dv3]# cat passwd 
[root@server03 dv3]# 
[root@server02 ~]# ls /g1/dv3/passwd 
/g1/dv3/passwd
[root@server02 ~]# cat /g1/dv3/passwd 
[root@server02 ~]# 
[root@server01 ~]# ls /g1/dv3/
passwd
[root@server01 ~]# cat /g1/dv3/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
可以看到虽然三台服务器都有 passwd 文件 但只有第一台服务器的文件有内容

文件较小没办法看到效果  实际应该分成条带存放在多个brick 上

分布条带卷

[root@server01 ~]# gluster volume create dir_str_vol stripe 3 elasticsearch:/g2/dv1 kibana:/g2/dv1 logstash:/g2/dv1 elasticsearch:/g2/dv2 kibana:/g2/dv2 logstash:/g2/dv2
volume create: dir_str_vol: success: please start the volume to access data
[root@server01 ~]# gluster volume info dir_str_vol 
 
Volume Name: dir_str_vol
Type: Distributed-Stripe
Volume ID: ef216b98-da93-4270-a5d3-42649acb4a8b
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: elasticsearch:/g2/dv1
Brick2: kibana:/g2/dv1
Brick3: logstash:/g2/dv1
Brick4: elasticsearch:/g2/dv2
Brick5: kibana:/g2/dv2
Brick6: logstash:/g2/dv2

Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server01 ~]# gluster volume start dir_str_vol
volume start: dir_str_vol: success
[root@server04 ~]# mkdir /gfs3 
[root@server04 ~]# mount -t glusterfs elasticsearch:/dir_str_vol /gfs3/
[root@server04 ~]# cp /etc/passwd /etc/group /gfs3/

[root@server03 dv3]# ls /g2/dv1/
passwd
[root@server03 dv3]# ls /g2/dv2/
group
[root@server02 ~]# ls /g2/dv1/
passwd
[root@server02 ~]# ls /g2/dv2/
group

[root@server01 ~]# ls /g2/dv1/
passwd
[root@server01 ~]# ls /g2/dv2/
group
两个文件被分发到不同的brick 同样只有server01的文件有内容

 未带待续。。

 

 

展开阅读全文

没有更多推荐了,返回首页