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(默认账户密码如下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14675.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式编程_05 Project Reactor 框架

文章目录 概述响应式流的主流实现框架RxJavaReactor Project Reactor 框架Reactor 异步数据序列Flux 和 Mono 组件FluxMono 操作符背压处理 小结 概述 响应式编程_02基本概念:背压机制 Backpressure介绍了响应式流规范以及 Spring 框架中的响应式编程技术&#xff…

免费windows pdf编辑工具Epdf

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

计算机组成原理(3)

计算机组成原理(3) 存储器层次结构存储器概述存储器分类存储器性能指标 半导体随机存储SRAM和DRAM 存储器层次结构 主存-辅存:实现了虚拟存储系统,解决了主存容量不足的问题; Cache-主存:解决了主存于CPU速…

html 列动态布局

样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制? 阻抗控制旨在通过调节机器人与环境的相互作用,控制其动态行为。阻抗可以理解为一个力和位移之间的关系,涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制:根据感测的外力调节机械手的动作。位置…

Redis03 - 高可用

Redis高可用 文章目录 Redis高可用一:主从复制 & 读写分离1:主从复制的作用2:主从复制原理2.1:全量复制2.2:增量复制(环形缓冲区) 3:主从复制实际演示3.1:基本流程准…

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

Ollama + AnythingLLM + Deepseek r1 实现本地知识库

1、Ollama:‌是一个开源的大型语言模型 (LLM)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛‌。 2、AnythingLLM:是由Mintplex Labs Inc. 开发的一款全栈应用程序,旨在构建一个高效、可定制、…

(Arxiv-2023)HiPA: 通过高频增强自适应实现一步文本到图像扩散模型

HiPA: 通过高频增强自适应实现一步文本到图像扩散模型 paper是NUS发布在Arxiv 2023的工作 paper title:HiPA: Enabling One-Step Text-to-Image Diffusion Models via High-Frequency-Promoting Adaptation Code:等待开源 Abstract 扩散模型已彻底改变了文本到图像…

Java版本与JDK版本

两者关联 Java版本指的Java语言和平台的版本,例如Java8、Java11、Java17等,每个版本会引入新特性、改进和修复。 JDK(Java Development Kit)版本则是开发工具包,包含编译器、调试器等工具,通常与Java版本对应,例如JDK…

【C语言标准库函数】三角函数

目录 一、头文件 二、函数简介 2.1. 正弦函数:sin(double angle) 2.2. 余弦函数:cos(double angle) 2.3. 正切函数:tan(double angle) 2.4. 反正弦函数:asin(double value) 2.5. 反余弦函数:acos(double value)…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

MySQL第五次作业

根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…

Breakout靶场小试牛刀

1.首先经典两件套 nmap -A 扫描 发现开放很多端口(80,10000,20000为重点关注) 问题不大,先dirsearch扫一下目录再说 结果能看的manual里啥也没有,之后再查看80端口界面源代码 发现有一串字符 但是问了ai…

Vue el-tree 加载过滤出的父节点以及其包含的子节点

由于el-tree提供的过滤函数&#xff0c;过滤出来的目录节点不包含子节点&#xff0c;因此需要改造过滤函数&#xff0c;使其过滤出的目录节点包含子节点。 <template><div><el-input placeholder"请输入内容" v-model"filterText" clearab…

认识O(NlogN)的排序

归并排序 归并排序&#xff08;任何一个递归&#xff09;如果不懂可以画一个树状结构去帮助自己去理解。 核心排序方法为Merger public class 归并排序 {public static void main(String[] args) {int[] arr1 {3, 1, 2, 2, 5, 6};int[] arr2 Arrays.copyOf(arr1, arr1.len…

如何使用Gemini模型,国内如何订阅购买Gemini Pro的教程,Gemini Pro 免费试用操作步骤, 谷歌 aistudio 使用入口

最近的榜首又被Gemini给霸占了&#xff0c;很多童鞋想要体验一翻 Gemini免费库模型更新了 Gemini2.0向所有人开放了&#xff01;使用了真香 目前呢2.0flash和Gemini-2.0-Flash-Thinking-Exp、Gemini-2.0-Flash-Thinking-Exp-with-apps已经免费给所有注册用户开放了&#xff0c…

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…

安宝特方案 | AR助力制造业安全巡检智能化革命!

引言&#xff1a; 在制造业中&#xff0c;传统巡检常面临流程繁琐、质量波动、数据难以追溯等问题。安宝特AR工作流程标准化解决方案&#xff0c;通过增强现实AR技术&#xff0c;重塑制造业安全巡检模式&#xff0c;以标准化作业流程为核心&#xff0c;全面提升效率、质量与…