Cetus 调研

简介

Cetus是由C语言开发的MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。

关键特性

  • 支持SQL读写分离
  • 支持原生MySQL协议,对客户端透明(无感知)
  • 支持状态监控
  • 支持MGR
  • 支持黑白名单
  • 支持主从延迟检测(自动切换读到主)

针对我们关心的问题,详细说明

  • 统一接入入口,客户端可以像连接mysql一样连接到Cetus
  • 屏蔽读写分离,Cetus会解析并判断sql该转发到主库还是从库
  • 故障转移
    • 主库宕机时
      • 当主库地址配置为dns:MHA切换dns指向从库,Cetus发现到主库的连接不通,会重新解析dns,然后连接到新的uri
      • 当主库地址配置为ip:通过MHA脚本发送命令update backends到Cetus,切换主/从库地址
    • 从库宕机时,请求会被转发至另一个已配置的从库地址,当所有从库地址都不可用时,会转发到主库
    • Cetus宕机时,通过部署多台Cetus保证高可用
  • 可运维性
    • 支持管理命令(没有web页面)
    • 支持动态修改配置

Cetus不能做哪些事

  • 不支持批量sql语句的执行
  • 不支持TLS
  • 不支持多租户
  • 单进程工作模式,建议在docker容器使用
  • 只支持linux系统
  • 不支持客户端ctl+c操作,即不支持kill query操作
  • set命令的有限支持,不支持global级别的set命令,支持部分session级别的set命令
  • sql语句的有限支持,包括以下几点:
    • 不支持将LAST_INSERT_ID 嵌套在INSERT或者其他的语句中
    • 不支持客户端的change user命令

举例一些配置

Cetus 共3个配置文件,包括用户配置文件(users.json)、变量处理配置文件(variables.json)和启动配置文件(proxy.conf)

users.json

用来配置用户登陆信息

{
    "users":[
        {
            "user": "XXXX",
            "client_pwd":   "XXXXXX",
            "server_pwd":   "XXXXXX"}, 
            {
            "user": "XXXX",
            "client_pwd":   "XXXXXX",
            "server_pwd":   "XXXXXX"
        }
    ]
}
  • user的值是用户名
  • client_pwd的值是前端登录Cetus的密码
  • server_pwd的值是Cetus登录后端的密码。

variables.json

用来支持会话级系统变量的设置,可以通过在variables.json配置允许发送的值和静默处理的值

{
 "variables": [
   {
     "name": "sql_mode", # 会话级系统变量的名称
     "type": "string-csv", # 变量的类型,可以为string或string-csv逗号分隔的字符串值
     "allowed_values": # 指定允许设定的变量值,可以使用通配符*表示此变量设任意值都允许
     ["STRICT_TRANS_TABLES",
       "NO_AUTO_CREATE_USER",
       "NO_ENGINE_SUBSTITUTION"
     ]
   },
   {
     "name": "connect_timeout",
     "type": "string",
     "allowed_values": ["*"],
     "silent_values": ["10", "100"] # silent_values的值是指定静默处理的值,可以使用通配符*
   }
 ]
}

proxy.conf

[cetus]
# Loaded Plugins
plugins=proxy,admin #加载的插件,读写分离插件、管理插件

# Defines the number of worker processes. 
worker-processes=4 # 工作进程数量为4

# Proxy Configuration
proxy-address=127.0.0.1:1234 # 客户端访问地址
proxy-backend-addresses=127.0.0.1:3306 # 读写(主库)节点,可配置多个,可配置dns
proxy-read-only-backend-addresses=127.0.0.1:3307 #只读节点,可配置多个,可配置dns

# Admin Configuration 管理模块的配置
admin-address=127.0.0.1:5678
admin-username=admin
admin-password=admin

# Backend Configuration
default-db=test # 默认数据库,当连接未指定db时,使用的默认数据库名称
default-username=dbtest # 默认登陆用户名,在Proxy启动时自动创建连接使用的用户名

# File and Log Configuration
log-file=cetus.log
log-level=debug

读写分离

proxy-address=192.168.222.175:13306
proxy-backend-addresses=192.168.222.172:3306 
proxy-read-only-backend-addresses=192.168.222.173:3306,192.168.222.174:3306 

你可能感兴趣的:(Cetus 调研)