当前位置: 首页 > news >正文

MariaDB MaxScale实现mysql8读写分离

目录

1.MaxScale 是干什么的?

2.MaxScale 实验环境

3.实现数据库主从复制

4.创建用户

 1) 创建监控用户

2) 创建路由用户

5.docker 安装MaxScale

6.配置maxscale

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

查看注册服务

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


1.MaxScale 是干什么的?

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

2.MaxScale 实验环境

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

3.实现数据库主从复制

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

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

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

read_only=1

在主服务器添加用户

create user 'rep'@'192.168.20.%' identified with mysql_native_password by '123456';
--用户授权 “同步复制”、“同步复制状态”
grant replication slave on *.* to 'rep'@'192.168.150.%';
--配置主从同步
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) 创建监控用户
--创建用户
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) 创建路由用户
--创建用户
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,然后启动容器实例

[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文件

[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服务:

[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主机提供服务;

相关文章:

  • Mysql 的高可用详解
  • day10_日志模块AOP
  • JavaWeb HTTP 请求头、请求体、响应头、响应体、响应状态码
  • 升级 Vue版本从 2.5.x 到 2.6.x
  • c++ - pointer convert - class member function‘s pointer <==> void*
  • 包管理工具之npm也慌了?
  • mTLS: openssl创建CA证书
  • python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析
  • OpenHarmony Docker移植实践
  • react useMemo 用法
  • 跨境知识分享:什么是动态IP?和静态IP有什么区别?
  • uni-app 页面跳转动画
  • 前端学习第三天-css基础
  • 了解处理器
  • leetcode-字符串相加
  • hexo+github搭建个人博客
  • 【5+】跨webview多页面 触发事件(二)
  • Angular 响应式表单之下拉框
  • chrome扩展demo1-小时钟
  • Netty 4.1 源代码学习:线程模型
  • PhantomJS 安装
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • 包装类对象
  • 前端js -- this指向总结。
  • 收藏好这篇,别再只说“数据劫持”了
  • 怎样选择前端框架
  • 【干货分享】dos命令大全
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​ubuntu下安装kvm虚拟机
  • ​人工智能书单(数学基础篇)
  • ![CDATA[ ]] 是什么东东
  • #etcd#安装时出错
  • #stm32整理(一)flash读写
  • (1)(1.13) SiK无线电高级配置(六)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二十三)Flask之高频面试点
  • (三)终结任务
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ***通过什么方式***网吧
  • .NET Core 2.1路线图
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .Net7 环境安装配置
  • .net专家(张羿专栏)
  • @private @protected @public
  • @RequestMapping 的作用是什么?
  • @基于大模型的旅游路线推荐方案
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [Django 0-1] Core.Checks 模块