Skip to content

Stand Alone Deploy RHEL8

luantian-terark edited this page Jun 8, 2023 · 9 revisions

本文档为部署 RHEL8 系列统上的单机版 MyTopling 的流程。

本文档的演示环境使用 RedHat 系的 AlmaLinux 8 实机操作,兼容 Alibaba Cloud Linux 3 以及 Rocky Linux 8 。

按照此文档 编译出来的 RHEL8 版本二进制包使用于此文档。

欲使用 CentOS7 版本的 MyTopling 可以参见此文档

支持分布式 Compact 的集群版见 此文档

在有条件的情况下,推荐使用 Almalinux8/RockyLinux8 等新版操作系统。

(一)前置依赖

sudo yum install yum-utils -y
# 对应 powertools, RHEL8 需要自行安装相应仓库以安装 gflags
sudo yum config-manager --set-enabled powertools
sudo yum install libaio gflags libcurl liburing
sudo yum install -y snappy zlib bzip2 lz4

如果低于5.14,可以使用如下指令升级:

sudo yum install elrepo-release -y
# 注意安装完内核后修改默认内核并重启
sudo yum -y --disablerepo="*" --enablerepo="elrepo-kernel" install kernel-ml

修改默认启动内核的指令:

# 查看已安装内核列表
grubby --info=ALL | grep -E "^kernel|^index" 
# 按照上一条打印的列表修改默认内核,最新安装的内核一般为0
grubby --set-default-index=<新的内核index>
reboot

注 1: 每次 yum update 更新 kernel 重启后会可能变回自带内核,服务器要谨慎升级

注 2: 虽然 kenerl 5.1 就支持 io uring,但直到 kernel 5.12,io uring 才可摆脱 mlock;直到 kernel 5.14 才支持 MADV_POPULATE_READ

(二)单机部署

MyTopling 也可以单机运行,不使用共享存储模型,也不使用分布式 Compact。

解压预编译的 tar 包:

sudo tar xf mytopling-rhel8-haswell.tar.gz -C /mnt/mynfs/opt

该命令将 mytopling 安装到 /mnt/mynfs/opt,这只是一个目录而已,并非表示 mount 的新文件系统,其中 mynfs 也只是一个名字,并非必须是 nfs 文件系统。

安装好的 mytopling 目录配置如下:

目录 说明
/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

# 使用 root 用户 启动脚本
sudo bash /mnt/mynfs/opt/mytopling-deploy/StandAlone/community/start-mysqld-instance-1.sh
# 企业版用户请使用:
# sudo bash /mnt/mynfs/opt/mytopling-deploy/StandAlone/enterprise/start-mysqld-instance-1.sh

(四)超大事务问题

MyTopling/MyRocks 的事务都是在内存中执行的,对于普通的大事务,例如几十几百 MB 的大事务,虽然不推荐,但一般也不会出问题。不过为了防止意料之外的 OOM,我们限制事务尺寸不得超过 2GB,这是个软限制,可以改大或者改小,但仍有 4GB 的硬性限制。

无论如何,大事务,特别是 1GB 以上的超大事务,都应该在业务中极力避免,如果实在无法避免,可以设置 mysql 变量:

set rocksdb_commit_in_the_middle = "on";

从而不用在内存中完成整个事务然后再提交,而是在事务执行过程中,累积够一定的数据量就提交,这是不符合 SQL 标准的,但是它解决了 MyRocks 超大事务问题,例如数据加载时 LOAD DATA INFILE ...,或者超大 INSERT INTO ...,超大 UPDATE ..., DELETE ... 可能导致的 OOM 问题。

其缺陷是,因为在事务 commit 之前就已经提交了部分数据,从而在需要回滚的情况下,已提交的数据无法回滚,丧失了事务的 ACID 属性。也正因为如此,该参数默认是关闭的。