使用文件存储
挂载文件系统
应用程序可以通过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"
}