QuarkDB 是一个由 CernIT-ST 部门开发的高可用的 键-值 存储的内存数据库, 其实现了 redis 命令集的一个小的子集. QuarkDB 建立在 rocksdb 之上, rocksdb 则是一个强一致性的嵌入式的 键-值存储系统.

QuarkDB的高可用性是由多副本节点和 raft 分布一致性算法保证的.

安装 QuarkDB

通过源安装

安装 QuarkDB 最简单的方式就是从源里进行安装. 如果运行的是 CentOS 7, 将如下内容保存到 quarkdb.repo, 放在 /etc/yum.repos.d下.

1
2
3
4
5
6
7
8
9
10
11
[quarkdb-stable]
name=QuarkDB repository [stable]
baseurl=http://linuxsoft.cern.ch/repos/quarkdb7-stable/x86_64/os
enabled=1
gpgcheck=False

[quarkdb-stable-debug]
name=QuarkDB repository [stable debug]
baseurl=http://linuxsoft.cern.ch/repos/quarkdb7-stable/x86_64/debug
enabled=1
gpgcheck=False

然后通过如下命令安装

1
sudo yum install -y quarkdb quarkdb-debuginfo

通过源码编译安装

  1. 下载源码包

    1
    2
    git clone https://gitlab.cern.ch/eos/quarkdb.git && cd quarkdb
    git submodule update --recursive --init
  2. 安装依赖包

    1
    sudo yum install -y expect jemalloc libzstd xrootd xrootd-client-libs xrootd-libs xrootd-selinux xrootd-server xrootd-server-libs
  3. 安装 devtoolset-7

    1
    yum install centos-release-scl && yum install devtoolset-7 && source /opt/rh/devtoolset-7/enable
  4. 编译测试安装 QuarkDB

    1
    2
    3
    4
    mkdir build && cd build
    cmake ..
    make
    ./test/quarkdb-tests

搭建 QuarkDB 集群

集群配置

假定我们在 qdb-1.example.com:7777, qdb-2.example.com:7777, qdb-3.example.com:7777 三台机器上部署 QuarkDB 集群, 确定集群的名字 --clusterID 可由 uuid 产生, 比如 0c01a140-b3ff-11e8-86bb-9cb6d0e634f1, 一个唯一的 clusterID 能够避免 集群节点误与其他集群交流.

首先,我们要在每一个节点上初始化数据库文件夹. 在每一个节点上运行如下命令:

1
quarkdb-create --path /var/lib/quarkdb/node-x --clusterID 0c01a140-b3ff-11e8-86bb-9cb6d0e634f1 --nodes qdb-1.example.com:7777 qdb-2.example.com:7777 qdb-3.example.com:7777

其中 x 表示节点 id, 每个节点上的命令都要保持 --clusterID--nodes 一直.

修改 数据库文件夹权限:

1
sudo chown -R xrootd:xrootd /var/lib/quarkdb/node-x

QuarkDB 使用 XrootD 作为通信后端, 所以其配置跟 EOS 等类似. 每个节点上的配置文件如下( raft 模式)

1
2
3
4
5
xrd.port 7777
xrd.protocol redis:7777 libXrdQuarkDB.so
redis.mode raft
redis.database /var/lib/quarkdb/node-x
redis.myself qdb-x.example.com:7777

将其保存到 /etc/xrootd/xrootd-quarkdb.cfg, 然后通过 systemd 启动 quarkdb 实例

1
sudo systemctl enable --now xrootd@quarkdb

log 文件是 /var/log/xrootd/quarkdb/xrootd.log.

运行 QuarkDB 集群

为了正常运行 QuarkDB 集群, 必须有大多数(或法定数(quorum)) 的节点正常可使用, 例如 3个至少有2个, 5个至少有3个,7个至少有4个.

启动集群中大部分节点后, 如果正常的话, 这些节点会进行选举,一个变成 leader, 其他变成 followers.

在任一节点上使用 redis-cli -p 7777 进入与集群交互界面, 使用 raft-infoquarkdb-info 可以查看节点信息.

验证节点是否正常工作.

1
2
3
4
qdb-1.example.com:7777> set mykey myval
OK
qdb-1.example.com:7777> get mykey
"myval"