GlusterFS 文件系统
简介
SylixOS从3.5.1 内核起支持 GlusterFS 文件系统。GlusterFS 系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS 具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。
在 SylixOS 中,GlusterFS 的结构如下:
![](/assets/Y2fSb6PnMomrpXxOAcYc1BOmnlb-DxlSbPup.png)
服务端和客户端的基本功能由一组解析层(Translator/Xlator)构成。
- Fuse translator:处理 FUSE 请求与解析。
- DHT translator:将请求映射到文件或目录所在的正确的块中。
- AFR translator:处理复制卷类型的请求。
- PC(Protocol Client translator):处理客户端中的通讯请求。
- PS(Protocol server translator):处理服务端中的通讯请求。
- POSIX translator:处理 POSIX 接口解析。
服务器的搭建
下面以 SylixOS 为例为您介绍服务器的搭建过程。
服务器配置
下面以 2 台不同架构设备组成服务器:
架构 设备地址 AArch64 10.12.3.8/16 x86 10.12.2.250/16 磁盘初始化
将使用区域磁盘格式化为 TpsFS。
创建存储卷
分别在 2 台设备中创建以下目录。
/apps/data/brick1/gv1
启动 GlusterFS 服务
分别在 2 台设备中执行以下命令。
[root@sylixos:/root]# glusterd -p /var/run/glusterd.pid [root@sylixos:/root]# ps NAME FATHER STAT PID GRP MEMORY UID GID USER ---------------- ---------------- ---- ----- ----- ---------- ----- ----- ------ kernel <orphan> R 0 0 88KB 0 0 root glusterd <orphan> R 1 1 14496KB 0 0 root total vprocess: 2
通过 ps 可以看到服务已经启动。
配置信任池
以下命令在 1 台服务器中执行即可,对于不同的服务器请修改其中的目标 IP 地址。可以通过 status 查看当前是否完成建立。
[root@sylixos:/root]# gluster peer probe 10.12.3.8 peer probe: success [root@sylixos:/root]# gluster peer status Number of Peers: 1 Hostname: 10.12.3.8 Uuid: 67c0875a-bfde-11d3-a99c-eb93c48d8b67 State: Peer in Cluster (Connected)
创建存储卷
下面我们以分布式卷创建为例,请在 1 台服务器中执行以下命令:
[root@sylixos:/root]# gluster vol create gv1 10.12.2.250:/apps/data/brick1/gv1 10.12.3.8:/apps/data/brick1/gv1 force volume create: gv1: success: please start the volume to access data [root@sylixos:/root]# gluster vol info Volume Name: gv1 Type: Distribute Volume ID: 5eaa6684-476b-11ee-89f5-715e1eb16eab Status: Created Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: 10.12.2.250:/apps/data/brick1/gv1 Brick2: 10.12.3.8:/apps/data/brick1/gv1 Options Reconfigured: storage.fips-mode-rchecksum: on transport.address-family: inet nfs.disable: on
配置存储卷
SylixOS 客户端不支持 write-behind 特性,需要在服务端将其关闭。
gluster vol set gv1 performance.write-behind off
如果需要使用分布式卷(Distributed Volume),需要在服务端设置开启 readdir-ahead 功能,否则对 readdir 会造成影响。
gluster vol set gv1 performance.readdir-ahead on
启动存储卷
以下命令在 1 台服务器中执行即可。
[root@sylixos:/root]# gluster vol start gv1 volume start: gv1: success [root@sylixos:/root]# gluster vol info Volume Name: gv1 Type: Distribute Volume ID: 5eaa6684-476b-11ee-89f5-715e1eb16eab Status: Started Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: 10.12.2.250:/apps/data/brick1/gv1 Brick2: 10.12.3.8:/apps/data/brick1/gv1 Options Reconfigured: performance.readdir-ahead: on performance.write-behind: off storage.fips-mode-rchecksum: on transport.address-family: inet nfs.disable: on
通过任意的服务器均可查看卷的运行状态。
挂载存储卷
我们在 Debian 中挂载上述创建的分布式卷,请使用以下命令:
root@debian:~# glusterfs --process-name fuse --volfile-server=10.12.2.250 --volfile-id=gv1 /mnt/glusterfs root@debian:~# cd /mnt/glusterfs/ root@debian:/mnt/glusterfs# ls root@debian:/mnt/glusterfs#
当前的卷中没有内容,我们创建一些文件及目录:
root@debian:/mnt/glusterfs# tree .
.
├── a
│ ├── 1.txt
│ └── 2.txt
└── b
├── 3.txt
└── 4.txt
2 directories, 4 files
root@debian:/mnt/glusterfs# cat a/1.txt
aaa
root@debian:/mnt/glusterfs# cat a/2.txt
bbb
root@debian:/mnt/glusterfs# cat b/3.txt
ccc
root@debian:/mnt/glusterfs# cat b/4.txt
ddd
root@debian:/mnt/glusterfs#
回到我们的服务器中,可以查看到已经在存储卷中创建了对应的文件,由于是分布式卷,文件仅存在一份内容,没有冗余,如果是复制卷,则两处服务器中内容相同。
# 10.12.3.8
[root@sylixos:/apps/data/brick1/gv1]# ls
.glusterfs a b
[root@sylixos:/apps/data/brick1/gv1]# ls a/
[root@sylixos:/apps/data/brick1/gv1]# ls b
4.txt
[root@sylixos:/apps/data/brick1/gv1]# cat b/4.txt
ddd
[root@sylixos:/apps/data/brick1/gv1]#
# 10.12.2.250
[root@sylixos:/apps/data/brick1/gv1]# ls
.glusterfs a b
[root@sylixos:/apps/data/brick1/gv1]# ls a
1.txt 2.txt
[root@sylixos:/apps/data/brick1/gv1]# ls b
3.txt
[root@sylixos:/apps/data/brick1/gv1]# cat b/3.txt
ccc
[root@sylixos:/apps/data/brick1/gv1]#
客户端搭建
确认 FUSE 驱动状态
[root@sylixos:/root]# lsmod
NAME HANDLE TYPE GLB BASE SIZE SYMCNT
------------------------- ---------------- ------ --- ---------------- -------- ------
VPROC: kernel pid: 0 TOTAL MEM: 90112
+ xinput.ko 4e075300 KERNEL YES 8000009000 2454 1
+ xsiipc.ko 4e08c570 KERNEL YES 800000f000 5edc 14
+ xtimer.ko 4e08da10 KERNEL YES 8000004000 830 6
+ xfuse.ko 4e08f1c0 KERNEL YES 800001c000 72c4 1
total modules: 4
挂载方式
glusterfs --process-name fuse --volfile-server=10.12.3.20 --volfile-id=gv0 /mnt/glusterfs