数据加速器 GooseFS GooseFS-FUSE 工具

GooseFS-FUSE 可以在一台 Unix 机器上的本地文件系统中挂载一个 GooseFS 分布式文件系统。通过使用该特性,一些标准的命令行工具(例如 ls、cat 以及 echo)可以直接访问 GooseFS 分布式文件系统中的数据。此外更重要的是使用不同语言实现的应用程序,例如 C、C++、Python、Ruby、Perl、Java 都可以通过标准的 POSIX 接口(例如 open、write、read)来。

相关产品
数据加速器 GooseFS 产品页,含版本规格、价格与购买入口。

GooseFS-FUSE 是基于 FUSE 这个项目,并且都支持大多数的文件系统操作。但是由于 GooseFS 固有的属性,例如它的一次性、不可改变的文件数据模型,该挂载的文件系统与 POSIX 标准不完全一致,尚有一定的局限性。因此,请先阅读 局限性,从而了解该特性的作用以及局限。

一、安装要求

·JDK 1.8及以上

·Linux 系统:libfuse 2.9.3及以上(可以使用 2.8.3版本,但会提示一些警告)

·MAC 系统:osxfuse 3.7.1及以上

二、挂载 GooseFS-FUSE

完成配置以及启动 GooseFS 集群后,在需要挂载 GooseFS 的节点上启动 Shell,并进入 $GOOSEFS_HOME 目录执行以下命令:

$ integration/fuse/bin/goosefs-fuse mount mount_point [GooseFS_path]

该命令会启动一个后台 Java 进程,用于将对应的 GooseFS 路径挂载到 <mount_point> 指定的路径。例如以下命令,将 GooseFS 路径 /people 挂载到本地文件系统的 /mnt/people 目录下。

$ integration/fuse/bin/goosefs-fuse mount /mnt/people /peopleStarting goosefs-fuse on local host.goosefs-fuse mounted at /mnt/people. See /lib/GooseFS/logs/fuse.log for logs

当 GooseFS_path 没有给定时,GooseFS-FUSE 会默认挂载到 GooseFS 根目录下(/)。你可以多次调用该命令,将 GooseFS 挂载到不同的本地目录下。所有的 GooseFS-FUSE 会共享 $GOOSEFS_HOME\\logs\\fuse.log 日志文件。该日志文件对于错误排查很有帮助。

注意:<mount_point> 必须是本地文件系统中的一个空文件夹,并且启动 GooseFS-FUSE 进程的用户拥有该挂载点及对其的读写权限。

三、卸载 GooseFS-FUSE

卸载 GooseFS-FUSE 时,需在该节点上启动 Shell,并进入$GOOSEFS_HOME 目录执行以下命令:

$ integration/fuse/bin/goosefs-fuse umount mount_point

该命令将终止 goosefs-fuse java 后台进程,并卸载该文件系统。例如:

$ integration/fuse/bin/goosefs-fuse umount /mnt/peopleUnmount fuse at /mnt/people (PID: 97626).

默认情况下,如果有任何读写操作未完成,unmount 操作会等待最多120s。如果120s后读写操作仍未完成,那么 Fuse 进程会被强行结束,这会导致正在读写的文件失败,你可以添加 -s 参数来避免 Fuse 进程被强行结束。例如:

$ ${GOOSEFS_HOME}/integration/fuse/bin/goosefs-fuse unmount -s /mnt/people

四、检查 GooseFS-FUSE 是否在运行

罗列所有的挂载点,需在该节点上启动 Shell,并进入 $GOOSEFS_HOME 目录执行以下命令:

$ integration/fuse/bin/goosefs-fuse stat

该命令会输出包括 pid、mount_point、GooseFS_path 在内的信息。

例如输出可以是以下格式:

$ pid mount_point GooseFS_path80846 /mnt/people /people80847 /mnt/sales /sales

五、Goosefs-FUSE 目录结构

conf 目录下:

·masters:master 服务器的 IP 配置文件

·workers:worker 服务器的 IP 配置文件

·goosefs-site.properties:goosefs 配置文件

·libexec:goosefs-fuse 运行依赖的 lib 库文件

·goosefs-fuse-1.2.0:goosefs-fuse 后台运行的 jar 包

·log:日志目录

六、可选配置

GooseFS-FUSE 基于标准的 GooseFS-core-client-fs 进行操作。如果你希望它像使用其他应用的 client 一样,自定义该 GooseFS-core-client-fs 的行为。

可通过编辑 $GOOSEFS_HOME/conf/goosefs-site.properties 配置文件来更改客户端选项。

注意:所有的更改应该在 GooseFS-FUSE 启动之前完成。

七、局限性

目前,GooseFS-FUSE 支持大多数基这篇件系统的操作。然而,由于 GooseFS 某些内在的特性,你需要注意以下几点:

·文件只能顺序地写入一次,并且无法修改。这意味着如果要修改一个文件,你需要先删除该文件,然后再重新创建。例如当目标文件存在时,拷贝命令 cp 会失败。

·GooseFS 没有 hard-link 和 soft-link 的概念,所以不支持与之相关的命令,例如 ln。此外关于 hard-link 的信息也不在 ll 的输出中显示。

·只有当 GooseFS 的 GooseFS.security.group.mapping.class 选项设置为ShellBasedUnixGroupsMapping 的值时,文件的用户与分组信息才与 Unix 系统的用户分组对应。否则 chown 与 chgrp 的操作不生效,而 ll 返回的用户与分组为启动 GooseFS-FUSE 进程的用户与分组信息。

八、性能考虑

由于 FUSE 和 JNR 的配合使用,与直接使用原生文件系统 API 相比,使用挂载文件系统的性能会相对较差。

大多数性能问题的原因在于,每次进行 read 或 write 操作时,内存中都存在若干个副本,并且 FUSE 将写操作的最大粒度设置为128KB。其性能可以利用 kernel 3.15 引入的 FUSE 回写(write-backs)缓存策略从而得到大幅提高(但 libfuse 2.x 用户空间库目前尚不支持该特性)。

九、GooseFS-FUSE 配置参数

以下是 GooseFS-FUSE 相关的配置参数:

参数 默认值 描述
goosefs.fuse.cached.paths.max 500 定义内部 GooseFS-FUSE 缓存的大小,该缓存维护本地文件系统路径和 GooseFS 文件路径之间最常用的转换。
goosefs.fuse.debug.enabled false 允许 FUSE 调试输出,该输出会被重定向到 goosefs.logs.dir 指定目录中的 fuse.out 日志文件。
goosefs.fuse.fs.name goosefs-fuse FUSE 挂载文件系统使用的描述性名称。
goosefs.fuse.jnifuse.enabled true 使用 JNI-Fuse 库以获得更好的性能。 如果禁用,将使用 JNR-Fuse。
goosefs.fuse.shared.caching.reader.enabled false (实验性)使用共享 grpc 数据读取器,通过 GooseFS JNI Fuse 在多进程文件读取中获得更好的性能。块数据将缓存在客户端,因此 Fuse 进程需要更多内存。
goosefs.fuse.logging.threshold 10s 当花费的时间超过阈值时,记录 FUSE API 调用。
goosefs.fuse.maxwrite.bytes 131072 FUSE 写操作的粒度(bytes),注意目前 128KB 是 Linux 内核限制的上界。
goosefs.fuse.user.group.translation.enabled false 是否在 FUSE API 中将 GooseFS 的用户与组转化为对应的 Unix 用户与组。当设为 false 时,所有 FUSE 文件的用户与组将会显示为挂载 goosefs-fuse 线程的用户与组。

十、常见问题

缺少 libfuse 库文件,需要安装 libfuse。


·方式一
安装命令:

yum install fuse-devel

查看是否安装成功:

find / -name libfuse.so*

·方式二
更新旧版本 libfuse.so.2.9.2,安装步骤如下:

注意:在 CentOS 7安装 libfuse,CentOS 7默认安装的是 libfuse.so.2.9.2。

首先,下载 libfuse 源码,并编译生成 libfuse.so.2.9.7。

tar -zxvf fuse-2.9.7.tar.gzcd fuse-2.9.7/ && ./configure && make && make installecho -e '\\n/usr/local/lib' >> /etc/ld.so.confldconfig

其次,下载、编译及生成 libfuse.so.2.9.7 后,然后按照以下步骤进行安装替换。

1.1 执行以下命令,查找旧版本 libfuse.so.2.9.2 库链接。

find / -name libfuse.so*

1.2 执行以下命令,将 libfuse.so.2.9.7拷贝至旧版本库 libfuse.so.2.9.2 所在位置。

cp /usr/local/lib/libfuse.so.2.9.7 /usr/lib64/

1.3 执行以下命令, 删除旧版本 libfuse.so 库的所有链接。

rm -f /usr/lib64/libfuse.sorm -f /usr/lib64/libfuse.so.2

1.4 执行以下命令,建立与被删除旧版本链接类似的 libfuse.so.2.9.7 库链接。

ln -s /usr/lib64/libfuse.so.2.9.7 /usr/lib64/libfuse.soln -s /usr/lib64/libfuse.so.2.9.7 /usr/lib64/libfuse.so.2

赞 (0)
上一篇 4天前
下一篇 4天前