Skip to content
rockeet edited this page Jan 10, 2023 · 64 revisions

本文档旨在帮助用户在完成一个 MyTopling 的私有化部署。用户需要自行解决 github 连接不稳定的网络问题以及共享存储(通常是 NFS)的部署和挂载(NFS 快速入门)。

1. 编译环境

本文档的演示环境使用 RedHat 系的 AlmaLinux 8.6 实机操作,兼容 Alibaba Cloud Linux 3 以及 Rocky Linux 8 。 由于 CentOS8 已停止支持,CentOS7 的依赖库过于陈旧。 建议使用 AlmaLinux 8 或 Rocky Linux 8。未在 RHEL9 系列的机器上测试。

首先,三台主机均挂载 NFS 到 /mnt/mynfs 上作为共享目录,将程序也安装到 NFS 中可以极大地简化部署与安装流程,建议目录结构:

目录 说明
/mnt/mynfs/opt 程序与动态库安装目录,即通常所说的 PREFIX
/mnt/mynfs/datadir MyTopling 数据目录
/mnt/mynfs/log-bin MyTopling binlog 目录
/mnt/mynfs/wal MyTopling Write-Ahead-Log 目录
/mnt/mynfs/infolog MyTopling infolog 目录

注意: 本文档假定您按照以上的建议目录结构进行安装部署。如果需要修改这些目录,务必将所有引用这些目录的地方一起修改,包括本文档中的所有脚本片段以及 mytopling-scripts 目录中的所有文件中引用这些目录的地方。

2. 在编译机上 clone 代码并编译

编译主机建议使用 32 核心及以上的配置,此配置下,编译安装时间约 20 分钟。

请您自行解决 github 不可访问的问题(例如通过可靠的代理服务器或使用云厂商海外区域的云服务器)。

2.1 安装依赖

sudo yum config-manager --set-enabled powertools # 有些 linux 发行版不需要此行
sudo yum install -y liburing-devel git gcc-c++ gflags-devel libcurl-devel \
    libaio-devel cmake nfs-utils openssl-devel ncurses-devel libtirpc-devel \
    rpcgen bison libudev-devel

现在开始编译与安装,请在相同的目录下(例如您的 HOME 目录)编译安装 ToplingDB 与 MyTopling:

2.2 编译与安装 ToplingDB

ToplingDB 进行了良好的模块化,各个插件模块分别位于 github 的不同仓库中,在 ToplingDB 的编译过程中,Makefile 会自动从 github 上 clone 各个插件模块,其中的插件模块 topling-rocks 是 github 私有仓库(ToplingDB 企业版插件模块),社区用户没有访问权限,会输出报错信息,忽略该报错信息即可。

git clone https://github.com/topling/toplingdb.git
cd toplingdb
git submodule update --init --recursive
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts # silent git
make -j`nproc` DEBUG_LEVEL=0 shared_lib
sudo make install-shared PREFIX=/mnt/mynfs/opt

2.3 编译与安装 MyTopling

git clone https://github.com/topling/mytopling.git --depth 1
cd mytopling
git submodule update --init --recursive
# build.sh 会调用 cmake 生成编译文件到 build-rls 目录(Release 版)
bash build.sh -DTOPLING_LIB_DIR=/mnt/mynfs/opt/lib \
              -DCMAKE_INSTALL_PREFIX=/mnt/mynfs/opt
# 编译代码
cd build-rls
make -j`nproc`
sudo make install
# 复制配置文件(现在您位于 build-rls 目录)
sudo cp -r ../mytopling-scripts /mnt/mynfs/opt

3. 部署与运行

在前面的操作流程中,MyTopling 与 ToplingDB 均部署安装在共享存储 /mnt/mynfs 上,因此不需要在集群上的每台机器上分别安装

3.1 在 dcompact 服务器上启动 dcompact_worker 进程

dcompact 指 分布式 Compact,本节简述最基本的用法,详情可参考 dcompact 文档

注意,本节描述的指令在 dcompact 服务器 上执行

# 在计算服务器上运行如下指令
#安装依赖
sudo yum config-manager --set-enabled powertools
sudo yum install libaio liburing gflags libcurl
# 启动计算进程
sudo bash /mnt/mynfs/opt/mytopling-scripts/start-dcompact.sh

之后 记录 dcompact 服务器 的 ip 地址 , 下一小节要用

3.2 在数据库服务器 mytopling-instance-1 上

注意,本小节在数据库服务器上执行,因为 dcompact 服务器 由多个数据库服务器共享,所以使用 instance name 来区分不同的数据库服务器(本例中是 mytopling-instance-1)

目前假设集群中的每台主机都挂载了共享目录 /mnt/mynfs 并且拥有正确的读写权限

sudo yum config-manager --set-enabled powertools
sudo yum install libaio liburing gflags libcurl

3.2.1 创建程序运行用户并部署本地私有文件 (如日志文件目录)

如果您有 topling-rocks github 私有仓库的权限,您编译出来的 ToplingDB 动态库会包含企业版插件模块,从而以下操作步骤中以及 start-mysqld.sh 脚本中的 mytopling-community.json,您可以将其替换为 mytopling-enterprise.json,以启用企业版插件模块。

# 创建日志目录
sudo mkdir -p /mnt/mynfs/infolog/mytopling-instance-1/stdlog
sudo cp /mnt/mynfs/opt/mytopling-scripts/{index.html,style.css} /mnt/mynfs/infolog/mytopling-instance-1
# 创建 MySQL 用户
sudo groupadd -g 27 mysql
sudo useradd mysql -u 27 -g 27 --no-create-home -s /sbin/nologin
chown mysql:mysql -R /mnt/mynfs/infolog

3.2.2 初始化 MyTopling 数据库

export LD_LIBRARY_PATH=/mnt/mynfs/opt/lib
export ROCKSDB_KICK_OUT_OPTIONS_FILE=1
export TOPLING_SIDEPLUGIN_CONF=/mnt/mynfs/opt/mytopling-scripts/mytopling-community.json
mkdir -p /mnt/mynfs/{datadir,log-bin,wal}/mytopling-instance-1
/mnt/mynfs/opt/bin/mysqld --initialize-insecure --skip-grant-tables \
    --datadir=/mnt/mynfs/datadir/mytopling-instance-1
chown mysql:mysql -R /mnt/mynfs/{datadir,log-bin,wal}/mytopling-instance-1

3.2.3 启动 MyTopling 数据库服务进程

注意 先修改 /mnt/mynfs/opt/mytopling-scripts/mytopling-community.json 中的 http_workers 为你的 分布式 Compact 服务器 的地址,否则不会激活 分布式 Compact

将 http_workers 修改为你的 分布式 Compact服务器 的地址:

"http_workers": [
   "// 这里修改为 dcompact-worker 服务器的地址",
   "http://10.0.0.1:8000"
],

上面修改完之后, 启动 MyTopling 数据库服务进程:

# 使用 root 用户 启动脚本并自动切换到 mysql 启动 MyTopling 进程
sudo bash /mnt/mynfs/opt/mytopling-scripts/start-mysqld.sh

或者不想使用 root 执行脚本, 需要显式指定 mysql 用户

sudo ulimit -n 100000
chmod +x /mnt/mynfs/opt/mytopling-scripts/start-mysqld.sh
su mysql -s /mnt/mynfs/opt/mytopling-scripts/start-mysqld.sh

使用 mysql 客户端连接 MyTopling

# 连接 MyTopling,在 MyTopling 数据库服务器上,本地连接
mysql -S /tmp/mysql.sock

4. 其他信息

4.1 关于主从同步

  • 修改启动脚本中的 GTID mode 相关选项以及 server-id 后, MyTopling 可以直接作为从库,和经典 MySQL 主从同步表现相同
  • 如果让 MyTopling 作为主库, 标准 MySQL 作为从库,需要删除启动选项中的 --binlog-ddl-only=ON。注意:修改此选项会导致 binlog 体积增加,增加后的 binlog 大小将和经典 MySQL 的 binlog 大小相同。
  • MyTopling 支持 shared-storage 架构的集群方案,此时所有 DB 结点共享同一份数据,避免了 MySQL 经典主从同步中的 binlog 复制,相关文档正在编写中。

4.2 计算集群的弹性伸缩

dcompact 集群支持计算节点的弹性伸缩和 NAS 的动态挂载,但是需要配置 nginx 转发服务器并修改相关选项,相应文档编写中

  • Prometheus + Grafana 相关指标监控
    • MyTopling 提供了 ToplingDB 引擎级的 Prometheus 监控接口,用户可以 自行配置监控
    • MySQL 层面的其它监控,把 MyTopling 按照 MySQL 来配置即可
  • 引擎 web 监控
  • 首次连接后的操作
    • MySQL 初始化之后默认只能在本机使用 root 账户连接,用户需要自行创建用户供其他用户连接。相关事项请自行查看 MySQL 官方文档。