-
Notifications
You must be signed in to change notification settings - Fork 4
Classic MySQL Master Slave CentOS7
本文档为无法升级系统的企业版用户部署运行于 CentOS7 系统上的集群版 MyTopling ,带有 Dcompact 服务器。
注意 按照此文档 编译出来的 RHEL8 版本二进制包无法在 CentOS7 上运行。
编译 CentOS7 的 MyTopling 二进制包比较复杂,暂不提供文档,请企业版用户联系客服获取预编译包 mytopling-centos7-haswell.tar.gz
。
无需 Compact 的单机版见 此文档
在有条件的情况下,推荐使用 Almalinux8/RockyLinux8 等新版操作系统。
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
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'
grep discard /etc/fstab
如果 mount 未开启 discard,SSD/NVMe 盘的写操作会大幅降速
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo systemctl disable --now firewalld
本章(2.x)在两台 MyTopling 主机上(主库和从库所在主机)分别运行一遍
sudo yum install epel-release -y
sudo yum install libaio gflags libcurl nfs-utils -y
假设 /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
映射共享磁盘到对应位置,和程序安装位置相同,或者自行挂载磁盘到 /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
dcompact 服务器上不需要解压安装文件,直接使用 instance-1
服务器共享的可执行文件。
在 dcompact 服务器上依次执行以下指令
# 在计算服务器上运行如下指令
#安装依赖
sudo yum install epel-release -y
sudo yum install libaio gflags libcurl nfs-utils -y
优化 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,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,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,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
所需参数已经在启动脚本中设置完毕,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-1.sh
直接执行 /mnt/mynfs/opt/bin/mysql -uroot -S /var/lib/mysql/mysql.sock
即可连接
此时两个数据库为初始状态,需要手动配置主从,和标准 MySQL 设置模式相同。 如果从库不再设置下游,可以在脚本中修改参数关闭 binlog。