Maxscale实现读写分离

MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡

 本实验环境:

中间件192.168.40.150Maxscale MaxScale 24.02.4
Master192.168.40.151Ver 8.0.35 for Linux on x86_64
slave192.168.40.152Ver 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.%';
  1. REPLICATION SLAVE
    • 这个权限允许用户连接到MySQL服务器,并请求从另一个MySQL服务器(称为主服务器)复制数据。拥有这个权限的用户可以执行与复制相关的操作,比如启动或停止复制线程、获取复制状态信息等。
    • 在主从复制架构中,从服务器上的复制用户通常需要这个权限,以便能够从主服务器拉取数据更新。
  2. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值