首页 > Storage > GlusterFS 安装及配置
2020
03-02

GlusterFS 安装及配置

发现自己这个存储页面好空,我又搞过一些内容,不管内容新旧了,贴出来给需要的人参考下吧。
PS:内容太老,仅供参考。

GlusterFS是一个(Cluster File System)分布式集群文件系统, 它的最大特点就是以 Brick (Dirctory) 为节点。具有强大的线性横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。

安装配置环境:
CentOS5.7
Client:192.168.1.100
Server1:192.168.1.101
Server2:192.168.1.102

一:安装GlusterFS

安装DAG RPM Repository的更新包, DAG RPM Repository下载页面为 rpmforge-release 安装方式:

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

GlusterFS需要fuse支持库,需先安装:

yum -y install fuse fuse-devel httpd-devel libibverbs-devel
yum -y install flex bison

下载GlusterFS安装包,最新版本在这里:glusterfs_lastest

wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/glusterfs-3.3.0.tar.gz
tar -zxvf glusterfs-3.3.0.tar.gz
cd glusterfs-3.3.0
./configure

如果报如下错误,请按照 这篇文章对Python进行升级,将Python升级到3.0以上的版本不行,可使用V2.6.5

configure: error: python does not have ctypes support
make && make install
glusterfs -V

glusterfs 3.3.0 built on Oct  8 2012 20:54:37
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc.
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
启动glusterd daemon的命令是
service glusterd start

停止glusterd daemon的命令是
service glusterd stop

以上便完整了3台机器的GlusterFS安装,接下来就是对这3台机器进行配置了。

二:配置Server
编辑Server1和Server2的配置文件glusterfsd.vol的内容

vi /usr/local/etc/glusterfs/glusterfsd.vol

以下的配置内容是配置成复制中继(关于中继的介绍在后面)

# 指定一个卷,路径为/data/gluster,作为服务器文件
volume brick
type storage/posix
option directory  /data/gluster
end-volume
# 设置卷brick为锁中继(关于中继在附录中介绍)
volume locker
type features/posix-locks
subvolumes brick
end-volume
设置卷brick为服务器模式,并指定IP和检测端口,同时设置卷的使用权限为(全部授权),也可以设置成部分授权,如:192.168.1.*
volume server
type protocol/server
option transport-type tcp/server
option bind-address 192.168.1.101 #Server2时IP配置为: 192.168.1.102
option listen-port 6996
subvolumes locker
option auth.addr.brick.allow *
option auth.addr.locker.allow *
end-volume

三:配置Client
编辑Client的配置文件glusterfs.vol的内容

vi /usr/local/etc/glusterfs/glusterfs.vol

配置内容如下

# 指向Server1:192.168.1.101服务器的客户端访问配置
volume client1
type    protocol/client
option  transport-type  tcp/client
option  remote-host  192.168.1.101
option  transport.socket.remote-port 6996
option  remote-subvolume locker
end-volume
# 指向Server2:192.168.1.102服务器的客户端访问配置
volume client2
type      protocol/client
option    transport-type  tcp/client
option    remote-host  192.168.1.102
option    transport.socket.remote-port 6996
option    remote-subvolume locker
end-volume
# 将client1和client2设置成复制模式
volume bricks
type cluster/replicate
subvolumes client1 client2
end-volume

四:启动
启动Server1和Server2,可以到/tmp/glusterfsd.log里查看启动信息

glusterfsd -f /usr/local/etc/glusterfs/glusterfsd.vol -l /tmp/glusterfsd.log

启动Client,可以到/tmp/glusterfs.log里查看启动信息

mkdir /data/gluster
glusterfs -f /usr/local/etc/glusterfs/glusterfs.vol -l /tmp/glusterfs.log /data/gluster

启动完成后登入Client:192.168.1.100

cd /data/gluster
echo 'test' > test.txt

再进入Server1、Server2的/data/gluster发现文件都已经存入,大功告成。

GlusterFS常用的中继介绍

  1. storage/posix #指定一个本地目录给GlusterFS内的一个卷使用;
  2. protocol/server #服务器中继,表示此节点在GlusterFS中为服务器模式,可以说明其IP、守护端口、访问权限;
  3. protocol/client #客户端中继,用于客户端连接服务器时使用,需要指明服务器IP和定义好的卷;
  4. cluster/replicate #复制中继,备份文件时使用,若某子卷掉了,系统仍能正常工作,子卷起来后自动更新(通过客户端);
  5. cluster/distribute #分布式中继,可以把两个卷或子卷组成一个大卷,实现多存储空间的聚合;
  6. features/locks #锁中继,只能用于服务器端的posix中继之上,表示给这个卷提供加锁(fcntl locking)的功能;
  7. performance/read-ahead #预读中继,属于性能调整中继的一种,用预读的方式提高读取的性能,有利于应用频繁持续性的访问文件,当应用完成当前数据块读取的时候,下一个数据块就已经准备好了,主要是在IB-verbs或10G的以太网上使用;
  8. performance/write-behind #回写中继,属于性能调整中继的一种,作用是在写数据时,先写入缓存内,再写入硬盘,以提高写入的性能,适合用于服务器端;
  9. performance/io-threads #IO线程中继,属于性能调整中继的一种,由于glusterfs 服务是单线程的,使用IO 线程转换器可以较大的提高性能,这个转换器最好是被用于服务器端;
  10. performance/io-cache #IO缓存中继,属于性能调整中继的一种,作用是缓存住已经被读过的数据,以提高IO 性能,当IO 缓存中继检测到有写操作的时候,它就会把相应的文件从缓存中删除,需要设置文件匹配列表及其设置的优先级等内容;
  11. cluster/stripe #条带中继,将单个大文件分成多个小文件存于各个服务器中

说明:
设计目的:

  1. 集群设计虚拟机容量70-100台,占用1个机柜,全部由1U服务器组成,其中存储服务器6台,300G*8,节点服务器10台;
  2. 虚拟机可以在KVM集群宿主机之间迁移;
    glusterfs集群架构:
  3. 存储服务器和节点服务器组成,存储服务器通过哈希算法,可以弹性增加或者减少,并实现冗余;
  4. 存储服务器每台机器至少需要4块网卡,如果机器只有板载的2块网卡,需要在加1块双口网卡,做4块网卡的绑定,这样可以提高网络带宽;
  5. KVM集群每台宿主机作为glusterfs客户端,挂载glusterfs集群的文件系统,将虚拟机放置在上面;

glusterfs集群搭建:
存储节点搭建
1 安装相关组件

yum -y install wget fuse fuse-libs

2 下载安装测试

yum -y install wget fuse fuse-libs
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-debuginfo-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-devel-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-fuse-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-geo-replication-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-rdma-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-server-3.3.0-1.el6.x86_64.rpm
yum install glusterfs-* -y
/usr/sbin/glusterfs -V

3 启动glusterd服务

默认安装完成自动启动服务,安装完成后是一个标准的redhat服务,可以启动,停止,重启

/etc/init.d/glusterd start
/etc/init.d/glusterd stop
/etc/init.d/glusterd restart
chkconfig glusterd on

4 添加服务器到存储池

在第一台服务器上执行探测操作

gluster peer probe server1
gluster peer probe server2
gluster peer probe server3
gluster peer probe server4
gluster peer probe server5

校验集群状态

[root@hp246 ~]# gluster peer status
Number of Peers: 4
Hostname: server1
Uuid: 59cd74a9-a555-4560-b98e-a7eaf2058926
State: Peer in Cluster (Connected)
Hostname: server2
Uuid: 278d94f8-cf55-42cc-a4ad-9f84295c140b
State: Peer in Cluster (Connected)
Hostname: server3
Uuid: 7fd840a2-53f5-4540-b455-3e5e7eded813
State: Peer in Cluster (Connected)
Hostname: server4
Uuid: 4bfd8649-7f74-4a9f-9f04-4267cc80a1c3
State: Peer in Cluster (Connected)

如果需要移出集群 执行如下命令

gluster peer detach server

5 创建集群卷

1)创建一个分布卷(只是卷连接起来,跨区卷)

gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

2)创建一个复制卷(类似raid1)

gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2

3)创建一个条带卷(类似raid0)

gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2

4)创建一个分布条带卷(类似raid0+0)

gluster volume create test-volume stripe 4 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8

5)创建一个复制条带卷(类似raid1然后跨区)

gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

6)创建一个分部复制条带卷(类似raid10)

gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7server8:/exp8

7)创建条带复制卷(类似raid01)

gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

查看卷信息

gluster volume info

启动卷

gluster volume start test-volume

6 客户端挂载

modprobe fuse
Verify that the FUSE module is loaded:
# dmesg | grep -i fuse
fuse init (API version 7.13)
yum -y install wget fuse fuse-libs
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-debuginfo-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-devel-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-fuse-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-geo-replication-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-rdma-3.3.0-1.el6.x86_64.rpm
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-server-3.3.0-1.el6.x86_64.rpm
yum install glusterfs-* -y

挂载卷

mount -t glusterfs server1:/test-volume /mnt/glusterfs
mount -t glusterfs hp246:/test-volume /gfs

自动挂载

vim fstab
server1:/test-volume /mnt/glusterfs glusterfs defaults,_netdev 0 0

今天测试glusterfs的时候创建存储组老是提示”/data” or a prefix of it is already part of a volume
心想之前用/data分区测试过,我删除数据试试看,接着创建gluster volume create replicate-stripe replica。。。
还是尼玛already part of a volume,奇了怪了。果断google还真是个坑爹的bug:https://bugzilla.redhat.com/show_bug.cgi?id=812214

后来在一国外大神的blog找到的解决方法:http://joejulian.name/blog/glusterfs-path-or-a-prefix-of-it-is-already-part-of-a-volume/

话说之前测试glusterfs hang住也是在他blog看到的解决方法。
问题搞定了。

在这里我自己搞了个简便的方法:

cd $datapath
for i in <code>attr -lq .</code>; do setfattr -x trusted.$i .; done
最后编辑:
作者:王, 帅
这个作者貌似有点懒,什么都没有留下。

留下一个回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据