在上一篇中我们介绍了Glusterfs在CentOS7上的安装,并且提到Glusterfs client端有三种:Native client,NFS,Samba, 今天我们就来一起学习下这三种方式。

在开始之前,我已经做好了一个Volume:

[root@node01 ~]# gluster volume create repvol replica 2 > node01.lab.example.com:/bricks/thinvol1/brick > node02.lab.example.com:/bricks/thinvol1/brick
volume create: repvol: success: please start the volume to access data
[root@node01 ~]# gluster volume start repvol
volume start: repvol: success
[root@node01 ~]# gluster volume info repvol
 
Volume Name: repvol
Type: Replicate
Volume ID: 7015b7fe-8039-4d5d-b698-e8321df5289c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node01.lab.example.com:/bricks/thinvol1/brick
Brick2: node02.lab.example.com:/bricks/thinvol1/brick
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

1 Native mount client

1). server 端无需做额外设置,只需正常安装,配置glusterfs服务即可

2). Client 端需要安装glusterfs client,这里我们还是把node02看做client

[root@node02 ~]# yum install -y glusterfs glusterfs-fuse
[root@node02 ~]# mount -t glusterfs node01.lab.example.com:repvol /mnt
[root@node02 ~]# df -h | grep mnt
node01.lab.example.com:repvol   2.0G   33M  2.0G   2% /mnt

Native mount的一大优势是支持“高可用”,虽然我们挂载的时使用的命令是指定的node01.lab.example.com, 但是当node01不可用时,glusterfs volume 还是可以work的。我们可以stop node01上的glusterd service模拟node01出现故障,看是否影响volume repvol的使用。

[root@node01 ~]# systemctl stop glusterd
[root@node02 /]# df -h | grep mnt
node01.lab.example.com:repvol   2.0G   33M  2.0G   2% /mnt
[root@node02 /]# cd /mnt
[root@node02 mnt]# touch test.file
[root@node02 mnt]#

从上面可以看出volume repvol在node01 不可用时,还依然可用。

2 NFS

在查看volume详细信息时,我们会发现有一个选项“nfs.disable: on”,从字面上就可以理解默认是禁用了nfs的

[root@node01 /]# gluster volume info repvol
 
Volume Name: repvol
Type: Replicate
Volume ID: 7015b7fe-8039-4d5d-b698-e8321df5289c
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node01.lab.example.com:/bricks/thinvol1/brick
Brick2: node02.lab.example.com:/bricks/thinvol1/brick
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

手动放开nfs,并重启volume

[root@node01 ~]# gluster volume set repvol nfs.disable off
volume set: success
[root@node01 ~]# gluster volume stop repvol
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: repvol: success
[root@node01 ~]# gluster volume start repvol
volume start: repvol: success
[root@node01 ~]# gluster volume info repvol | grep nfs.disable
nfs.disable: off
[root@node01 ~]#

同时server上会启动这样一个进程做一个nfs共享以便提供nfs挂载

[root@node01 ~]# ps -aux | grep nfs | grep -v grep
root      20064  0.1  6.5 581640 65028 ?        Ssl  04:23   0:00 /usr/sbin/glusterfs -s localhost --volfile-id gluster/nfs -p /var/lib/glusterd/nfs/run/nfs.pid -l /var/log/glusterfs/nfs.log -S /var/run/gluster/d8b498939d669fdc978b5b3d96d5aa9d.socket

放开防火墙限制

[root@node01 ~]# firewall-cmd --add-service=nfs --add-service=rpc-bind
success

在node02上使用nfs方式挂载volume repvol

[root@node02 /]# mount -t nfs node01.lab.example.com:repvol /mnt
[root@node02 /]# df -h | grep mnt
node01.lab.example.com:repvol   2.0G   33M  2.0G   2% /mnt

这里可以看出nfs挂载似乎也不复杂,而且client上不需要安装额外的glusterfs组件。

3 Samba

将option "nfs.disable"恢复默认设置,并重启volume

[root@node01 glusterfs]# gluster volume reset repvol nfs.disable
volume reset: success: reset volume successful
[root@node01 ~]# gluster volume stop repvol
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: repvol: success
[root@node01 ~]# gluster volume start repvol
volume start: repvol: success
[root@node01 ~]# gluster volume info repvol | grep nfs.disable
nfs.disable: on

3.1在node01上安装samba,启动samba service并放开防火墙限制

[root@node01 ~]# yum install -y samba
[root@node01 ~]# systemctl start smb
[root@node01 ~]# firewall-cmd --add-service=samba

3.2修改volume option并重启volume, glusterd service

编辑/etc/glusterfs/glusterd.vol 文件加入下面一行

option rpc-auth-allow-insecure on

[root@node01 ~]# gluster volume set repvol server.allow-insecure on
[root@node01 ~]# gluster volume set repvol storage.batch-fsync-delay-usec 0
[root@node01 ~]# gluster volume set repvol stat-prefetch off
[root@node01 ~]# systemctl restart glusterd
[root@node01 ~]# gluster volume stop repvol
[root@node01 ~]# gluster volume start repvol

---查看一下samba配置文件,可以看到最下面多出一个关于repvol的共享:

[root@node01 ~]# cat /etc/samba/smb.conf

......

[gluster-repvol]
comment = For samba share of volume repvol
vfs objects = glusterfs
glusterfs:volume = repvol
glusterfs:logfile = /var/log/samba/glusterfs-repvol.%M.log
glusterfs:loglevel = 7
path = /
read only = no
guest ok = yes

......

3.3创建一个samba user

[root@node01 ~]# adduser -s /sbin/nologin smbuser
[root@node01 ~]# smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
Added user smbuser.

在node01 server 上挂载volume repvol到/mnt目录下,并设修改目录权限如下

[root@node01 ~]# mount -t glusterfs node01.lab.example.com:repvol /mnt
[root@node01 ~]# chown smbuser: /mnt
[root@node01 ~]# umount /mnt

3.4 在node02上安装samba-client,cifs-utils

[root@node02 ~]# yum install -y cifs-utils
[root@node02 ~]# yum install -y samba-client*

验证samba共享目录

[root@node02 ~]# smbclient -L node01.lab.example.com -U%

Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        IPC$            IPC       IPC Service (Samba 4.4.4)
        gluster-repvol  Disk      For samba share of volume repvol
Domain=[SAMBA] OS=[Windows 6.1] Server=[Samba 4.4.4]

Server               Comment
        ---------            -------

Workgroup            Master
        ---------            -------

使用smbuser进行挂载

[root@node02 ~]# mount -t cifs -o user=smbuser,pass=redhat //node01.lab.example.com/gluster-repvol /mnt
Retrying with upper case share name
mount error(6): No such device or address
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

查看samba日志:/var/log/samba/log.smbd发现了如下一些messages:

[2017/07/25 08:39:56.358336,  0] ../lib/util/modules.c:48(load_module)
 
Error loading module ‘/usr/lib64/samba/vfs/glusterfs.so‘:
/usr/lib64/samba/vfs/glusterfs.so: cannot open shared object file: No
such file or directory

google了很久,得到提示需要安装samba-vfs-glusterfs.x86_64,然后yum进行安装

再次尝试挂载

[root@node02 ~]# mount -t cifs //node01.lab.example.com/gluster-repvol /mnt -o username=smbuser,password=redhat
mount error(5): Input/output error
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

发现错误已经不同了,再次找到node01下面的samba日志,发现

[root@node01 samba]# cd /var/log/samba/
[root@node01 samba]# ls
cores  glusterfs-repvol.192.168.133.135.log  log.smbd  old

192.168.133.135即为node02的ip,打开这个glusterfs-repvol.192.168.133.135.log后发现如下错误:

[2017-07-25 13:09:46.473070] E [socket.c:3097:socket_connect] 0-gfapi: connection attempt on  failed, (Permission denied)
[2017-07-25
13:09:46.473307] I [MSGID: 104025] [glfs-mgmt.c:752:mgmt_rpc_notify]
0-glfs-mgmt: Exhausted all volfile servers [Transport endpoint is not
connected]
[2017-07-25 13:09:46.474733] I [MSGID: 101191]
[event-epoll.c:659:event_dispatch_epoll_worker] 0-epoll: Exited thread
with index 1
[2017-07-25 13:09:46.473303] E [MSGID: 104024]
[glfs-mgmt.c:735:mgmt_rpc_notify] 0-glfs-mgmt: failed to connect with
remote-host: localhost (Transport endpoint is not connected) [Transport
endpoint is not connected]

权限有问题!!!而权限无外乎就是目录本身权限和selinux权限,于是关闭了node01上的selinux,然后尝试挂载,这次挂载成功。哈哈。。。不过selinux这里的设置还没有研究出该怎么配置,先记在这里。

[root@node01 samba]# setenforce 0
[root@node02 ~]# mount -t cifs //node01.lab.example.com/gluster-repvol /mnt -o username=smbuser,password=redhat
[root@node02 ~]# df -h | grep mnt
//node01.lab.example.com/gluster-repvol  2.0G   33M  2.0G   2% /mnt
[root@node02 ~]#

本文出自 “不积跬步,无以至千里” 博客,请务必保留此出处http://jiaxiaolei.blog.51cto.com/3117381/1950981

Glusterfs volume 的三种挂载方式的更多相关文章

  1. Docker与数据:三种挂载方式

    操作系统与存储 操作系统中将存储定义为 Volume(卷) ,这是对物理存储的逻辑抽象,以达到对物理存储提供有弹性的分割方式.另外,将外部存储关联到操作系统的动作定义为 Mount(挂载). Dock ...

  2. yum源仓库的三种搭建方式

    yum源的三种搭建方式 一.  本地yum仓库的搭建 1.1.获取软件包资源 将iso镜像挂载在本地目录中,此次挂载目录为/var/www/html/repo/,此目录本身不存在,需要创建.软件宝资源 ...

  3. 通过三个DEMO学会SignalR的三种实现方式

    一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...

  4. Hive metastore三种配置方式

    http://blog.csdn.net/reesun/article/details/8556078 Hive的meta数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储.远端存储比较适 ...

  5. django 模板语法和三种返回方式

    模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...

  6. js的三种继承方式及其优缺点

    [转] 第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = ' ...

  7. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  8. Map三种遍历方式

    Map三种遍历方式 package decorator; import java.util.Collection; import java.util.HashMap; import java.util ...

  9. php 递归函数的三种实现方式

    递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去.实现递归函数可以采取什么方式呢?本文列出了三种基本方式.理解其原来需要一定的基础知识 ...

随机推荐

  1. ADV-297 快速排序 java

    问题描述 用递归来实现快速排序(quick sort)算法.快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x.首先对数组中的元素进行调整,使x放在正确的位置上.同时,所有比x小 ...

  2. java并发初探ReentrantWriteReadLock

    java并发初探ReentrantWriteReadLock ReenWriteReadLock类的优秀博客 ReentrantReadWriteLock读写锁详解 Java多线程系列--" ...

  3. java并发:原子类之AtomicLong

    原子类之AtomicLong java线程中的操作,需要满足原子性.可见性等原则,比如i++这样的操作不具备原子性, A线程读取了i,另一个线程执行i++,A线程再执行i++就会引发线程安全问题 推荐 ...

  4. day11-Python运维开发基础(迭代器与可迭代对象、高阶函数)

    1. 迭代器与可迭代对象 # ### 迭代器 """ 迭代器: 能被next方法调用,并且不断返回下一个值的对象,是迭代器(对象) 特征:迭代器会生成惰性序列,它通过计算 ...

  5. cover-view子节点溢出父节点被剪切的问题

    因为之前在使用自定义tabbar的时候,使用了cover-view, 导致溢出父节点的那部分被剪切掉,因为没找到有类似的问题出现, 所以我在布局方面做了调整: .tab-bar { overflowY ...

  6. 5.7 Nginx 其他模块

  7. MVC5仓库管理系统

    下载

  8. 零距离初体验uboot

    一.uboot配置编译步骤 1.开发板光盘的BSP 2.复制到虚拟机,tar -jxvf qt_x210v3_130807.tar.bz2 3.配置:make x210_sd_config 4.出现C ...

  9. Day7 - G - Divisors POJ - 2992

    Your task in this problem is to determine the number of divisors of Cnk. Just for fun -- or do you n ...

  10. Java中null的判断

    Java中空指针的异常十分常见 if (name != null && !name.equals("")) { //do something } 或者 if (!& ...