MariaDB MaxScale实现mysql8读写分离

目录

[1.MaxScale 是干什么的?](#1.MaxScale 是干什么的?)

[2.MaxScale 实验环境](#2.MaxScale 实验环境)

3.实现数据库主从复制

4.创建用户

1) 创建监控用户 创建监控用户)

2) 创建路由用户 创建路由用户)

[5.docker 安装MaxScale](#5.docker 安装MaxScale)

6.配置maxscale

[使用 maxctrl list servers 命令查看运行状态](#使用 maxctrl list servers 命令查看运行状态)

查看注册服务

[使用 maxctrl list listeners Read-Write-Service 命令查看服务监听状态信息](#使用 maxctrl list listeners Read-Write-Service 命令查看服务监听状态信息)


1.MaxScale 是干什么的?

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

2.MaxScale 实验环境

中间件 192.168.20.150 MaxScale 22.08.4
主服务器 192.168.20.149 mysql 8.0.30
从服务器 192.168.20.148 mysql 8.0.30
从服务器 192.168.150.146 mysql 8.0.30

3.实现数据库主从复制

分别在三台服务器的/etc/my.cnf.d/mysql-server.cnf添加:

bash 复制代码
server_id=149 / 148  /146  (这个不要相同,下面两个可以相同)
gtid_mode=ON
enforce-gtid-consistency=ON

两个从服务器的/etc/my.cnf.d/mysql-server.cnf添加

bash 复制代码
read_only=1

在主服务器添加用户

bash 复制代码
create user 'rep'@'192.168.20.%' identified with mysql_native_password by '123456';
--用户授权 "同步复制"、"同步复制状态"
grant replication slave on *.* to 'rep'@'192.168.150.%';
bash 复制代码
--配置主从同步
CHANGE MASTER TO
MASTER_HOST = '192.168.20.149',
MASTER_USER = 'rep',
MASTER_PASSWORD = '123456',
MASTER_AUTO_POSITION = 1;

--启动主从同步
start slave

双yes就是成功(两个从服务器都要求)

4.创建用户

需要在 master中为 MaxScale 创建两个用户,用于监控模块和路由模块,已经实现主从复制的前提下,主库创建的用户,能同步到从库上

1) 创建监控用户
bash 复制代码
--创建用户
create user 'maxscale_monitor'@'192.168.20.%' identified with mysql_native_password by 'Admin@123456';
--用户授权 "同步复制"、"同步复制状态"
grant replication slave, replication client on *.* to maxscale_monitor@'192.168.20.%';
2) 创建路由用户
bash 复制代码
--创建用户
create user 'maxscale_route'@'192.168.20.%' identified with mysql_native_password by 'Admin@123456';
--用户授权
GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.20.%';
GRANT SELECT ON mysql.user TO maxscale_route@'192.168.20.%';
GRANT SELECT ON mysql.db TO maxscale_route@'192.168.20.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.20.%';
GRANT SELECT ON mysql.columns_priv TO maxscale_route@'192.168.20.%';
GRANT SELECT ON mysql.proxies_priv TO maxscale_route@'192.168.20.%';

5.docker 安装MaxScale

先安装docker,然后启动容器实例

bash 复制代码
[root@openEuler-node3 ~]# yum install docker -y
[root@openEuler-node3 ~]# systemctl enable --now docker
[root@openEuler-node3 ~]#  docker run -d --name mxs -p 8989:8989 -p 3306:3306 -v /data/maxscale/maxscale.cnf:/etc/maxscale.cnf.d mariadb/maxscale:latest
Unable to find image 'mariadb/maxscale:latest' locally
latest: Pulling from mariadb/maxscale
7ecefaa6bd84: Pull complete 
ca0e00deb174: Pull complete 
a477bc0ba89b: Pull complete 
1197a5109a4f: Pull complete 
07a9436e0cbc: Pull complete 
ea7a1629d291: Pull complete 
22d7399fd0e3: Pull complete 
9de24e307d1e: Pull complete 
4b69deb551d5: Pull complete 
099ea1430764: Pull complete 
ebc519f0dc79: Pull complete 
Digest: sha256:5c658141992f1b83580759137bbe1b881ebe73e07c85819e46a8a14f332ff690
Status: Downloaded newer image for mariadb/maxscale:latest
832d4689e6c5f9333d089ef2fa39a6c498b10d8da7a1c414e45cb4e0db8bf9ba
[root@openEuler-node3 ~]# 
[root@openEuler-node3 ~]# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                                            NAMES
832d4689e6c5        mariadb/maxscale:latest   "/usr/bin/tini -- do..."   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 0.0.0.0:8989->8989/tcp   mxs
[root@openEuler-node3 ~]# docker exec -it mxs bash
[root@832d4689e6c5 /]# maxscale -version
MaxScale 23.08.4

我们看到版本信息

6.配置maxscale

在,/etc/maxscale.cnf.d新建一个配置my.cnf或者直接修改/etc/maxscale.cnf文件

bash 复制代码
[root@832d4689e6c5 /]# cat /etc/maxscale.cnf.d/my.cnf 
[maxscale]
threads=auto

[dbserv1]
type=server
address=192.168.20.149
port=3306
protocol=MariaDBBackend

[dbserv2]
type=server
address=192.168.20.148
port=3306
protocol=MariaDBBackend

[dbserv3]
type=server
address=192.168.20.146
port=3306
protocol=MariaDBBackend

[MySQL-Monitor]
type=monitor
module=mariadbmon
servers=dbserv1, dbserv2, dbserv3
user=maxscale_monitor
password=Admin@123456
monitor_interval=2s

[Read-Write-Service]
type=service
router=readwritesplit
servers=dbserv1,dbserv2,dbserv3
user=maxscale_route
password=Admin@123456
enable_root_user=true

[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
address=0.0.0.0
port=3306

配置完成后重启docker、MaxScale服务:

bash 复制代码
[root@4e2804021a7d /]# maxscale -f /etc/maxscale.cnf.d/my.cnf -U maxscale

使用 maxctrl list servers 命令查看运行状态

查看注册服务

使用 maxctrl list listeners Read-Write-Service 命令查看服务监听状态信息

到这里服务已经完成了,测试内容我有时间分享,思路可以是:

在master主机授权测试用户

客户端client访问读写分离服务器

master主机验证查看数据

slave主机验证查看数据

slave主机插入数据,主服务器不会同步;

使用client客户端访问验证,能看到slave插入的数据,代表查询操作是slave主机提供服务;

相关推荐
技术宝哥1 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸3 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1233 小时前
Redis解析
数据库·redis·缓存
数据库幼崽3 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd3 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou4 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh4 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵6 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多6 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆6 小时前
MySQL——1、数据库基础
数据库·adb