【金仓数据库产品体验官】Mycat适配KES分库分表体验
来了,来了,社区活动之金仓数据库产品体验官第四期开始了,本次在介绍产品体验的同时也希望感兴趣的朋友们一起来参加:
本文将深入探讨金仓数据库接口的多兼容特性,通过实际测试体验其兼容程度,为考虑数据库迁移或国产化替代的企业提供参考。话不多说,我们接下来开启体验之旅:
开启体验之旅
首先进行下载安装包:
下载地址:(https://www.kingbase.com.cn/download.html)
PS:下载安装包的同时,记得下载授权文件哦。
一、安装部署KingbaseES
查看Kingbase支持的OS版本:
KingbaseES支持各种主流的Linux操作系统64位发行版本,包括CentOS、中标麒麟、银河麒麟、统信UOS、Deepin、凝思、中科方德、欧拉等操作系统。
本次使用OS版本及配置:
1、新建kingbase用户
安装前必须创建 kingbase 用户,禁止使用 root 用户安装数据库。
创建用户所在的组:
groupadd dinstall -g 2001
创建用户:
useradd -G dinstall -m -d /home/kingbase -s /bin/bash -u 2001 kingbase
修改用户密码:
passwd kingbase
2、配置内核参数
cat >> /etc/sysctl.conf<<EOF
fs.aio-max-nr= 1048576
fs.file-max= 6815744
kernel.shmall= 2097152
kernel.shmmax= 4294967295
kernel.shmmni= 4096
kernel.sem= 250 32000 100 128
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
EOF
#生效配置
sysctl -p
3、修改文件打开最大数在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。
#设置永久生效:
vi /etc/security/limits.conf
- soft nofile 65536 #*表示所有用户,可只设置root和kingbase用户,注意:设置nofile的hard limit不能大于/proc/sys/fs/nr_open,否则注销后将无法正常登陆
- hard nofile 65535
- soft nproc 65536
- hard nproc 65535 #unlimited表示无限制
- soft core unlimited
- hard core unlimited
登录Kingbase用户验证是否生效:
4、RemoveIPC参数
systemd-logind服务中引入的一个特性,是当一个用户退出系统后,会删除所有有关的IPC对象。该特性由/etc/systemd/logind.conf文件中的RemoveIPC参数控制。某些操作系统会默认打开,会造成程序信号丢失等问题(只有redhat7及以上和一些特殊的国产Linux的版本需要修改,改之前可先查看此项是否为默认yes)。设置RemoveIPC=no。 设置后重启服务:
systemctl daemon-reload
systemctl restart systemd-logind.service
5、创建目录并授权
mkdir /data/kdb
chown -R kingbase:kingbase /data/kdb
6、设置环境变量:
cat >>~/.bash_profile<<eof<></eof<>
export PATH=/data/kdb/V9/Server/bin:$PATH
export KINGBASE_DATA=/data/kdb/V9/data
EOF
二、安装部署KingbaseES V9R1C10
因为前面我们写过一篇体验文章了,所以本次不过多介绍安装了,直接用kconsole.sh工具进行新建mysql兼容模式数据库:
sh /home/kingbase/.kes_dbca/root-service-kes_mysql.sh
Mysql模式已创建完成。
三、进行配置mycat
MyCat 是一款强大的开源数据库中间件,它本质上是一个模拟 MySQL 协议和行为的数据库代理。其核心价值在于,将对单一数据库的操作,透明地扩展为对一个由多个物理数据库节点组成的集群的操作。它解决了单机数据库在数据量、并发量和可用性上的瓶颈,为应用提供了近乎无限水平扩展的能力,同时保持了与原生 MySQL 高度兼容的使用体验。
前端连接(应用侧):
MyCat 对外完全伪装成一个独立的 MySQL 数据库。
应用程序无需任何代码修改,只需将数据库连接地址、端口、用户名和密码指向 Mycat 服务器(默认端口 8066)。
支持所有的 MySQL 命令和协议,如连接建立、SQL 执行、预处理语句、事务等,使得应用“无感知”地接入分布式架构。
后端路由(数据侧):
接收到应用发来的 SQL 后,MyCat 的 SQL 解析器会对其进行词法、语法分析。
路由器根据解析结果和预定义的分片规则,计算出该 SQL 应该被路由到哪个(或哪些)后端物理数据库节点。
执行器负责与这些后端数据库建立连接(支持连接池),并发起真实的 SQL 操作。
最后,对多个节点返回的结果进行数据合并、排序等聚合操作,再将最终结果返回给前端应用。
JDBC 扩展:除了原生支持的 MySQL 和 PostgreSQL,通过 JDBC 驱动,MyCat 理论上可以连接任何具有 JDBC 驱动的数据库(如 Oracle、SQL Server、金仓、达梦等),但非 MySQL 协议数据库在功能和性能上可能需要进行额外的适配和优化。
检查环境:
上传安装包并解压:
mv mycat /data/mycat
配置环境变量及驱动
export MYCAT_HOME=/data/mycat/mycat
export PATH=MYCATHOME/bin:MYCATHOME/bin:PATH
将KES驱动放入 $MYCAT_HOME/lib 目录下;
cp /data/soft/kingbase8-9.0.0.jar .
金仓数据库准备数据库:
create database shanjian1;
create database shanjian2;
修改配置文件
在 $MYCAT_HOME/conf/server.xml 中配置对外提供的端口、用户名、密码等,提供了一个默认的用户root,密码是123456;
本次为测试环境,所以密码等配置默认保持不变。
PS:新增参数:<property name="defaultSchema">TESTDB</property>
在 $MYCAT_HOME/conf/rule.xml 中配置分片算法
在$MYCAT_HOME/conf/schema.xml 中配置数据库节点和表分片规则:
PS:本次mycat和金仓数据库在一台机器。
具体文件内容:
参数调整:wrapper.conf
后台启动服务
使用 mycat start 命令后台开启mycat服务,需手动创建logs目录,日志默认写入logs目录下的文件;
日志路径/data/mycat/logs/
进行测试数据:
drop table if exists customer cascade;
drop table if exists customer_addr cascade;
create table customer(id INT PRIMARY KEY,name VARCHAR(20));
create table customer_addr(id INT PRIMARY KEY,customer_id INT NOT NULL,address VARCHAR(255) NOT NULL,FOREIGN KEY (customer_id) REFERENCES customer(id));
insert into customer(id,name) values(1,‘aaa’);
insert into customer(id,name) values(2,‘bbb’);
insert into customer_addr(id,customer_id,address) values(1,1,‘Anhui’);
insert into customer_addr(id,customer_id,address) values(1,2,‘Shanghai’);
insert into customer_addr(id,customer_id,address) values(2,2,‘Sichuan’);
insert into customer_addr(id,customer_id,address) values(2,1,‘Yunnan’);
select * from customer;
select * from customer_addr;
金仓数据库进行验证:
说明已正常分库分表插入数据到金仓数据库。
总结
MyCat的核心思想在于 “分而治之” 。它通过精巧的代理与路由机制,将分布式数据库的复杂性封装于内,为上层的应用程序提供了一个统一、标准化的数据库访问入口。
通过体验得知金仓数据库可以有效地使用MyCat实现分库分表,在满足版本兼容、配置得当、并充分测试SQL兼容性的前提下,能够达到生产环境可用的‘准完美’状态。
它特别适合以下场景:
传统系统改造:使用金仓替代Oracle/MySQL,且需要分库分表的现有系统。
新系统架构:在项目初期就规划了分布式架构,并选择金仓作为底层存储。
最终建议:在正式上线前,必须进行全面的功能、性能和压力测试,尤其要模拟真实业务中最高频和最复杂的SQL操作,以验证该组合在特定业务场景下的稳定性和性能表现。