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

相关推荐
程序员小白条31 分钟前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
老华带你飞1 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
Coding_Doggy1 小时前
链盾shieldchiain | 团队功能、邀请成员、权限修改、移除成员、SpringSecurity、RBAC权限控制
java·开发语言·数据库
凯子坚持 c1 小时前
不用复杂配置!本地 Chat2DB 秒变远程可用,跨网操作数据库就这么简单
数据库
q***65691 小时前
Windows环境下安装Redis并设置Redis开机自启
数据库·windows·redis
q***96581 小时前
Windows版Redis本地后台启动
数据库·windows·redis
q***81641 小时前
【Redis】centos7 systemctl 启动 Redis 失败
数据库·redis·缓存
q***09801 小时前
MySQL 常用 SQL 语句大全
数据库·sql·mysql
q***64971 小时前
VS与SQL Sever(C语言操作数据库)
c语言·数据库·sql