使用文件存储

挂载文件系统

应用程序可以通过POSIX方式使用UDB-TO提供的存储服务,用户需要在应用端安装部署udbto-client应用,可以在部署集群时安装,也可以单独复制一份client文件夹到应用端。

在启动udbto-client程序之前需要配置client.conf文件。

client.conf示例

{
	"masterAddr":   "192.168.2.160:15010,192.168.2.161:15010,192.168.2.185:15010",
	"mountPoint":   "/data/udbto/mountpoint",
	"volName":      "udbtovol",
	"owner":        "udbtovol",
	"logDir":       "/data/udbto/client/log",
	"logLevel":     "warn",
	"accessKey":	"**********",
    "secretKey":	"*********",
	"rdonly":       false,
	"exporterPort": 15450,
	"profPort":     "15410",
}

在应用中,需要根据实际情况调整参数,比如mountPoint、volName、owner参数。当owner为卷的所有者时,不需要填写accessKey和secretKey,如果owner为授权用户时,则必须填写用户的accessKey和secretKey。

配置文件中各参数的含义如下表所示:

参数 类型 含义 必需
mountPoint string 挂载点 是
volName string slice 卷名称 是
owner string 卷所有者 是
accessKey string 卷所属用户的鉴权密钥 是
secretKey string 卷所属用户的鉴权密钥 是
masterAddr string master节点地址 是
rdonly bool 以只读方式挂载,默认false 否
logDir string 日志存放路径 否
logLevel string 日志级别:debug, info, warn,error 否
profPort string golang pprof调试端口 否

其他配置参数可根据实际场景需要进行设置:

参数 类型 含义 必需
exporterPort string prometheus获取监控数据端口 否
consulAddr string 监控注册服务器地址 否
lookupValid string 内核FUSE lookup有效期,单位:秒 否
attrValid string 内核FUSE attribute有效期,单位:秒 否
icacheTimeout string 客户端inode cache有效期,单位:秒 否
enSyncWrite string 使能DirectIO同步写,即DirectIO强制数据节点落盘 否
autoInvalData string FUSE挂载使用AutoInvalData选项 否
writecache bool 利用内核FUSE的写缓存功能,需要内核FUSE模块支持写缓存,默认为false 否
keepcache bool 保留内核页面缓存。此功能需要启用writecache选项,默认为false 否
token string 如果创建卷时开启了enableToken,此参数填写对应权限的token 否
readRate int 限制每秒读取次数,默认无限制 否
writeRate int 限制每秒写入次数,默认无限制 否
followerRead bool 从follower中读取数据,默认为false 否
disableDcache bool 禁用Dentry缓存,默认为false 否
fsyncOnClose bool 文件关闭后执行fsync操作,默认为true 否
maxcpus int 最大可使用的cpu核数,可限制client进程cpu使用率 否
enableXattr bool 是否使用xattr,默认是false 否
enableBcache bool 是否开启本地一级缓存,默认false 否
maxStreamerLimit string 开启本地一级缓存时,文件元数据缓存数目 否
bcacheDir string 开启本地一级缓存时,需要开启读缓存的目标目录路径 否

需要注意的是,udbto-client一个实例只能服务一个卷,如果应用需要同时访问多个卷,则需要启动多个udbto-client服务,方法是复制多份client文件夹,文件夹使用不同的名称,每个文件夹下的 client.conf 文件根据实际使用的卷的参数进行修改,然后再分别启动不同文件夹下的udbto-client服务。

另外,需要确保 udbto-client 与 整个集群之间的网络能够互通,最好在一个局域网内部,不支持双方在NAT设备后面,否则会导致udbto-client无法接入到集群。

挂载成功后,可以通过df -h 查看文件系统已经被挂载,如下面的udbto-udbtovol卷已经挂载到/data/udbto/mountpoint:

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.1G     0  3.1G   0% /dev
tmpfs           3.4G     0  3.4G   0% /dev/shm
tmpfs           3.4G   15M  3.4G   1% /run
tmpfs           3.4G     0  3.4G   0% /sys/fs/cgroup
/dev/vda2        39G   22G   15G  60% /
tmpfs           3.4G  320K  3.4G   1% /tmp
/dev/vda1      1022M  6.5M 1016M   1% /boot/efi
/dev/vdb        492G  3.7G  463G   1% /data
tmpfs           682M     0  682M   0% /run/user/0
udbto-udbtovol   10G  2.7G  7.4G  27% /data/udbto/mountpoint

卸载文件系统

执行如下命令卸载副本卷:

// 根据实际挂载路径选择
umount -l /data/udbto/mountpoint

读写文件

文件系统mount到/data/udbto/mountpoint后,就可以把/data/udbto/mountpoint当作一块本地磁盘进行读写了,执行如下命令来验证系统是否工作正常:

cp file.zip /data/udbto/mountpoint/ 拷贝本地文件file.zip到卷udbtovol中
cp /data/udbto/mountpoint/file.zip ./file_new.zip 从卷中拷贝文件到当前目录的file_new.zip文件

开启一级缓存【可选】

部署在用户客户端的本地读cache服务,对于数据集有修改写,需要强一致的场景不建议使用。

执行以下命令开启服务:

./udbto-bcache -c bcache.conf

bcache.conf示例

{
	"cacheDir":     "/data/udbto/client/cache:1073741824",
	"vol":  "udbtovol",
	"cluster":      "udbto",
	"logDir":       "/data/udbto/client/cache/cachelog",
	"logLevel":     "warn"
}

配置文件中各参数的含义如下表所示:

参数 类型 含义 必须
cacheDir string 缓存数据的本地存储路径:分配空间(单位Byte) ,可用的缓存空间越大越好 是
vol string 需要缓存的卷名 是
cluster string 卷所在集群名称 是
logDir string 日志路径 是
logLevel string 日志级别 是

部署缓存后,客户端需要在client.conf中增加以下挂载参数,重新启动挂载后缓存才能生效。

{
	"enableBcache":   true,
	"bcacheDir":  "/data/udbto/mountpoint",
	"maxStreamerLimit":   "1024"
}