Skip to content

Shared Everything Replication

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

参照本文档,用户可以搭建一个基于 shared-everything 架构的 MyTopling 主从。

服务器共有三台:MyTopling 主从,以及 Dcompact 服务器。

如果不需要 Dcompact, 参见此处修改 json文件后启动即可。此时仅有两台服务器

此架构的优势在于数据只有一份,占用空间和Compact计算量都和单库时相同。相对的,由于数据库存储在NFS上, 数据访问,会产生额外的延迟。 此外,此时数据库没有业务层面的多副本机制,数据安全性依赖于NFS数据本身的存储可靠性。

1.预备条件

运行环境基于 RHEL8 系列操作系统,使用 Almalinux8 测试通过。

1.1 预配置的NFS服务器。

配置方式参见 NFS服务端配置

NFS 服务器可以是主库本身,也可以是单独的NFS服务器。

1.2 配置客户端连接数

参见 NFS客户端配置

1.3 安装运行依赖

先检查内核版本是否大于5.14:

uname -r

数据库服务器需要新版本内核来使用 io uring, dcompact 服务器不需要特别升级内核。

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

接下来安装运行依赖

# 对应 powertools, RHEL8 需要自行安装相应仓库以安装 gflags
# 在每台服务器上运行如下指令安装依赖
sudo yum install yum-utils -y
sudo yum config-manager --set-enabled powertools
sudo yum install libaio liburing gflags libcurl

CentOS7 上运行未做测试,但启动脚本相同,仅依赖包略有区别,参考 此文档 安装依赖部分略作修改即可。

1.4 dns解析

配置私有dns或者向所有服务器的hosts文件写入:

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.5 挂载NFS

将非 NFS 服务器之外的服务器执行如下命令挂载:

NFS_IP="<修改为NFS 服务器的IP>"
NFS_EXPORT_POINT="/mnt/mynfs" # 根据 NFS服务器的配置进行修改
FSTAB_LINE="$NFS_IP:$NFS_EXPORT_POINT /mnt/mynfs auto rw,nolock,noac,noatime,nofail,_netdev 0 0"
sudo bash -c "echo $FSTAB_LINE >> /etc/fstab"
sudo mount -a

2.部署 MyTopling 安装包

直接在挂载了NFS的某一台服务器上解压一次即可,安装包生成方式参见 编译MyTopling

sudo tar xf mytopling-rhel8-haswell.tar.gz -C /mnt/mynfs/opt

3.启动服务

启动 Dcompact 服务器

# 在 dcompact实例上执行:
sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/start-dcompact.sh

启动主库,在主库服务器上执行:

sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/community/start-mysqld-instance-1.sh
# 企业用户使用:
# sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/enterprise/start-mysqld-instance-1.sh
# 创建同步用户,仅第一次启动时需要
sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/cerate-sync-user.sh

启动并初始化从库,在从库上执行:

sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/community/start-mysqld-instance-2.sh
# 企业用户使用:
# sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/enterprise/start-mysqld-instance-2.sh
# 同步从库,仅首次创建后需要
sudo bash /mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/init-instance-2.sh

4.StandAlone的主库配置

如果不想使用分布式 Compact ,可以用以下方法关闭: 在json中删除 CFOptions.default.compaction_executor_factory项:

json="/mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/community/side-plugin-1.sh"
# 企业用户请修改为:
# json="/mnt/mynfs/opt/mytopling-deploy/Shared-Everything-Replication-Dcompact/enterprise/side-plugin-1.sh"
sudo bash sed -i '/compaction_executor_factory/d' $json

修改后再启动 MyTopling 为单机版,不需要 Compact 服务器。