Skip to content

Classic MySQL Master Slave RHEL8

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

本文档演示如何基于预编译的 MyTopling 部署经典 MySQL 主从服务器。

企业版用户可以联系客服获取预编译包,社区版用户可以参照 编译文档 自行编译。

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

1. 环境检测

1.1. 检测内核,保证内核为 5.14 以上,以使用 io uring

uname -a

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

# 对应 powertools, RHEL8 需要自行安装相应仓库以安装 gflags
sudo yum install yum-utils -y
sudo yum config-manager --set-enabled powertools
sudo yum install libaio gflags libcurl nfs-utils liburing -y
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-rhel8-haswell.tar.gz -C /mnt/mynfs/opt

3. 初始化 dcompact

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

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

# 在计算服务器上运行如下指令
#安装依赖
sudo yum install yum-utils -y
sudo yum config-manager --set-enabled powertools
sudo yum install libaio gflags libcurl nfs-utils liburing -y
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。