Mysql 读写分离中间件 MaxScale

时间:2022-03-20 04:02:16

MaxScale 是干什么的?



配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡


读写分离负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能


Mysql 读写分离中间件 MaxScale


MaxScale 的基础构成



MaxScale 是 Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟


MaxScale 是插件式结构,允许用户开发适合自己的插件


MaxScale 目前提供的插件功能分为5类


认证插件


提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证


协议插件


包括客户端连接协议,和连接数据库的协议


路由插件


决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的


监控插件


对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了


日志和过滤插件


提供简单的数据库防火墙功能,可以对SQL进行过滤和容错



MaxScale 的安装使用


例如有 3 台数据库服务器,是一主二从的结构


过程概述



(1)配置好集群环境


(2)下载安装 MaxScale


(3)配置 MaxScale,添加各数据库信息


(4)启动 MaxScale,查看是否正确连接数据库


(5)客户端连接 MaxScale,进行测试



详细过程



(1)配置一主二从的集群环境


准备3台服务器,安装 Mysql,配置一主二从的复制结构


主从复制的配置过程可以参考以前的一篇文章



(2)安装 MaxScale


最好在另一台服务器上安装,如果资源不足,可以和某个 Mysql 放在一起


MaxScale 的下载地址


https://downloads.mariadb.com/files/MaxScale


根据自己的服务器选择合适的安装包


以 centos 7 为例 安装步骤如下:


yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y


rpm -ivh maxscale-1.4.3-1.centos.7.x86_64.rpm


(3)配置 MaxScale


在开始配置之前,需要在 master 中为 MaxScale 创建两个用户,用于监控模块和路由模块


创建监控用户


mysql> create user scalemon@'%' identified by "111111";

mysql> grant replication slave, replication client on *.* to scalemon@'%';


创建路由用户 


mysql> create user maxscale@'%' identified by "111111";

mysql> grant select on mysql.* to maxscale@'%';


用户创建完成后,开始配置


vi /etc/maxscale.cnf


找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口


复制2次 [server1] 的整块儿内容,改为 [server2] 与 [server3],同样修改其中的 address 和 port,分别指向 slave1 和 slave2


Mysql 读写分离中间件 MaxScale


找到 [MySQL Monitor] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的监控用户的信息(scalemon,111111)


Mysql 读写分离中间件 MaxScale


找到 [Read-Write Service] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的路由用户的信息(maxscale,111111)


Mysql 读写分离中间件 MaxScale


由于我们使用了 [Read-Write Service],需要删除另一个服务 [Read-Only Service],删除其整块儿内容即可


配置完成,保存并退出编辑器


(4)启动 MaxScale


执行启动命令 


maxscale --config=/etc/maxscale.cnf


查看 MaxScale 的响应端口是否已经就绪


netstat -ntelp


Mysql 读写分离中间件 MaxScale


4006 是连接 MaxScale 时使用的端口

6603 是 MaxScale 管理器的端口


登录 MaxScale 管理器,查看一下数据库连接状态,默认的用户名和密码是 admin/mariadb


maxadmin --user=admin --password=mariadb


MaxScale> list servers


Mysql 读写分离中间件 MaxScale


可以看到,MaxScale 已经连接到了 master 和 slave


(5)测试


先在 master 上创建一个测试用户


mysql> grant ALL PRIVILEGES on *.* tortest@"%" Identified by "111111";


使用 Mysql 客户端到连接 MaxScale


mysql -h MaxScale所在的IP -P 4006 -u rtest -p111111


执行查看数据库服务器名的操作来知道当前实际所在的数据库


Mysql 读写分离中间件 MaxScale


开启事务后,就自动路由到了 master,普通的查询操作,是在 slave上


MaxScale 的配置完成了