目录

一、概述

MaxScale 数据库代理工具简介

核心功能

主要特点

典型使用场景

二、读写分离

1、环境说明

2、mysql主从复制配置

3、maxscale安装

4、配置maxscale

一、概述

MaxScale 数据库代理工具简介

MaxScale 是 MariaDB 公司开发的智能数据库代理和负载均衡工具,专门为 MySQL/MariaDB 数据库设计。

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

核心功能

  1. 负载均衡

    • 在多个数据库服务器间分配查询负载

    • 支持读写分离(主从架构)

  2. 高可用性

    • 自动故障检测和故障转移

    • 支持主从切换和自动重连

  3. 查询路由

    • 基于SQL语句内容的路由决策

    • 可将特定查询定向到特定服务器

  4. 安全功能

    • 数据库防火墙

    • 查询过滤和重写

    • 连接加密

主要特点

  • 完全兼容 MySQL 协议

  • 支持多种路由模块(读/写分离、分片等)

  • 可插拔架构,支持自定义模块开发

  • 提供REST API进行监控和管理

  • 支持二进制日志服务器功能

典型使用场景

  1. 作为MySQL/MariaDB集群的入口点

  2. 实现透明的读写分离

  3. 数据库连接池管理

  4. 在不修改应用代码的情况下扩展数据库架构

  5. 提供数据库访问的审计和监控层

二、读写分离

网络拓扑图

1、环境说明

数据库角色IP应用与系统版本
master192.168.150.13rocky linux9.4 mariadb- 10.5.27
slave192.168.150.14rocky linux9.4 mariadb- 10.5.27
slave2192.168.150.15rocky linux9.4 mariadb- 10.5.27
maxscale192.168.150.16rocky linux9.4 maxscale24.02.3-GA

2、mysql主从复制配置

分别在主从三台服务器上安装mariadb,并配置主从复制。

安装

[root@mysql-master ~]# yum install -y mariadb-server

[root@mysql-slave1 ~]#  yum install -y mariadb-server

root@mysql-slave2 ~]#  yum install -y mariadb-server

配置

MariaDB [mysql]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      667 |              |                  |
+-------------------+----------+--------------+------------------+

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.150.13
                   Master_User: slave
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: master-bin.000001
           Read_Master_Log_Pos: 667
                Relay_Log_File: mariadb-relay-bin.000002
                 Relay_Log_Pos: 556
         Relay_Master_Log_File: master-bin.000001
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes

验证

主

MariaDB [mysql]> create database jx;
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
+--------------------+

从

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
+--------------------+

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
+--------------------+

3、maxscale安装

[root@maxscale ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  maxscale-24.02.3-1.rhel.9.x86_64.rpm
[root@maxscale ~]# yum install -y maxscale-24.02.3-1.rhel.9.x86_64.rpm

4、配置maxscale

在maxscale上安装mariadb

[root@maxscale ~]# yum install -y mariadb-server

登录到主库

创建maxscale用户

MariaDB [mysql]> create user 'maxscale'@'%' identified by 'maxscale';
Query OK, 0 rows affected (0.002 sec)

赋权

MariaDB [mysql]> grant select on mysql.* to 'maxscale'@'%';
Query OK, 0 rows affected (0.001 sec)

MariaDB [mysql]> grant show databases  on *.* to 'maxscale'@'%';
Query OK, 0 rows affected (0.001 sec)

创建admin用户可以在maxscale上登录

MariaDB [mysql]> create user 'admin'@'192.168.150.%' identified by 'admin';
Query OK, 0 rows affected (0.001 sec)

赋权

MariaDB [mysql]> grant create,select,insert,update,delete on *.* to 'admin'@'192.168.150.%';
Query OK, 0 rows affected (0.002 sec)

在maxscale上修改配置文件

切换到主库创建monitor用户

MariaDB [(none)]> create user 'monitor'@'%' identified by 'monitor';
Query OK, 0 rows affected (0.002 sec)

赋权

MariaDB [(none)]>  GRANT REPLICATION CLIENT on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]>  GRANT REPLICATION SLAVE on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]>  GRANT SUPER,RELOAD on *.* to 'monitor'@'%';
Query OK, 0 rows affected (0.001 sec)

启动服务

[root@maxscale maxscale]# systemctl start maxscale

查看有哪些服务

[root@maxscale maxscale]# maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬───────────────────────────┐
│ Service            │ Router         │ Connections │ Total Connections │ Targets                   │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Write-Service │ readwritesplit │ 0           │ 0                 │ server1, server2, server3 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴───────────────────────────┘

查看后台服务器有哪些

[root@maxscale maxscale]# maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬─────────┬───────────────┐
│ Server  │ Address        │ Port │ Connections │ State           │ GTID    │ Monitor       │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server1 │ 192.168.150.13 │ 3306 │ 0           │ Master, Running │ 0-11-12 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server2 │ 192.168.150.14 │ 3306 │ 0           │ Slave, Running  │ 0-11-12 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server3 │ 192.168.150.15 │ 3306 │ 0           │ Slave, Running  │ 0-11-12 │ MySQL-Monitor │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴─────────┴───────────────┘

测试

客户机使用admin用户连接maxscale

[root@localhost ~]# mysql -uadmin -p -h192.168.150.16
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.5-10.5.27-MariaDB MariaDB Server

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

创建数据库和表并在主库和从库上检验

mysql> create database jx;
Query OK, 1 row affected (0.01 sec)

mysql> use jx;
Database changed
mysql> create table info(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> select * from info;
Empty set (0.03 sec)

主

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
+--------------------+

从

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jx                 |
| mysql              |
| performance_schema |
+--------------------+

maxscale

[root@maxscale ~]# maxctrl list servers
┌─────────┬────────────────┬──────┬─────────────┬─────────────────┬─────────┬───────────────┐
│ Server  │ Address        │ Port │ Connections │ State           │ GTID    │ Monitor       │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server1 │ 192.168.150.13 │ 3306 │ 1           │ Master, Running │ 0-11-19 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server2 │ 192.168.150.14 │ 3306 │ 1           │ Slave, Running  │ 0-11-19 │ MySQL-Monitor │
├─────────┼────────────────┼──────┼─────────────┼─────────────────┼─────────┼───────────────┤
│ server3 │ 192.168.150.15 │ 3306 │ 0           │ Running         │ 0-11-13 │ MySQL-Monitor │
└─────────┴────────────────┴──────┴─────────────┴─────────────────┴─────────┴───────────────┘

会发现进行读操作时,是在slave的从数据库上执行;在进行写操作时,是在master主数据库上执行。

更多推荐