MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。
本实验环境:
中间件 | 192.168.40.150 | Maxscale MaxScale 24.02.4 |
Master | 192.168.40.151 | Ver 8.0.35 for Linux on x86_64 |
slave | 192.168.40.152 | Ver 8.0.35 for Linux on x86_64 |
先实现主从同步,参照我的这篇文章:MySQL主从复制实验-优快云博客
在开始配置之前,需要在 master
中为 MaxScale 创建两个用户,用于监控模块和路由模块,已经实现主从复制的前提下,主库创建的用户,能同步到从库上。
监控模块的主要职责是监视数据库集群的状态。它确保每个数据库服务器(无论是主库还是从库)都在正常运行,并且复制过程没有出现任何问题。
路由模块则是MaxScale读写分离架构中的另一个核心组件。它的主要任务是根据客户端的请求类型(读或写)和数据库集群的当前状态,将请求路由到最合适的数据库服务器上。
--创建用户
create user 'maxscale_monitor'@'192.168.40.%' identified with mysql_native_password by '@OPENlab';
--用户授权 “同步复制”、“同步复制状态”
grant replication slave, replication client on *.* to maxscale_monitor@'192.168.40.%';
- REPLICATION SLAVE:
- 这个权限允许用户连接到MySQL服务器,并请求从另一个MySQL服务器(称为主服务器)复制数据。拥有这个权限的用户可以执行与复制相关的操作,比如启动或停止复制线程、获取复制状态信息等。
- 在主从复制架构中,从服务器上的复制用户通常需要这个权限,以便能够从主服务器拉取数据更新。
- REPLICATION CLIENT:
- 这个权限允许用户查询主服务器或从服务器的复制状态信息。拥有这个权限的用户可以查看复制的状态、进程列表等,但不能执行数据复制的实际操作(比如启动或停止复制线程)。
- 这个权限通常用于监控和诊断复制问题的场景,因为它提供了对复制状态的访问权限,而不涉及实际的复制操作。
创建路由用户:
--创建用户
create user 'maxscale_route'@'192.168.150.%' identified with mysql_native_password by '@OPENlab123';
--用户授权
GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.40.%';
GRANT SELECT ON mysql.user TO maxscale_route@'192.168.40.%';
GRANT SELECT ON mysql.db TO maxscale_route@'192.168.40.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.40.%';
GRANT SELECT ON mysql.columns_priv TO maxscale_route@'192.168.40.%';
GRANT SELECT ON mysql.proxies_priv TO maxscale_route@'192.168.40.%';
到这里我们已经配置好了mysql服务器的基本配置,现在我们开始下载Maxscale,在中间件上面
这里我们使用以下命令发现没有存在相关maxscale rpm包
dnf list | grep -i maxscale
所以我们需要从官方拉取rpm包,见官方文档:MariaDB Package Repository Setup and Usage - MariaDB Knowledge Base
我们使用以下命令
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash如果出现需要证书可以加一个K,即-LsSK
此时我们的/etc/yum.repo.d/目录就会多一个mariadb.repo,这里已经配置好了yum源,我们可以检查
[root@server-test ~]# yum list | grep maxscale
maxscale.x86_64 24.02.4-1.rhel.9 @mariadb-maxscale
通过yum命令下载即可
maxscale的配置文件所为/etc/maxscale.cnf和/etc/maxscale.cnf.d/目录下面,日志文件在/var/log/maxscale/maxscale.log
可以直接配置/etc/maxscale.cnf和在/etc/maxscale.cnf.d/目录创建一个.cnf结尾的文件。这里直接配置maxscale.cnf文件
配置内容如下:
[root@server-test ~]# cat /etc/maxscale.cnf
[maxscale]
threads=auto# 开启线程个数,默认为1.设置为auto会同cpu核数相同
[dbserver1]
type=server
address=192.168.40.151
port=3306
protocol=MariaDBBackend
[dbserver2]
type=server
address=192.168.40.152
port=3306
protocol=MariaDBBackend
[MariaDB-Monitor]#监控用户,监控主从服务
type=monitor
module=mariadbmon
servers=dbserver1, dbserver2
user=maxscale_monitor
password=@OPENlab123
monitor_interval=2s#监控间隔时间
[Read-Writer-Service]#读写服务
type=service
router=readwritesplit
servers=dbserver1, dbserver2#master需要写在前面
user=maxscale_route
password=@OPENlab123
enable_root_user=true#默认禁用root,可以开启,可以关闭
[Read-Writer-Listener]#本机上面的监控访问的IP和端口
type=listener
service=Read-Writer-Service
protocol=MariaDBClient
address=0.0.0.0
port=3306
配置完成之后使用:systemctl start maxscale启动服务,通过maxctrl查看允许状态和允许服务
[root@server-test ~]# maxctrl list servers
┌───────────┬───────────────┬──────┬─────────────┬─────────────────┬──────┬─────────────────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │ Monitor │
├───────────┼───────────────┼──────┼─────────────┼─────────────────┼──────┼─────────────────┤
│ dbserver1 │ 192.168.40.151 │ 3306 │ 0 │ Masrer, Running │ │ MariaDB-Monitor │
├───────────┼───────────────┼──────┼─────────────┼─────────────────┼──────┼─────────────────┤
│ dbserver2 │ 192.168.40.152 │ 3306 │ 0 │ Slave, Running │ │ MariaDB-Monitor │
└───────────┴───────────────┴──────┴─────────────┴─────────────────┴──────┴─────────────────┘
[root@server-test ~]# maxctrl list services
┌─────────────────────┬────────────────┬─────────────┬───────────────────┬──────────────────────┐
│ Service │ Router │ Connections │ Total Connections │ Targets │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼──────────────────────┤
│ Read-Writer-Service │ readwritesplit │ 1 │ 1 │ dbserver1, dbserver2 │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴──────────────────────┘
以上就成功实现了读写分离,所有问题都可以通过查看日志文件找到答案
/var/log/maxscale/maxscale.log
比如
这些都是配置文件时出现的问题
补充一点:开启GUI功能
根据官方文档可见,在配置文件maxscale.cnf中添加两行内容即可,默认是172.0.0.1:8989才可以访问
[maxscale]
threads=auto
admin_host=0.0.0.0#添加的内容
admin_secure_gui=false#添加的内容
重启服务:systemctl restart maxscale
现在就可以登录maxscale进行管理了,用户为admin,密码为mariadb,端口8989