Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。
生产环境,建议选择最新的Release版本使用。
Cetus分为读写分离和分库(分表是分库的一种特殊形式)两个版本。
针对读写分离版本:
-
多进程无锁提升运行效率
-
支持透明的后端连接池
-
支持SQL读写分离
-
增强SQL路由解析与注入
-
支持prepare语句
-
支持结果集压缩
-
支持安全性管理
-
支持状态监控
-
支持tcp stream流式
-
支持域名连接后端
-
SSL/TLS支持(客户端)
-
读强一致性支持(待实现)
针对分库版本:
-
多进程无锁提升运行效率
-
支持透明的后端连接池
-
支持SQL读写分离
-
支持数据分库
-
支持分布式事务处理
-
支持insert批量操作
-
支持有条件的distinct操作
-
增强SQL路由解析与注入
-
支持结果集压缩
-
具有性能优越的结果集合并算法
-
支持安全性管理
-
支持状态监控
-
支持tcp stream流式
-
支持域名连接后端
-
SSL/TLS支持(客户端)
-
MGR支持
-
读强一致性支持(待实现)
docker run --privileged -itd --name=cetus_centos_7 centos:centos7
docker cp cetus image_id:/
docker exec -it image_id /bin/bash
yum update
yum install cmake gcc glib2-devel flex mysql-devel gperftools-libs zlib-devel -y
yum install make net-tools mysql gdb -y
cd cetus/
mkdir build/
cd build/
CFLAGS='-g -Wpointer-to-int-cast' cmake ../ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/user/cetus_install -DSIMPLE_PARSER=ON -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib64/libpython3.6m.so
make install
cd /home/user/cetus_install/
cp proxy.conf.example proxy.conf
cp users.json.example users.json
修改proxy.conf 和users.json的Mysql地址、用户名、密码,以下供参考
proxy.conf
# Proxy Configuration, For example: MySQL master and salve host ip are both 192.0.0.1
proxy-address=0.0.0.0:6001
proxy-backend-addresses=47.117.169.27:8888
proxy-read-only-backend-addresses=47.117.169.27:8889
# 创建默认数据库test_cetus
default-db=test_cetus
default-username=root
users.json
{
"users": [{
"user": "root",
"client_pwd": "111",
"server_pwd": "111"
}]
}
chmod 660 conf/proxy.conf
mkdir -p /data/cetus
bin/cetus --defaults-file=conf/proxy.conf
mysql --prompt="proxy> " --comments -h 127.0.0.1 -P 6001 -uroot -p111
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/user/cetus_install/lib/"
gdb --args /home/user/cetus_install/libexec/cetus --defaults-file=conf/proxy.conf
gdb attach pid
以下为例子,调试时替换地址即可
(gdb) b src/network-mysqld.c:4390
...
...
打印client发过来的sql
(gdb) p con->orig_sql
$9 = (GString *) 0x3a5faa00
(gdb) p *(GString *) 0x3a5faa00
如果您在使用Cetus的过程中发现BUG或者有新的功能需求,欢迎在issue里面提出来。