一、maxscle 介绍
1、架构
2、MaxScale 目前提供的插件功能分为5类:
1) 认证插件
提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证
2)协议插件
包括客户端连接协议,和连接数据库的协议
3)路由插件
决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的
4)监控插件
对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了
5)日志和过滤插件
提供简单的数据库防火墙功能,可以对SQL进行过滤和容错
3、局限性
1)配置限制
在2.1.2及其更早的版本中,配置⽂件每⾏限制⻓度为1024个字符;在2.1.3版本中,增加到每⾏16384个字符;在MaxScale 2.3.0版本中,将此限制增加到16777216个字符在2.2.12及更早版本中,配置⽂件中的配置分段名称限制为49个字符。
在MaxScale 2.2.13中,此限制增加到1023个字符
2)安全限制
MaxScale 的解析器通常能够正确解析WITH语句,但是⽆法收集SELECT语句定义的WITH⼦句中使⽤的列、函数和表,因此,当SELECT中的WITH语句引⽤了被禁⽌访问的列时,数据库防⽕墙不会阻塞该语句执⾏。
3)查询类型限制
MaxScale 不会将XA事务识别为事务。这意味着所有XA命令都将被视为未知命令,并将被视为可能会修改数据库的操作(在readwritesplit的情况下,这些语句将路由到主库执⾏)。
MaxScale 不会跟踪XA事务的状态,这意味着XA事务内执⾏的所有SELECT查询都可以路由到不属于XA事务的Server中
通过在XA事务启动前禁⽤⾃动提交、XA事务提交完成之后启⽤⾃动提交的⽅式,可以避免上述问题。
4)prepare语句限制
为了确保MaxScale能够正常运⾏,它需要通过解析语句来了解事务的状态和⾃动提交模式,但是,如果使⽤了prepare语句来修改事务的⾃动提交模式,则MaxScale对事务状态的判断将不正确(直到使⽤显式的提交或回滚语句处理完成事务或者修改了⾃动提交模式为⽌)。
例如:使⽤如下prepare语句修改了⾃动提交模式之后,MaxScale 仍然会仍未⾃动提交功能处于启动状态
set autocommit=1;
PREPARE hide_autocommit FROM "set autocommit=0";
EXECUTE hide_autocommit;
5)协议限制
MaxScale 不支持kill 命令,KILL命令是异步执⾏的,在MaxScale中执⾏的结果会被忽略。因此,即使⽤户没有权限执⾏KILL命令,它们也总是会显示执⾏成功
6)监控的限制
⼀个Server只能由⼀个监视器监控。两个或多个监视器监控同⼀Server时被认为是错误的
7)路由的限制
不支持从整数类型转换为字符串类型的字段
不支持CREATE TABLE … AS SELECT语句
8)读写分离器的限制(readwritesplit)
在以下情况下,读查询被路由到主库中:
-
查询是在⼀个显式打开的事务中执⾏的
-
查询语句包含存储过程或UDF调⽤
-
在⼀个查询中有多个语句,例如:⼀次发送"INSERT INTO…; SELECT LAST_INSERT_ID ();" *
9)使用限制
不⽀持超过2²⁴- 1字节的会话命令,超过之后将会导致会话被关闭
不⽀持跨库查询
二、maxscle 安装配置
1、架构
数据库拓扑:⼀主两从
127.0.0.1:3306 #主库
127.0.0.1:3307 #从库
127.0.0.1:3308 #从库
2、主库创建用户
# maxscale账号
CREATE USER 'maxscale'@'%' IDENTIFIED BY '123';
grant select on mysql.* to maxscale@'%';
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
# 监控账号
CREATE USER 'monitor'@'%' IDENTIFIED BY '123';
GRANT REPLICATION CLIENT on *.* to 'monitor'@'%';
# 读写分离账号
CREATE USER 'user_rw'@'%' IDENTIFIED BY '123';
grant all on *.* to user_rw@'%' identified by '123';
#只读账号
CREATE USER 'user_ro'@'%' IDENTIFIED BY '123';
grant select on *.* to user_ro@'%' identified by '123';
3、下载安装包
# 安装依赖
yum -y install libcurl libaio openssl gnutls libatomic
# 下载安装包
wget https://downloads.mariadb.com/MaxScale/23.02.3/centos/7/x86_64/maxscale-23.02.3-1.rhel.7.x86_64.rpm
# 安装MaxScale
yum localinstall -y maxscale-23.02.3-1.rhel.7.x86_64.rpm
MaxScale 2.2.22
4、修改配置文件
vim /etc/maxscale.cnf #修改配置文件可以直接用下面的覆盖掉
# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6/
# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-6-mariadb-maxscale-configuration-guide/
[maxscale]
threads=auto
# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#
[server1]
type=server
address=127.0.0.1
port=3306
[server2]
type=server
address=127.0.0.1
port=3307
[server3]
type=server
address=127.0.0.1
port=3308
# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/maxscale-6-monitors/
#
# Create the monitor user with:
#
# CREATE USER 'monitor_user'@'%' IDENTIFIED BY 'monitor_pw';
# GRANT REPLICATION CLIENT, FILE, SUPER, RELOAD, PROCESS, SHOW DATABASES, EVENT ON *.* TO 'monitor_user'@'%';
#
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,server3
user=monitor
password=123
monitor_interval=10s
# Service Definition for a read-only service and
# a read/write splitting service.
#
# Create the service user with:
#
# CREATE USER 'service_user'@'%' IDENTIFIED BY 'service_pw';
# GRANT SELECT ON mysql.user TO 'service_user'@'%';
# GRANT SELECT ON mysql.db TO 'service_user'@'%';
# GRANT SELECT ON mysql.tables_priv TO 'service_user'@'%';
# GRANT SELECT ON mysql.columns_priv TO 'service_user'@'%';
# GRANT SELECT ON mysql.procs_priv TO 'service_user'@'%';
# GRANT SELECT ON mysql.proxies_priv TO 'service_user'@'%';
# GRANT SELECT ON mysql.roles_mapping TO 'service_user'@'%';
# GRANT SHOW DATABASES ON *.* TO 'service_user'@'%';
#
# ReadConnRoute documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6-readconnroute/
[Read-Only-Service]
type=service
router=readconnroute
servers=server2,server3
user=user_ro
password=123
router_options=slave
# ReadWriteSplit documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6-readwritesplit/
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=user_rw
password=123
# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
5、启动maxscale
service maxscale restart
netstat -ntupl |grep maxscale