-
Notifications
You must be signed in to change notification settings - Fork 4
Stand Alone Deploy CentOS7
本文档为无法升级系统的企业版用户部署运行于 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 目录 |
# 使用 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 属性。也正因为如此,该参数默认是关闭的。