Skip to content

Classic MySQL Master Slave CentOS7

luantian-terark edited this page Jun 5, 2023 · 12 revisions

本文档为无法升级系统的企业版用户部署运行于 CentOS7 系统上的集群版 MyTopling ,带有 Dcompact 服务器。

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

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

无需 Compact 的单机版见 此文档

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

1. 环境检测

1.1. 检测内核,保证内核为 5.14 以上

uname -a

如果低于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

1.2. 在内网上配置域名解析(也可以用私有 dns)

sudo bash -c 'echo "<主库的ip>" mytopling-instance-1.mytopling.in >> /etc/hosts'
sudo bash -c 'echo "<从库ip>"   mytopling-instance-2.mytopling.in >> /etc/hosts'
sudo bash -c 'echo "<dcompact的ip>"         dcompact.mytopling.in >> /etc/hosts'

1.3. 确认 SSD/NVMe 磁盘(disk1)已经开启 Trim(mount 的 discard 选项)

grep discard /etc/fstab

如果 mount 未开启 discard,SSD/NVMe 盘的写操作会大幅降速

1.4. 为三台主机关闭防火墙和 selinux

sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable --now firewalld

2.安装运行依赖并部署

本章(2.x)在两台 MyTopling 主机上(主库和从库所在主机)分别运行一遍

2.1 安装依赖 NFS

sudo yum install epel-release -y 
sudo yum install -y libaio gflags libcurl nfs-utils
sudo yum install -y snappy zlib bzip2 lz4

2.2 开启 NFS 共享

假设 /disk1 为格式化并挂载后的磁盘 在 mytopling-instance-1 上执行

mkdir -p /mnt/mynfs/datadir/mytopling-instance-1

mytopling-instance-2 上执行

mkdir -p /mnt/mynfs/datadir/mytopling-instance-2

两台主机分别执行:

echo "/mnt/mynfs *(rw,async,no_root_squash,fsid=1)" >> /etc/exports
# 增加服务器线程数
sudo sed -i  's|#\[nfsd\]|\[nfsd\]|g' /etc/nfs.conf
sudo sed -i  's/# threads=8/threads=64/g' /etc/nfs.conf
sudo systemctl enable --now nfs-server

2.3 部署 MyTopling 程序

映射共享磁盘到对应位置,和程序安装位置相同,或者自行挂载磁盘到 /mnt/mynfs

sudo mkdir /mnt/mynfs
# 如果你的磁盘不是 /disk1,将 disk1 换成你的nvme磁盘实际挂载位置
# 或者直接将磁盘挂载到 /mnt/mynfs 也可以, 这时不需要追加内容到 fstab
sudo bash -c "echo '/disk1 /mnt/mynfs none defaults,bind 0 0'" >> /etc/fstab
mount -a

安装 mytopling

# 运行完之后 /mnt/mynfs/opt/ 下应该是 MyTopling 的程序文件
tar xf mytopling-centos7-haswell.tar.gz -C /mnt/mynfs/opt

3. 初始化 dcompact

dcompact 服务器上不需要解压安装文件,直接使用 instance-1 服务器共享的可执行文件。

在 dcompact 服务器上依次执行以下指令

# 在计算服务器上运行如下指令
#安装依赖
sudo yum install epel-release -y 
sudo yum install -y libaio gflags libcurl nfs-utils
sudo yum install -y snappy zlib bzip2 lz4

优化 NFS 客户端参数并挂载:

sudo echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sudo echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf
sudo sysctl -w sunrpc.tcp_slot_table_entries=128

部署程序并挂载 NFS

sudo mkdir /mnt/mynfs/opt -p
sudo mkdir /mnt/mynfs/datadir/{mytopling-instance-1,mytopling-instance-2} -p
sudo bash -c 'echo "mytopling-instance-1.mytopling.in:/mnt/mynfs/datadir/mytopling-instance-1 /mnt/mynfs/datadir/mytopling-instance-1/ auto rw,nolock,noac,noatime,nofail,_netdev 0 0" >> /etc/fstab'
sudo bash -c 'echo "mytopling-instance-2.mytopling.in:/mnt/mynfs/datadir/mytopling-instance-2 /mnt/mynfs/datadir/mytopling-instance-2/ auto rw,nolock,noac,noatime,nofail,_netdev 0 0" >> /etc/fstab'
# 可执行程序文件
sudo bash -c 'echo "mytopling-instance-1.mytopling.in:/mnt/mynfs/opt /mnt/mynfs/opt/ auto ro,nolock,noac,noatime,nofail,_netdev 0 0" >> /etc/fstab'
sudo mount -a
# 启动计算进程
sudo bash /mnt/mynfs/opt/mytopling-deploy/Classic-MySQL-Master-Slave-Replication-Dcompact/start-dcompact.sh

4. 启动数据库

所需参数已经在启动脚本中设置完毕,binlog 启动了 GITD 模式。

在 mytopling-instance-1.mytopling.in 主机上执行

sudo bash /mnt/mynfs/opt/mytopling-deploy/Classic-MySQL-Master-Slave-Replication-Dcompact/enterprise/start-mysqld-instance-1.sh

在 mytopling-instance-2.mytopling.in 主机上执行

sudo bash /mnt/mynfs/opt/mytopling-deploy/Classic-MySQL-Master-Slave-Replication-Dcompact/enterprise/start-mysqld-instance-2.sh

直接执行 /mnt/mynfs/opt/bin/mysql -uroot -S /var/lib/mysql/mysql.sock 即可连接

此时两个数据库为初始状态,需要手动配置主从,和标准 MySQL 设置模式相同。 如果从库不再设置下游,可以在脚本中修改参数关闭 binlog。