Skip to content

Stand Alone Deploy CentOS7

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

本文档为无法升级系统的企业版用户部署运行于 CentOS7 系统上的单机版 MyTopling。

注意 按照此文档 编译出来的 RHEL8 版本二进制包不能在 CentOS7 上运行。

编译 CentOS7 的 MyTopling 二进制包比较复杂,暂不提供文档,请企业版用户联系客服获取预编译包 mytopling-centos7-haswell.tar.gz

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

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

(一)前置依赖

sudo yum install libaio gflags libcurl
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

或者在不方便使用 elrepo-release 升级时,可以我们分流的5.14内核:

sudo yum -y install https://topling-tools.oss-cn-qingdao.aliyuncs.com/kernel-ml-5.14.15-1.el7.elrepo.x86_64.rpm

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

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

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

注 2: 兼容性问题:centos7 使用新内核时,在一些 CPU 上运行会出现 Illegal instruction 错误,使用旧内核可正常运行,但旧内核无 io uring

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

(二)单机部署

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

解压下载的 tar 包:

sudo tar xf mytopling-centos7-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/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 属性。也正因为如此,该参数默认是关闭的。