-
近期由于工作需要会对一些MySQL对中间件进行一些评估,在这里也记录一下各种中间件的功能和优缺点
-
项目地址
- https://github.com/cetus-tools/cetus/releases
- 基于MySQL Proxy开发
- 分为读写分离版和分库版本两个版本
-
特点
- 高可用
- 高性能
- 读写分离
读写分离版本支持的主要特点: 1.支持读写分离 2.支持MGR集群 3.支持域名连接后端(可以配合目前基于域名的高可用架构) 4.支持SSL/TLS
- 分库
分库版本的主要特点: 1.支持读写分离 2.支持分库 3.支持分布式事务 4.支持SSL/TLS 5.支持域名连接后端(可以配合目前基于域名的高可用架构) 6.支持MGR集群
- 连接池
在管理端口 config set pool.default_pool_size 100 设置默认连接池 config set pool.max_pool_size 最大连接池 config set pool.max_resp_len 最大结果集长度 config set pool.master_preferred 是否只允许走主库
- 管理功能
- 通过管理端口可以对实例进行配置管理,无需重启服务
-
安装
测试架构:
Cetus:192.168.1.11
MySQL-M:192.168.1.12
MySQL-S:192.168.1.13
-
准备:读写分离版本
1.配置好MySQL主从 2.建立cetus访问数据库的账号 GRANT USAGE ON *.* TO 'cetus_app'@'192.168.1.11' identified by 'cetus_app'; GRANT all ON `testdb`.* TO 'cetus_app'@'192.168.1.11'; 3.创建心跳库和表(用于主从延迟检测) create database if not exists proxy_heart_beat; use proxy_heart_beat; CREATE TABLE if not exists `tb_heartbeat` ( `p_id` varchar(128) NOT NULL , `p_ts` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`p_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; GRANT ALL ON `proxy_heart_beat`.* TO 'cetus_app'@'192.168.1.11'; 3.安装依赖包 yum install cmake gcc glib2-devel flex mysql-devel gperftools-libs zlib-devel -y
- 编译安装
wget https://github.com/cetus-tools/cetus/archive/v2.3.7.tar.gz tar zxf v2.3.7.tar.gz cd /tools/cetus-2.3.7/ mkdir build cd build #读写分离版本 CFLAGS='-g -Wpointer-to-int-cast' cmake ../ -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/home/cetus237_rw -DSIMPLE_PARSER=ON -DWITH_OPENSSL=ON #分库版本 CFLAGS='-g -Wpointer-to-int-cast' cmake ../ -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/home/cetus237_shard -DSIMPLE_PARSER=OFF -DWITH_OPENSSL=ON make install cd /home ln -s cetus237_rw/ cetus
- 配置Cetus
#配置文件目录:/home/cetus/conf #users.json 用户设置文件 #proxy.conf 读写分离代理配置 #sharding.json 分库规则配置(分库版) #shard.conf 分库版本启动配置文件(分库版) #variables.json 变量处理配置文件(可选) https://github.com/cetus-tools/cetus/blob/master/doc/cetus-rw-profile.md
- user.json
{ "users": [{ "user": "root", "client_pwd": "123456", "server_pwd": "654321" }, { "user": "cetus_app", "client_pwd": "123456", "server_pwd": "cetus_app" }] } # user :数据库中建立的用户名 # client_pwd:前端应用连接cetus的密码 # server_pwd:cetus访问数据库的密码
- proxy.conf
[cetus] # For mode-switch daemon = true # Loaded Plugins plugins=proxy,admin # Defines the number of worker processes.不能超过CPU个数 #每个线程都会向后端数据库建立default-pool-size个连接 worker-processes=1 # Proxy Configuration, For example: MySQL master and salve host ip are both 192.0.0.1 proxy-address=192.168.1.11:3306 proxy-backend-addresses=192.168.1.12:3306 proxy-read-only-backend-addresses=192.168.1.13:3306 # Admin Configuration admin-address=0.0.0.0:7001 admin-username=admin admin-password=admin # Backend Configuration, use test db and username created default-db=testdb default-username=cetus_app default-pool-size=100 max-resp-size=10485760 long-query-time=100 # File and Log Configuration, put log in /data and marked by proxy port, /data/cetus needs to be created manually an d has rw authority for cetus os user max-open-files = 65536 pid-file = cetus6001.pid plugin-dir=lib/cetus/plugins log-file=/home/cetus/logs/cetus_6001.log log-level=debug # Check salve delay disable-threads=false check-slave-delay=true slave-delay-down=5 slave-delay-recover=1 # For trouble keepalive=true verbose-shutdown=true log-backtrace-on-crash=true # For performance enable-tcp-stream=true enable-fast-stream=true # For MGR group-replication-mode=0
- 启动cetus
chmod 600 conf/proxy.conf bin/cetus --default-file=conf/proxy.conf
- 访问cetus
客户端访问: mysql -ucetus_app -p123456 -h192.168.1.11 -P3306
- 管理Cetus
mysql --prompt="cetus>" -uadmin -padmin -h192.168.1.11 -P7001 #用户名密码由proxy.conf文件进行配置 1.用户管理 -- cetus到mysql的用户 update user_pwd set password='1q2w3e4r' where user='xes_test' -- app 到 cetus的用户 update app_user_pwd set password='123456' where user='xes_test' #说明:以上操作添加或是修改了xes_test用户的后端连接密码为1q2w3e4r前端应用访问cetus的密码为123456 -- 查看用户 select * from user_pwd 2.后端服务器管理 -- 查看后端服务器 select * from backends -- 查看后端连接状态 select conn_details from backends -- 添加读写类型的后端 add master '<ip:port>' -- 添加Slave add slave '<ip:port>' -- 删除后端服务器 delete from backends where address = '<ip:port>' -- 修改后端状态 update backends set (type|state)='<value>' WHERE (backend_ndx=<index>|address='<ip:port>') 状态说明 unknown: 后端初始状态,还未建立连接; up: 能与后端正常建立连接; down: 与后端无法联通(如果开启后端状态检测,能连通后自动变为UP); maintaining: 后端正在维护,无法建立连接或自动切换状态(此状态由管理员手动设置); deleted: 后端已被删除,无法再建立连接。
-
不支持的操作
1.不支持批量SQL语句
2.不支持TLS
3.不支持将LAST_INSERT_ID 嵌套在INSERT或者其他的语句中
4.不支持客户端的change user命令
https://github.com/cetus-tools/cetus/blob/master/doc/cetus-constraint.md
- 思考
- 数据库用户授权只需要对cetus服务IP授权,怎么在Cetus端控制可访问数据库的IP白名单?
Proxy端口IP白名单 show allow_ip #查看IP白名单 add allow_ip "cetus@192.168.1.*" #允许cetus用户从192.168.1网段访问 delete allow_ip "cetus@192.168.1.*" #删除cetus白名单 Proxy端口IP黑名单 show deny_ip add deny_ip "cetus@192.168.1.*" #拒绝用户cetus从192.168.1.网段访问 delete deyn_ip "cetus@192.168.1.*" #删除cetus用户IP黑名单
- 一个proxy是否可以管理多个集群?
否 - 如何解决cetus 本身单点问题
cetus没有原生的集群部署方案,只能通过部署多个cetus实例来保证高可用,这就需要解决几个问题: 1.同一MySQL集群的多个cetus之间的配置统一问题 (需要开发cetus控制平台对多个cetus进行多写) 2.当某一个cetus不可访问时如何从cetus的可访问列表问摘除的问题 (cetus1--keepalived--cetus2--keepalived---cetus3)
- 对于延迟敏感的应用户如何处理强制读主库?
使用注释/*#mode=READWRITE*/可强行路由到主库
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦