作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著 名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭
前面对Cantian存储引擎进行了简单的介绍,本期进行一次部署演示。
本次部署使用最新的Cantian 24.06进行部署,部署架构如下图:

服务器配置如下:

共享磁盘配置如下:
这里通过nfs实现共享。

Cantian部署流程图:

以下配置需要在所有服务器执行:
cat >> /etc/hosts <<EOF 10.10.10.111 ct01 10.10.10.112 ct02 10.10.11.110 mgr 10.10.11.111 ct01-mgr 10.10.11.112 ct02-mgr 20.20.20.111 ct01-priv 20.20.20.112 ct02-priv 30.30.30.113 ctst 30.30.30.111 ct01-san 30.30.30.112 ct02-san EOF
systemctl stop firewalld.service systemctl disable firewalld.service
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config setenforce 0
rm -rf /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo dnf clean all dnf repolist
用于编译的服务器可以为本次规划的mgr或ct01/ct02。本次由于资源问题,未部署mgr服务器,编译操作在ct01执行,实际生产中建议用单独服务器执行。其中部分操作需要在所有服务器上执行。
#要求git版本>=2.18.0 dnf --showduplicates list git #检查仓库中git版本,为2.27.0,满足需求 dnf -y install git
#要求docker版本>=19.03 # 1.加载br_netfilter内核 modprobe br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/netfilter.conf br_netfilter EOF lsmod |grep br_netfilter # 2.配置sysctl cat >> /etc/sysctl.conf <<EOF net.ipv4.ip_forward = 1 net.ipv4.conf.all.proxy_arp = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.netfilter.nf_conntrack_max=2310720 vm.swappiness = 0 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 EOF sysctl -p # 3.配置docker yum源 dnf install -y yum-utils dnf-utils dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo dnf --showduplicates list docker-ce #检查仓库中docker版本,最低版本为19.03.13,满足需求 # 4. 安装docker-ce dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin --allowerasing # 5.配置docker开机启动 systemctl enable --now docker # 6.检查docker版本 docker --version [root@ct01 ~]# docker --version Docker version 26.1.3, build b72abbb
# 版本要求cmake 3.14.1,automake 1.16.1,libtool 2.4.6,g++ 8.5.0,pkgconfig 0.29.1-3,rpm-build 4.14.3, 仓库中软件版本均满足条件 dnf -y install cmake automake libaio-devel pkgconf-pkg-config rpm-build libtool gcc-c++ --allowerasing
这里使用NFS实现存储共享。
dnf install nfs-utils
mkdir /ctst mkdir /ctst/dbstore mkdir /ctst/metadata mkdir /ctst/share mkdir /ctst/archive
这里使用了一块200G的磁盘做演示:
pvcreate /dev/nvme0n2 vgcreate ctst /dev/nvme0n2 lvcreate -L 150G -n dbstore ctst lvcreate -L 5G -n metadata ctst lvcreate -L 2G -n share ctst lvcreate -L 10G -n archive ctst mkfs.xfs /dev/mapper/ctst-archive mkfs.xfs /dev/mapper/ctst-dbstore mkfs.xfs /dev/mapper/ctst-metadata mkfs.xfs /dev/mapper/ctst-share cat >> /etc/fstab << EOF /dev/mapper/ctst-dbstore /ctst/dbstore xfs defaults 0 0 /dev/mapper/ctst-metadata /ctst/metadata xfs defaults 0 0 /dev/mapper/ctst-share /ctst/share xfs defaults 0 0 /dev/mapper/ctst-archive /ctst/archive xfs defaults 0 0 EOF mount /ctst/dbstore mount /ctst/metadata mount /ctst/share mount /ctst/archive

cat >> /etc/exports << EOF /ctst 30.30.30.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0,no_root_squash) /ctst/dbstore 30.30.30.0/24(rw,sync,no_subtree_check,no_root_squash) /ctst/metadata 30.30.30.0/24(rw,sync,no_subtree_check,no_root_squash) /ctst/share 30.30.30.0/24(rw,sync,no_subtree_check,no_root_squash) /ctst/archive 30.30.30.0/24(rw,sync,no_subtree_check,no_root_squash) EOF
配置说明:第一行的fsid=0配置可以以/ctst为根目录,仅输入该目录下的二级目录名称即可挂载
systemctl start nfs-server systemctl enable nfs-server

注:这里不需要在ct01和ct02上挂载磁盘
mkdir /ctdb/cantian_compilecd /ctdb/cantian_compile git clone -b cantian24.6 https://gitee.com/openeuler/cantian.git git clone -b cantian24.6 https://gitee.com/openeuler/cantian-connector-mysql.git
cd /ctdb/cantian_compile/cantian-connector-mysql# 拷贝8.0.26源码包mysql-server-mysql-8.0.26.tar.gz至该目录tar -zxf mysql-server-mysql-8.0.26.tar.gz mv mysql-server-mysql-8.0.26 mysql-source
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://dockerpull.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://y8y6vosv.mirror.aliyuncs.com",
"https://registry.dockercn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"http://hubmirror.c.163.com"
]
}
EOF
systemctl reload-daemon
systelctl restart docker
cd /ctdb/cantian_compile/cantian/docker# 这里先需要调整Dockfile内容 vim ./Dockfile #RUN wget --progress=bar:force -O /tmp/libasan5-8.2.1-3.el7.x86_64.rpm http://mirror.centos.org/centos/7/sclo/x86_64/rh/Packages/l/libasan5-8.2.1-3.el7.x86_64.rpm #原内容,对应rpm包地址已失效 RUN wget --progress=bar:force -O /tmp/libasan5-8.2.1-3.el7.x86_64.rpm https://vault.centos.org/7.9.2009/sclo/x86_64/rh/Packages/l/libasan5-8.2.1-3.el7.x86_64.rpm docker build -t cantian_dev:latest -f Dockerfile . docker images

# 1. 启动容器 cd /ctdb/cantian_compile/cantian/docker sh container.sh dev # 这里将进入容器内 # 2. 进入编译脚本目录 cd /home/regress/CantianKernel/build # 3. 生成Cantian引擎软件包 sh build_cantian.sh release

# 4. 检查生成文件ls /tmp/cantian_output

docker ps docker stop [CONTAINER ID]

# (可选)清理image与缓存docker images docker rmi [IMAGE ID] docker system prune
cat /proc/cpuinfo | grep -o constant_tsc | uniq
需要返回内容为constant_tsc,确保数据库服务器的时间精度
这里需要确认根目录至少有20GB剩余空间。

Python版本需>=3.6.0。
检查pyopenssl,cryptography是否安装
pip3 show pyopenssl pip3 show cryptography # 如未安装执行以下命令安装 pip3 install pyopenssl --trusted-host=mirrors.huaweicloud.com -i https://mirrors.huaweicloud.com/repository/pypi/simple/ pip3 install cryptography --trusted-host=mirrors.huaweicloud.com -i https://mirrors.huaweicloud.com/repository/pypi/simple/

/dev/shm目录权限需要为drwxrwxrwt
ll -d /dev/shm # 如权限未正确,执行 chmod 777 /dev/shm

cat >> /etc/sysctl.conf <<EOF kernel.shmmax = 23192823399 #内存90% EOF sysctl -p
useradd -m -u 5000 -d /home/ctdba ctdba
mkdir /ctdb/cantian_install chmod 755 /ctdb/cantian_install chown ctdba:ctdba /ctdb/cantian_installcd /ctdb/cantian_install mv /path/to/Cantian_24.06_x86_64_RELEASE.tgz ./ tar -zxvf Cantian_24.06_x86_64_RELEASE.tgz
修改配置文件/ctdb/cantian_install/cantian_connector/action/config_params_file.json
{
"deploy_mode": "nas",
"deploy_user": "ctdba:ctdba",
"node_id": "0",
"cms_ip": "20.20.20.111;20.20.20.112",
"storage_dbstore_fs": "dbstore",
"storage_share_fs": "share",
"storage_archive_fs": "archive",
"storage_metadata_fs": "metadata",
"cantian_in_container": "0",
"mysql_in_container": "0",
"share_logic_ip": "30.30.30.113",
"archive_logic_ip": "30.30.30.113",
"metadata_logic_ip": "30.30.30.113",
"storage_logic_ip": "30.30.30.113",
"db_type": "1",
"mes_ssl_switch": false,
"mysql_metadata_in_cantian": false,
"MAX_ARCH_FILES_SIZE": "512M",
"ca_path": "",
"crt_path": "",
"key_path": "",
"redo_num": "3",
"redo_size": "1G"
}
附:配置文件说明
在/ctdb/cantian_install/cantian_connector/action/cantian/install_config.json配置中添加以下内容:
"Z_KERNEL_PARAMETER3": "TEMP_BUFFER_SIZE=1G", "Z_KERNEL_PARAMETER4": "TEMP_POOL_NUM=4", "Z_KERNEL_PARAMETER5": "BUF_POOL_NUM=16", "Z_KERNEL_PARAMETER6": "LARGE_POOL_SIZE=256M", "Z_KERNEL_PARAMETER7": "DATA_BUFFER_SIZE=8G", "Z_KERNEL_PARAMETER8": "SHARED_POOL_SIZE=512M", "Z_KERNEL_PARAMETER9": "SESSIONS=512"
注:因为测试环境内存不足,需要调整MySQL相关内存参数。
sh /ctdb/cantian_install/cantian_connector/action/appctl.sh install /ctdb/cantian_install/cantian_connector/action/config_params_file.json
这里在操作过程中出现了点小插曲,输出的检查日志的路径和实际的路径位置不一致:

设置Cantian管理员密码:

密码:Cantian_123

在ct02节点重复6.5-6.10操作内容,注意配置文件"node_id": “1”。
注:如部署过程中(未完成)因为各种原因重启服务器后,需要执行以下命令启动自动挂载
systemctl start cantian
该服务自动挂载后续安装完成后将由服务cantian.timer接管
注:部署过程中会对操作系统相关配置进行调整,并创建用户cantian,用于运行Cantian存储引擎以及MySQL
在两个节点上分别执行以下命令:
sh /opt/cantian/action/appctl.sh start

systemctl status cantian.timer systemctl status cantian_logs_handler.timer su -s /bin/bash - cantian cms stat

注:如安装失败需要重新调整配置并部署,步骤如下:
1.关闭Cantian
sh /opt/cantian/action/appctl.sh stop
2.卸载Cantian
sh /opt/cantian/action/appctl.sh uninstall override
3.删除无效文件
#所有计算节点
rm -rf /mnt/dbdata/local/*
#存储节点
rm -rf /ctst/dbstore/*
rm -rf /ctst/metadata/*
rm -rf /ctst/share/*
rm -rf /ctst/archive/*
4.重新部署
在所有调整完成后重新部署Cantian
这里需要注意,需要使用和前面编译过程中一样的8.0.26版本,需要使用编译安装,否则在后续加载Cantian相关插件过程中会出现异常。
mysql-server-mysql-8.0.26.tar.gz
dnf -y install libncurses* ncurses ncurses-devel bison libarchive openssl-devel libtirpc-devel rpm -ivh rpcgen-1.3.1-4.el8.x86_64.rpm
mkdir /ctdb/mysql mkdir /ctdb/mysql/base mkdir /ctdb/mysql/boost chown cantian:cantian /ctdb/mysql -R cp /path/to/mysql-server-mysql-8.0.26.tar.gz /ctdb/mysql su -s /bin/bash - cantiancd /ctdb/mysql tar -xvf mysql-server-mysql-8.0.26.tar.gz mv mysql-server-mysql-8.0.26/ mysql_source/
cd /ctdb/mysql/mysql_source/ cmake -DCMAKE_INSTALL_PREFIX=/ctdb/mysql/base -DBUILD_CONFIG=mysql_release -DWITH_UNIT_TESTS=0 -DDOWNLOAD_BOOST=1 -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DFORCE_INSOURCE_BUILD=1 -DWITH_BOOST=/ctdb/mysql/boost

make make install

su -s /bin/bash - cantian mkdir /ctdb/mysql/var mkdir /ctdb/mysql/data mkdir /ctdb/mysql/tmp mkdir /ctdb/mysql/log
cp /opt/cantian/mysql/server/plugin/ha_ctc.so /ctdb/mysql/base/lib/plugin/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libctc_proxy.so /ctdb/mysql/base/lib/plugin/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libsecurec.so /ctdb/mysql/base/lib/plugin/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libsecurec.a /ctdb/mysql/base/lib/plugin/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libctc_proxy.so /usr/lib64/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libsecurec.so /usr/lib64/ cp /opt/cantian/image/cantian_connector/for_mysql_official/mf_connector_mount_dir/cantian_lib/libsecurec.a /usr/lib64/ chmod 755 /usr/lib64/libctc_proxy.so chmod 755 /usr/lib64/libsecurec.so chmod 755 /usr/lib64/libsecurec.a chmod 755 /ctdb/mysql/base/lib/plugin/ha_ctc.so chmod 755 /ctdb/mysql/base/lib/plugin/libctc_proxy.so chmod 755 /ctdb/mysql/base/lib/plugin/libsecurec.so chmod 755 /ctdb/mysql/base/lib/plugin/libsecurec.a chown -R cantian:cantian /ctdb/mysql/base/lib/plugin/ha_ctc.so chown -R cantian:cantian /ctdb/mysql/base/lib/plugin/libctc_proxy.so chown -R cantian:cantian /ctdb/mysql/base/lib/plugin/libsecurec.so chown -R cantian:cantian /ctdb/mysql/base/lib/plugin/libsecurec.a
编写配置文件/etc/my.cnf
[client] socket = /ctdb/mysql/var/mysql.sock port = 3306 [mysqld] ############# GENERAL ############# event_scheduler = ON autocommit = OFF character_set_server = UTF8MB4 collation_server = UTF8MB4_UNICODE_CI explicit_defaults_for_timestamp = ON lower_case_table_names = 1 port = 3306 read_only = OFF transaction-isolation = READ-COMMITTED interactive_timeout = 600 max_allowed_packet = 32M max_connections = 256 max_user_connections = 200 sort_buffer_size = 1M table_definition_cache = 1400 table_open_cache = 2000 table_open_cache_instances = 4 thread_cache_size = 9 thread_stack = 256K tmp_table_size = 64M max_heap_table_size = 64M check_proxy_users = ON mysql_native_password_proxy_users = O N############# SAFETY ############## local_infile = OFF skip_name_resolve = ON sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY############# LOGGING #############general_log = 0 log_queries_not_using_indexes = ON log_slow_admin_statements = ON long_query_time = 10 slow_query_log = ON log_raw = ON ############# REPLICATION ############# server_id = 101010111 ############### PATH ############## basedir = /ctdb/mysql/base datadir = /ctdb/mysql/data tmpdir = /ctdb/mysql/tmp socket = /ctdb/mysql/var/mysql.sock pid_file = /ctdb/mysql/data/mysql.pid innodb_data_home_dir = /ctdb/mysql/data log_error = /ctdb/mysql/log/error.log general_log_file = /ctdb/mysql/log/general.log slow_query_log_file = /ctdb/mysql/log/slow.log [mysql] ############# CLIENT ############# max_allowed_packet = 32M socket = /ctdb/mysql/var/mysql.sock [mysqldump] max_allowed_packet = 32M
注:以下参数必须配置
check_proxy_users=ON
mysql_native_password_proxy_users=ON
log_raw= ON
注:MySQL配置的max_connections要低于Cantian部署时的"Z_KERNEL_PARAMETER9": "SESSIONS=512"配置的值(详见本文6.9),也可使用下面命令查询
su -s /bin/bash - cantian ctsql sys@127.0.0.1:1611 -q #这里需要输入Cantian部署过程中配置的管理员密码
show parameter sessions

chmod 755 /etc/my.cnf chown -R cantian:cantian /etc/my.cnf /ctdb/mysql/base/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure --datadir=/ctdb/mysql/data --plugin-dir=/ctdb/mysql/base/lib/plugin --early-plugin-load="ctc_ddl_rewriter=ha_ctc.so;ctc=ha_ctc.so;" --initialize-insecure --user=cantian
/ctdb/mysql/base/bin/mysqld_safe --defaults-file=/etc/my.cnf --datadir=/ctdb/mysql/data --plugin-dir=/ctdb/mysql/base/lib/plugin --plugin-load="ctc_ddl_rewriter=ha_ctc.so;ctc=ha_ctc.so;" --check_proxy_users=ON --mysql_native_password_proxy_users=ON --default-storage-engine=CTC --user=cantian &

可以将节点1的base目录直接复制到节点2对应路径,并完成本节除MySQL源码编译以外的其他内容。这里需要注意需要调整配置文件中的server_id=101010112。
在编译、部署Cantian的过程中针对Cantian 24.06有以下一些地方想吐槽的(也是意见和建议):
本篇文章从目录来看就比较复杂,可以说是现在最完善的Cantian存储引擎部署与MySQL对接文档,看着挺复杂实际也不简单,也希望我的意见和建议能够帮助Cantian引擎发展。
老规矩,知道写了些啥。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3039556/ ,如需转载,请注明出处,否则将追究法律责任。