Glusterfs volume 的三种挂载方式

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

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

[[email protected] ~]# 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
[[email protected] ~]# gluster volume start repvol
volume start: repvol: success
[[email protected] ~]# 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

[[email protected] ~]# yum install -y glusterfs glusterfs-fuse
[[email protected] ~]# mount -t glusterfs node01.lab.example.com:repvol /mnt
[[email protected] ~]# 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的使用。

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

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

2 NFS

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

[[email protected] /]# 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

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

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

[[email protected] ~]# 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

放开防火墙限制

[[email protected] ~]# firewall-cmd --add-service=nfs --add-service=rpc-bind
success

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

[[email protected] /]# mount -t nfs node01.lab.example.com:repvol /mnt
[[email protected] /]# 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

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

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

[[email protected] ~]# yum install -y samba
[[email protected] ~]# systemctl start smb
[[email protected] ~]# firewall-cmd --add-service=samba

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

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

option rpc-auth-allow-insecure on

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

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

[[email protected] ~]# 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

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

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

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

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

[[email protected] ~]# yum install -y cifs-utils
[[email protected] ~]# yum install -y samba-client*

验证samba共享目录

[[email protected] ~]# 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进行挂载

[[email protected] ~]# 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进行安装

再次尝试挂载

[[email protected] ~]# 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日志,发现

[[email protected] samba]# cd /var/log/samba/
[[email protected] 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这里的设置还没有研究出该怎么配置,先记在这里。

[[email protected] samba]# setenforce 0
[[email protected] ~]# mount -t cifs //node01.lab.example.com/gluster-repvol /mnt -o username=smbuser,password=redhat
[[email protected] ~]# df -h | grep mnt
//node01.lab.example.com/gluster-repvol  2.0G   33M  2.0G   2% /mnt
[[email protected] ~]#
时间: 2024-10-25 08:15:18

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

lamp平台三种实现方式

lamp平台的安装实现方式分为三种:rpm包的方式安装,以模块的方式编译安装,以fpm方式工作编译安装的php. 一.rpm包安装php: 在CentOS 6.5系统上以rpm包的方式安装httpd,php,mysq是最容易的一种,php在这种情况下做为httpd的模块来运行,在安装完php对应的rpm包以后,可以在httpd的配置文件目录中查看到php.conf文件,配置文件中定义了加载php模块对应的库文件的定义.当httpd启动进程响应客户的请求时,如果客户端请求的是php页面文件,那么h

CSS的三种定位方式介绍(转载)

在CSS中一共有N种定位方式,其中,static ,relative,absolute三种方式是最基本最常用的三种定位方式.他们的基 本介绍如下. static默认定位方式relative相对定位,相对于原来的位置,但是原来的位置仍然保留absolute定位,相对于最近的非标准刘定位,原来的位置消失,被后边的位置所顶替 下面先演示相对定位的案例 [html] view plain copyprint? <!DOCTYPE html> <html> <head> <

MyEclipse中web服务器的三种配置方式

初学Javaweb开发的人们都会遇到一个问题,就是服务器环境的搭建配置问题.下面介绍三种服务器的搭建方式. 直接修改server.xml文件 当你写了一个web应用程序(jsp/servlet),想通过浏览器直接去访问这个页面,需要在Tomcat中配置相关路径: 找到Tomcat下conf目录,你会看到有个server.xml,即服务器配置文件.用文本编译器打开,拉到Host标签,在它结束前加上我们的应用程序路径: <Context path="/HelloWeb" docBas

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

SQL Server 中的三种分页方式

USE tempdb GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassB', N'U') IS NOT NULL DROP TABLE ClassB GO CREATE TABLE ClassB(ID INT PRIMARY KEY, Name VARCHAR(16), CreateDate DATETIME, AID INT, Status INT) CREATE INDEX IDX_CreateDate ON ClassB(CreateDate)

支付宝5月4日起将停止收款主页业务 保留三种收款方式

4月28日消息,支付宝近日发布公告称,将于5月4日起停止收款主页业务(产品功能将无法使用),但并未公布停止业务的具体信息. 据了解,收款主页业务是用户可以自己制作一个支付宝账号的链接,把这个链接发给付款人后,对方就可以输入金额给该用户付款. 支付宝收款主页截图 支付宝公告称,收款主页业务停止之后,用户可以有三种方式进行收款:生成专属支付宝收款账户码,将账户二维码图片分享出去:在电脑上使用我要收款:在手机上,使用支付宝钱包的我要收款. 以下为公告原文: 鉴于收款主页(https://me.alip

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--

使用JavaScript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

数组的三种定义方式

// 数组的三种定义方式 var arr = ['zhangsan','lisi','wangwu']; var arr1 = new Array('zhangsan','lisi','wangwu'); var arr2 = new Array(3); arr2[0] = 'zhangsan'; //注意:下标一定要写,不像在php中,下标是可以不写,是一直追加 // console.log(arr2); // 说明:js中,没有关联数组一说,数组下标都是数字 // 如果一个数组的下标是自定义