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

相关推荐
长安城没有风3 小时前
从入门到精通【Redis】初识Redis哨兵机制(Sentinel)
java·数据库·redis·后端
玉面小白龍(peng)3 小时前
sql优化进阶
数据库
Adorable老犀牛3 小时前
Linux-db2look创建表结构详细参数
linux·数据库·db2
disanleya4 小时前
MySQL时间格式转换,时间数据混乱不堪如何彻底重构?
数据库·mysql·重构
奥尔特星云大使4 小时前
mysql读写分离中间件——Atlas详解
数据库·mysql·中间件·dba·读写分离
默|笙4 小时前
【c++】set和map的封装
android·数据库·c++
一水鉴天5 小时前
整体设计 逻辑系统程序 之20 程序设计 含分层架构、CNN 数据处理支撑、监督闭环与多场景交付物 之1 cnn_project
数据库·人工智能·算法
zym大哥大5 小时前
Redis-List
数据库·redis·缓存