使用文件存储

挂载文件系统

应用程序可以通过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"
}