0%

SequoiaDB之NFS文件系统部署与应用开发

SequoiaDB文件系统引擎概述

  • SequoiaFS 文件系统是 SequoiaDB 巨杉数据库基于 FUSE 在 Linux 系统下实现的一套文件系统,支持通用的文件操作 API。
  • 用户可以通过 SequoiaFS 将本地目录挂载到 SequoiaDB 的目标集合,在挂载目录下可以使用通用文件系统 API 对文件和目录进行操作。SequoiaFS 使用 SequoiaDB 的元数据集合存储文件和目录的属性,使用大对象(LOB)存储文件的内容,实现类似 NFS 的分布式网络文件系统。

img

创建集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 中创建测试用的集合空间和集合 fscs.fscl,用于存放存储在巨杉数据库中的文件系统文件。

1)通过 Linux 命令行进入 SequoiaDB Shell;

1
sdb

2)通过 javascript 语言连接协调节点,获取数据库连接;

1
var db = new Sdb("localhost", 11810);

3)创建 fs_domain 逻辑域;

1
db.createDomain("fs_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );

4)创建 fscs 集合空间;

1
db.createCS("fscs", { Domain: "fs_domain" } );

5)创建 fscl 集合;

1
db.fscs.createCL("fscl", { "ShardingKey": { "_id": 1}, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );

6)退出 SequoiaDB Shell;

1
quit;

检查FUSE版本

  1. 查看是否安装 FUSE

    1
    # which fusermount

    复制

  2. 查看 FUSE 版本号

    1
    # fusermount --version

    复制

注意:

若未安装 FUSE 或 FUSE 版本号低于 2.8.6,需进行 FUSE安装

FUSE安装

CentOS 7、Red Hat 7、SUSE 11.3 和 Ubuntu 14 及其以上版本的操作系统可参考包管理器安装,其他系统可参考源码安装或尝试其他方式自行安装。

  • 对于 CentOS 7/Red Hat 7 及其更高版本系统:

    1
    # yum install fuse

    复制

  • 对于 SUSE 11.3 及其更高版本系统:

    1
    # zypper install fuse

    复制

  • 对于 Ubuntu 14 及其更高版本系统:

    1
    # apt-get install fuse

创建挂载点及配置文件

SequoiaFS 实例将集合 fscl 通过映射的方式挂载到 /opt/sequoiadb/sequoiafs/mountpoint 目录,从而在挂载目录下实现通过通用文件系统 API 对文件和目录进行操作。

1)创建挂载点 mountpoint;

1
mkdir -p /opt/sequoiadb/sequoiafs/mountpoint

2)以 sdbadmin 用户登录,创建sequoiafs的配置文件目录和日志目录;

1
2
mkdir -p /opt/sequoiadb/sequoiafs/conf/fscs_fscl/001/
mkdir -p /opt/sequoiadb/sequoiafs/log/fscs_fscl/001/

3)生成一个空的配置文件,SequoiaFS 服务在启动时会将指定的值写入该文件中,其他参数使用缺省值;

1
touch /opt/sequoiadb/sequoiafs/conf/fscs_fscl/001/sequoiafs.conf

启动 SequoiaFS 服务

启动服务之后 mountpoint 目录下的所有文件信息会存放在远程数据库节点上,可以在数据库的目录元数据集合及文件元数据集合中查看,文件内容会以 LOB对象 的形式存放在目标集合下。

1
sequoiafs /opt/sequoiadb/sequoiafs/mountpoint -i localhost:11810 -l fscs.fscl --autocreate -c /opt/sequoiadb/sequoiafs/conf/fscs_fscl/001/ --diagpath  /opt/sequoiadb/sequoiafs/log/fscs_fscl/001/ -o big_writes -o max_write=131072 -o max_read=131072

Note:

指定数据库的协调节点通过 -i (或 –hosts) 进行指定; 目录元数据集合可以通过 -d (或–metadircollection) 进行指定;
文件元数据集合可以通过 -f (或–metafilecollection) 进行指定;
以上参数可以直接通过指定–autocreate默认生成,该例指定默认生成;
挂载目录时,除了目标集合collection外,还需要指定一系列参数,具体参数选项详情请查看选项。SequoiaFS 实例参数配置

查看挂载目录和和底层存储信息

上一小节已经完成了目录的挂载,接下来我们对挂载的信息和 SequoiaDB 巨杉数据库的底层数据进行查看,确认在巨杉数据库底层是否已经自动生成与挂载相关的信息相关的集合。

1)本地 SequoiaFS 节点通过 mount 可以看到挂载信息;

1
mount

操作截图:

图片描述

可以看到 /opt/sequoiadb/sequoiafs/mountpoint 已经通过 sequoiafs 已经挂载上了,文件系统类型为 fuse.sequoiafs。

2)通过 Linux 命令行进入 SequoiaDB Shell ,在 SequoiaDB 节点可以查看相关挂载信息;

1
sdb

3)通过 javascript 语言连接协调节点,获取数据库连接;

1
var db = new Sdb("localhost", 11810);

4)查看创建的集合信息

1
db.list(SDB_LIST_COLLECTIONS);

操作截图:

图片描述

5)sequoiafs.maphistory 为映射挂载历史信息表,记录历史挂载的关键数据信息。

1
db.sequoiafs.maphistory.find();

操作截图:

图片描述

Note:

  • 对于每次 mount,可以通过 sequoiafs.maphistory 查看映射挂载历史信息。
  • 历史信息记录中描述说明:SourceCL:目标映射集合名称,DirMetaCL:目录元数据集合名称,FileMetaCL:文件元数据集合名称,Address:FS节点地址,MountPoint:FS节点挂载时的目录。
  • sequoiafs.fscl_dir 和 fscl_file 分别为目录和文件的元数据集合表,由于 SequoiaFS 启动挂载时指定了–autocreate,所以这里是默认生成的,用以记录 FS 挂载目录下的目录和文件信息。

6)退出 SequoiaDB Shell;

1
quit;

挂载目录下文件、目录操作

使用 Linux 命令直接在挂载的目录进行文件和目录的操作。

创建目录

进入到 /opt/sequoiadb/sequoiafs/mountpoint/ 中,创建目录 fsdir 并查看。

1)进入挂载目录;

1
cd /opt/sequoiadb/sequoiafs/mountpoint/

2)创建目录;

1
mkdir fsdir

3)查看目录是否存在;

1
ls -trl

创建文件并写入内容

进入到 /opt/sequoiadb/sequoiafs/mountpoint/fsdir 中,创建文件 fsfile 并写入内容。

1)进入创建的 fsdir 目录;

1
cd /opt/sequoiadb/sequoiafs/mountpoint/fsdir

2)使用 echo 重定向内容创建文件;

1
echo 'hello, this is a fsfile!' >> fsfile.txt

3)查看文件内容是否存在;

1
cat fsfile.txt

查看挂载目录创建的文件及存储内容

确认在本地 FS 节点进行操作的文件是否已经存储在了对应的集合空间下。

1)通过 Linux 命令行进入 SequoiaDB Shell;,查看文件和目录是否在 SequoiaDB 数据库存储引擎中存储情况;

1
sdb

2)通过 javascript 语言连接协调节点,获取数据库连接;

1
var db = new Sdb("localhost", 11810);

3)查看数据库中文件存储情况;

1
db.sequoiafs.fscl_file142361856883863522.find();

操作截图: 图片描述

4)查看数据库中目录存储情况;

1
db.sequoiafs.fscl_dir142361856883863522.find();

操作截图: 图片描述

Note:

fscl_file142361856883863522,fscl_dir142361856883863522是自动产生的,有可能和课程中产生的不一样,可以使用: db.list(SDB_LIST_COLLECTIONS)查看。

5)查看集合中的 LOB 信息, 文件已经保存为一条 LOB 记录

1
db.fscs.fscl.listLobs();

操作截图: 图片描述

6)退出SequoiaDB Shell;

1
quit;

创建 JAVA 工程项目

本小节学习使用 JAVA 开发语言对挂载后的目录进行创建目录和复制文件的操作。

1)创建 JAVA 工程目录;

1
mkdir -p /home/sdbadmin/nfs

2)进入工程目录;

1
cd /home/sdbadmin/nfs

4)复制以下代码到实验环境终端执行生成 CopyFile.java 文件,用于操作 NFS 文件系统;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
cat > /home/sdbadmin/nfs/CopyFile.java << EOF
package com.sequoiadb.samples;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFile {

public static void main(String[] args) throws IOException {

// 创建目录
File dir = new File("/opt/sequoiadb/sequoiafs/mountpoint/fsdir/cpdir");
if (!dir.exists()) {
dir.mkdirs();
System.out.println("Directory created successfully");
} else {
System.out.println("Directory already exists");
}

// 复制文件到新目录
File source = new File("/opt/sequoiadb/sequoiafs/mountpoint/fsdir/fsfile.txt");
File dest = new File("/opt/sequoiadb/sequoiafs/mountpoint/fsdir/cpdir/fsfile.txt");
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(source);
output = new FileOutputStream(dest);
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) != -1) {
output.write(buf, 0, bytesRead);
}
System.out.println("File copied successfully");
} finally {
input.close();
output.close();
}
}

}
EOF

4)查询是否已经生成 CopyFile.java 文件;

1
ls -trl /home/sdbadmin/nfs/CopyFile.java

编译运行代码

上一小节已经创建了 JAVA 工程和代码,接下来我们对代码进行编译运行。

1)编译 Select.java 文件;

1
javac -d . CopyFile.java

2)运行 Select 类代码,查询数据;

1
java -cp .:./lib/* com.sequoiadb.samples.CopyFile

操作截图:

图片描述

3)检查复制后的文件内容;

1
cat /opt/sequoiadb/sequoiafs/mountpoint/fsdir/cpdir/fsfile.txt

操作截图:

图片描述

-------------本文结束感谢您的阅读-------------