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

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的?

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

img

2.MaxScale 实验环境

中间件192.168.121.160(Rocky8)MaxScale 22.08.4
主服务器192.168.121.150(open-Euler1)mysql 8.0.36
从服务器192.168.121.151(open-Euler2)mysql 8.0.36
从服务器192.168.121.152(open-Euler3)mysql 8.0.36

3.实现数据库主从复制

# tail -4 /etc/hosts
192.168.150.21 master  (实际主机名:open-Euler1)
192.168.150.22 slave1  (open-Euler2) 
192.168.150.23 slave2  (open-Euler3)
192.168.150.24 prox    (Rocky8) 
# 主库配置
# tail -3 /etc/my.cnf.d/mysql-server.cnf
server_id=150
gtid_mode=ON
enforce-gtid-consistency=ON
# systemctl restart mysqld--创建用户
create user 'rep'@'192.168.121.%' identified with mysql_native_password by '123456';
--用户授权 “同步复制”、“同步复制状态”
grant replication slave on *.* to 'rep'@'192.168.121.%';
--从库配置
# tail -3 /etc/my.cnf.d/mysql-server.cnf
server_id=151/152
gtid_mode=ON
enforce-gtid-consistency=ON
read_only=ON
# systemctl restart mysqld--配置主从同步
CHANGE MASTER TO
MASTER_HOST = '192.168.121.150',
MASTER_USER = 'rep',
MASTER_PASSWORD = '123456',
MASTER_AUTO_POSITION = 1;--启动主从同步
start slave--检查
# mysql -e 'show slave status \G'  | grep -E -w "Slave_IO_Running|Slave_SQL_Running"Slave_IO_Running: YesSlave_SQL_Running: Yes

4.创建用户

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

1) 创建监控用户 

--创建用户
create user 'maxscale_monitor'@'192.168.121.%' identified with mysql_native_password by 'Admin@123456';
--用户授权 “同步复制”、“同步复制状态”
grant replication slave, replication client on *.* to maxscale_monitor@'192.168.121.%';

2) 创建路由用户

--创建用户
create user 'maxscale_route'@'192.168.121.%' identified with mysql_native_password by 'Admin@123456';
--用户授权
GRANT SHOW DATABASES ON *.* TO maxscale_route@'192.168.121.%';
GRANT SELECT ON mysql.user TO maxscale_route@'192.168.121.%';
GRANT SELECT ON mysql.db TO maxscale_route@'192.168.121.%';
GRANT SELECT ON mysql.tables_priv TO maxscale_route@'192.168.121.%';
GRANT SELECT ON mysql.columns_priv TO maxscale_route@'192.168.121.%';
GRANT SELECT ON mysql.proxies_priv TO maxscale_route@'192.168.121.%';

5.安装MaxScale

1)docker安装

代理服务器在 Download MariaDB Products & Tools | MariaDB 选择对应系统合适的版本下载安装,我这里使用docker 安装

# yum install docker -y
# systemctl enable --now docker# 管理后台端口8989,3306中间件连接端口 docker run -d --name mxs -p 8989:8989 -p 3306:3306 -v /data/maxscale/maxscale.cnf:/etc/maxscale.cnf.d mariadb/maxscale:latest# docker save mariadb/maxscale:latest -o maxscale_latest.tar

启动后 可登录到docker容器,查看MaxScale版本与日志信息

# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                            NAMES
4e2804021a7d        mariadb/maxscale:latest   "/usr/bin/tini -- do…"   3 minutes ago       Up 3 minutes        0.0.0.0:3306->3306/tcp, 0.0.0.0:8989->8989/tcp   mxs# 登录容器
docker exec -it mxs bash
# 查看版本信息
[root@4e2804021a7d /]# maxscale -version
MaxScale 23.08.3
# 查看版本日志
cat /var/log/maxscale/maxscale.log

2)yum(dnf)源安装

# 配置存储库源
[root@localhost ~]# curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash# 安装maxscale
[root@localhost ~]# dnf install maxscale -y

6.配置maxscale

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

[maxscale]
threads=auto # 开启线程个数,默认为1.设置为auto会同cpu核数相同
admin_host=0.0.0.0
admin_secure_gui=false[dbserv1] # 定义服务器主机1
type=server
address=192.168.121.150
port=3306
protocol=MariaDBBackend[dbserv2] # 定义服务器主机2
type=server
address=192.168.121.151
port=3306
protocol=MariaDBBackend[dbserv3] # 定义服务器主机1
type=server
address=192.168.121.152
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=3307

配置完成后 重启MaxScale服务,可用命令启动:

maxscale -f /etc/maxscale.cnf.d/my.cnf -U maxscale

当然也可以直接用服务启动:

systemctl start maxscale.service 

注:使用其一即可,如果已经用命令启动还想用服务启动的话得先用kill关闭之前启动的所有maxscale进程哦。具体如下:

[root@Rocky8 ~]# ps -ef | grep maxscale
maxscale     849       1  0 03:57 ?        00:00:01 /usr/bin/maxscale
root        1769    1637  0 04:39 pts/0    00:00:00 grep --color=auto maxscale# 关闭进程,停止服务
[root@Rocky8 ~]# killall -9 maxscale
(如果之前用命令启动没有关闭的话完成这个之后就能用服务启动咯)

查看maxscale状态:

使用 maxctrl list servers 命令查看运行状态
[root@Rocky8 ~]# maxctrl list servers
┌─────────┬─────────────────┬──────┬─────────────┬───────┬──────┬───────────────┐
│ Server  │ Address         │ Port │ Connections │ State │ GTID │ Monitor       │
├─────────┼─────────────────┼──────┼─────────────┼───────┼──────┼───────────────┤
│ dbserv1 │ 192.168.121.150 │ 3306 │ 0           │ Down  │      │ MySQL-Monitor │
├─────────┼─────────────────┼──────┼─────────────┼───────┼──────┼───────────────┤
│ dbserv2 │ 192.168.121.151 │ 3306 │ 0           │ Down  │      │ MySQL-Monitor │
├─────────┼─────────────────┼──────┼─────────────┼───────┼──────┼───────────────┤
│ dbserv3 │ 192.168.121.152 │ 3306 │ 0           │ Down  │      │ MySQL-Monitor │
└─────────┴─────────────────┴──────┴─────────────┴───────┴──────┴───────────────┘查看注册服务
[root@Rocky8 ~]# maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬───────────────────────────┐
│ Service            │ Router         │ Connections │ Total Connections │ Targets                   │
├────────────────────┼────────────────┼─────────────┼───────────────────┼───────────────────────────┤
│ Read-Write-Service │ readwritesplit │ 0           │ 0                 │ dbserv1, dbserv2, dbserv3 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴───────────────────────────┘使用 maxctrl list listeners Read-Write-Service 命令查看服务监听状态信息
[root@Rocky8 ~]# maxctrl list listeners Read-Write-Service
┌─────────────────────┬──────┬─────────┬─────────┬────────────────────┐
│ Name                │ Port │ Host    │ State   │ Service            │
├─────────────────────┼──────┼─────────┼─────────┼────────────────────┤
│ Read-Write-Listener │ 3307 │ 0.0.0.0 │ Running │ Read-Write-Service │
└─────────────────────┴──────┴─────────┴─────────┴────────────────────┘

7.客户端连接测试

1)在 master中创建一个访问用户,已经实现主从复制的前提下,主库创建的用户,能同步到从库上

-- 创建用户
create user 'admin_user'@'%' identified with mysql_native_password by 'Admin@123456'; --msql 8.0.x 用户认证的方式需要修改为 mysql_native_password
--用户授权
grant all privileges on *.* to 'admin_user'@'%' with grant option;

2)测试读写分离和负载均衡

[root@Rocky8 ~]# mysql -uadmin_user -p'Admin@123456' -h 192.168.121.160 -e "select @@server_id"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|         150 |
+-------------+
[root@Rocky8 ~]# mysql -uadmin_user -p'Admin@123456' -h 192.168.121.160 -e "select @@server_id"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|         151 |
+-------------+
[root@Rocky8 ~]# mysql -uadmin_user -p'Admin@123456' -h 192.168.121.160 -e "begin;select @@server_id commit;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|         152 |
+-------------+

3)可以在从库中 slave(192.168.121.152) 新增一条数据,登录主库 master(192.168.121.150) 进行查询如果查询不到,在中间件连接库中 maxscale(192.168.121.160) 可以查询到则成功(不建议,会破坏主从同步)

8.配置maxscale的web管理界面

(1)在maxscale配置文件中[maxscale]下添加两行配置

[root@Rocky8 ~]# vim /etc/maxscale.cnf
[root@Rocky8 ~]# head -n4 /etc/maxscale.cnf
[maxscale]
threads=auto
admin_host=0.0.0.0
admin_secure_gui=false
[root@localhost ~]# systemctl restart maxscale

(2)访问 http://192.168.121.160:8989(默认账户密码如下)

相关文章:

MariaDB *MaxScale*实现mysql8读写分离

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

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

MySQL的事务实现原理和隔离级别?

目录 MySQL 事务实现原理 1. 事务的基本概念 2. 实现原理 日志系统 锁机制 MySQL 隔离级别 1. 隔离级别概述 2. 各隔离级别详解 读未提交(Read Uncommitted) 读已提交(Read Committed) 可重复读(Repeatable Read) 串行化(Serializable) 3. 设置隔离级别 My…...

JVM做GC垃圾回收时需要多久,都由哪些因素决定的

JVM进行垃圾回收(GC)的时间长短受多种因素影响,主要包括以下几个方面: 1. 堆内存大小 堆内存越大,GC需要扫描和回收的对象越多,耗时越长。堆内存较小时,GC频率增加,但每次回收的时…...

padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))

CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释: 20rpx(上边距):设置元素顶部的填充为20rpx。0rpx(右边距):设置元素右侧的填充为0rpx。20rpx&a…...

2025-2-10-4.4 双指针(基础题1)

文章目录 4.4 双指针(基础题)**344. 反转字符串****125. 验证回文串****1750. 删除字符串两端相同字符后的最短长度****167.两数之和 II - 输入有序数组****2105. 给植物浇水 II****977. 有序数组的平方****658. 找到K个最接近的元素****1471. 数组中的k…...

Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)

效果:由于录制软件导致exe显示不正常,实际运行没有任何问题。 说明:exe试用下载(提取码: 4d8y )...

微信小程序如何使用decimal计算金额

第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…...

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++模板编程——typelist的实现

文章最后给出了汇总的代码,可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似,只不过typelist存储的不是变量,而是类型。 typelist简单来说就是一个类型容器,能够提供一…...

Python3 ImportError: cannot import name ‘XXX‘ from ‘XXX‘

个人博客地址&#xff1a;Python3 ImportError: cannot import name XXX from XXX | 一张假钞的真实世界 例如如下错误&#xff1a; $ python3 git.py Traceback (most recent call last):File "git.py", line 1, in <module>from git import RepoFile &quo…...

数据可视化与交互融合:APP 界面设计的新维度

在数字化浪潮汹涌的当下&#xff0c;APP 已成为人们生活和工作中不可或缺的工具。如何在众多 APP 中脱颖而出&#xff0c;界面设计至关重要。而数据可视化与交互的融合&#xff0c;正为 APP 界面设计开辟了全新的维度。 数据可视化&#xff0c;简单来说&#xff0c;就是将复杂…...

502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决

502 Bad Gateway 错误通常意味着服务器之间的通信失败&#xff0c;但导致的具体原因往往因场景而异。 场景一&#xff1a;高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间&#xff08;如促销活动、直播发布等&#xff09;&#xff0c;页面访问变慢甚至出现 502 错误&#…...

控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解

控制论与信息论&#xff1a;维纳和香农的核心分歧在于对「信息本质」的理解 核心结论 控制论是「系统的方向盘」&#xff0c;通过反馈调节实现目标信息论是「信息的尺子」&#xff0c;量化信息传输的精度与效率根本分歧&#xff1a;维纳认为信息是「系统维持秩序的工具」&…...

Baklib优化数字化内容管理用科技提升商业效率与增值潜力

内容概要 在当今数字化迅速发展的时代&#xff0c;数字化内容管理已成为企业提升竞争力的重要手段。Baklib作为一款强大的智能优化内容管理系统&#xff0c;通过先进的科技手段&#xff0c;帮助企业在内容管理和数据整合方面实现高效运作。Baklib 是什么类型的工具&#xff0c…...

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码示例&#xff0c;使用Arduino语言&#xff1a; 硬件连接 INMP441 VCC → ESP32的3.3VINMP441 GND → ESP32的GNDINMP441 SCK → ESP32的GPIO 17INMP441 WS → ESP32的GPIO 18INMP441 SD → ESP32的GPIO 16RG…...

利用二分法进行 SQL 时间盲注

什么是时间盲注&#xff1f; SQL 盲注&#xff08;Blind SQL Injection&#xff09;是一种常见的 Web 安全漏洞&#xff0c;其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时&#xff0c;我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …...

Linux运维——用户管理

Linux用户管理 一、Linux用户管理要点二、常用命令2.1、groupadd2.2、groupdel2.3、groupmod2.4、groups2.5、useradd2.6、userdel2.7、passwd2.9、su2.10、sudo2.10.1、给普通用户授权 sudo2.10.2、 免密码授权 sudo 一、Linux用户管理要点 创建用户组 - 使用 groupadd删除用…...

基于STM32的声纹识别智能门锁

一、项目背景与意义 行业痛点&#xff1a;传统指纹锁存在表皮磨损识别失败风险&#xff0c;声纹具备活体检测特性 技术优势&#xff1a; - 采用MFCC&#xff08;梅尔频率倒谱系数&#xff09;替代传统FFT&#xff0c;提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…...

【密评】 | 商用密码应用安全性评估从业人员考核题库(19)

在SM9数字签名的生成和验证过程之前,杂凑函数( )。 A.仅对待签名消息进行压缩 B.仅对待验证消息进行压缩 C.对待签名消息和待验证消息都要压缩 D.不起任何作用 SM9密钥封装机制封装的秘密密钥是( )生成的。 A.根据主公钥 B.根据接受者的用户标识 C.由随机数发生器 D.以上都…...

redis底层数据结构——链表

文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力&#xff0c;以及顺序性的节点访间方式&#xff0c;并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构&#xff0c;链表内置在很多高级的编程语言里面&#xff0c;因为Redis使用的C语言并没有…...

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…...

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

芋道源码(无遮羞布版)Spring Boot 全景指南

芋道源码&#xff08;无遮羞布版&#xff09;Spring Boot 全景指南 项目地址:https://gitcode.com/gh_mirrors/ru/ruoyi-spring-boot-all 一、项目目录结构及介绍 芋道源码&#xff08;ruoyi-spring-boot-all&#xff09;项目基于Spring Boot构建&#xff0c;旨在提供一个全…...

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…...

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…...

CAD 屏幕进度条

参考鸿视频实现&#xff0c;代码如下&#xff1a; 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…...

小红书爬虫: 获取所需数据

小红书&#xff0c;又名 “小红书 ”或简称 “红”&#xff0c;已迅速成为中国社交和电子商务领域的重要参与者&#xff0c;成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说&#xff0c;从小红书收集数据可以获得宝贵的洞察力&#xff0c;从而推动业务增长。虽然这…...

使用sunshine和moonlight串流时的音频输出问题

设备&#xff1a;电脑和平板串流&#xff0c;把平板当副屏使用 1.如果启用安装steam音频驱动程序&#xff0c;则平板有声&#xff0c;电脑无声&#xff0c;在moonlight端可以设置平板和电脑同时发声&#xff0c;但是有点卡 2.只想电脑发声&#xff0c;平板无声 禁用安装steam…...

Java网络编程学习(一)

网络相关概念 网络体系结构 OSI体系结构&#xff08;七层&#xff09; OSI&#xff08;Open Systems Interconnection&#xff0c;开放系统互联&#xff09;体系结构将整个计算机网络分为七层&#xff0c;从上到下依次为&#xff1a;应用层、表示层、会话层、传输层、网络层…...