【金仓数据库产品体验官】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:MYCATH​OME/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操作,以验证该组合在特定业务场景下的稳定性和性能表现。

相关推荐
Elastic 中国社区官方博客11 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪12 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)14 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq74223498414 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE15 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy123931021615 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎15 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP15 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t15 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密15 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全