配置 EOS 使用 QuarkDB 作为 NS
QuarkDB 被设计用来作为 EOS 下一代的 Namespace. 要使用 QuarkDB, EOS 版本必须是 4.4.0 以上. 目前 (2018.11.1
) EOS 稳定版本是 4.3.12
, github 上的版本则到了 4.4.10. 要安装 4.4.0 以上版本, 可以从 EOS 的 commit 源安装. 本文主要参考 Namespace in QuarkDB configuration.
Table of Contents
搭建一个 QuarkDB 集群
为了使用 QuarkDB 作为 EOS MGM 的 namespace, 我们首先要搭建一个 QuarkDB 集群, 可以参考 搭建并运行管理 QuarkDB 集群) 安装好 QuarkDB 并搭建好一个有三个 quardb node 如 qdb-1:7777
, qdb-2:7777
, qdb-3:7777
的集群.
配置 EOS MGM 使用 QuarkDB
要将 MGM 服务与 QuarkDB 整合到一起, 我们要对 /etc/xrd.cf.mgm
做一些修改.
- 修改
mgm.nslib
指令, 导入 Namespace 的 QuarkDB 实现.
1 | mgm.nslib /usr/lib64/libEosNsQuarkdb.so |
- 列出 MGM 进程连接的 QuarkDB 集群的端点.
1 | mgmofs.qdbcluster qdb-1:7777 qdb-2:7777 qdb-3:7777 |
- 如果 QuarkDB 启用了密码认证, 则要修改以下选项:
1 | mgmofs.cfgtype quarkdb |
其中 /etc/qdb.passwd
是 QuarDB 的密码文件.
4. 以 master
模式运行 MGM 服务.
1 | $ systemctl start eos@master |
- 如果一切正常, 可以看到如下一些进程.
1 | $ ps aux|grep xrootd |
在生产环境下, 为了有更好的性能, 应该:
- QuarkDB 集群服务 和 MGM 服务运行在不同的节点上.
- 至少 QuarkDB 主进程的
/var/lib/quarkdb/
文件夹应存储到 SSD 分区.
内存 NS 到 QuarkDB NS 的转化
使用 eos-log-compact
工具压缩 Changelog 文件:
1 | $ eos-log-compact /var/eos/md/file.mdlog /var/eos/md/compacted_file.mdlog |
压缩需要将 namespace 整体加载到内存中, 因此压缩 log 的机器必须有足够大的内存来保存 namespace 数据结构. 为了更好的性能, 建议 changelog 文件也应该存储在 SSD
分区.
为了加速初始的导入, QuarkDB 有一个特殊的 bulkload
配置模式, 在这种模式下, 我们期待只做的就是向后端写入, QuarkDB 中的数据压缩只发生在导入最后阶段. 因此减少了I/O次数,加速了整个过程.
使用 quarkdb-create
工具创建一个压缩用 QuarkDB 集群, 下面是一个 QuarkDB 配置文件的例子:
1 | xrd.port 7777 |
启动 QuarkDB 集群后, 我们可以使用 eos-ns-convert
工具来进行实际的 namespace 转换过程:
1 | $ eos-ns-convert /var/eos/md/compacted_file.mdlog /var/eos/md/compacted_directory localhost 7777 |
eos-ns-convert
必须使用压缩后的 changelog 文件作为输入.
等 bulkload
完成后, 就可以关掉 QuarkDB 实例, 然后使用 quarkdb-create
在不同的位置建一个新的 QuarkDB 目录, 列出组建 QuarkDB 集群的节点. 新建的 QuarkDB raft-journal
目录可以删除掉. 存储在 /var/lib/quarkdb/convert
的 raft 日志可以利用 cp/scp/rsync
等等复制到新的 QuarkDB 集群的所有实例上. 确保 QuarkDB 集群是运行在 raft 模式而不是 bulkload 模式. 复制完成后, QuarkDB 集群所有实例就可以启动了, 系统会很快达到一个主节点多个副本节点的稳定配置状态.