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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ollama 简单 好用 好玩

简介 Ollama https://github.com/ollama/ollama/ 是一个基于 Go 语言 的 本地大语言模型运行框架,专注于本地化运行大型语言模型(LLM)的开源工具。 类 Docker 产品(支持 list,pull,push,run 等命令),更好玩…

存储可靠性:从基于磁盘的RAID到分布式纠删码(EC),多副本

文章目录 0.简介1.RAID1.1 RAID 01.2 RAID 11.3 RAID 51.4 RAID 61.5 RAID 10 2.EC(纠删码)2.1 概念2.2 原理 3.多副本4. 总结和优缺点比较 0.简介 在选择数据存储方案时,一个绕不开的话题就是数据存储的可靠性(面对故障时的应对…

【自然语言处理】利用Memory Layer替换Transformer中的FFN

论文地址:https://arxiv.org/pdf/2412.09764 相关博客 【自然语言处理】利用Memory Layer替换Transformer中的FFN 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58:1bit LLM时代 【自然语言处理】…

Redis持久化的两种方式:RDB和AOF

redis中的数据存储在缓存中,如果没有持久化的策略,Redis一旦宕机,那么将会导致数据丢失;因此redis提供了以下两种持久化方式:RDB和AOF 一般来说,大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…

linux查看所有程序占用的本地端口

sudo ss -tulwnp ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 查阅ss的帮助文档(man ss),发现选项…

组件库选择:ElementUI 还是 Ant Design

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

9 数据流图

9 数据流图 9.1数据平衡原则 子图缺少处理后的数据操作结果返回前端应用以及后端数据库返回操作结果到数据管理中间件。 9.2解题技巧 实件名 存储名 加工名 数据流

CEF132 编译指南 MacOS 篇 - 基础开发工具安装实战 (二)

1. 引言 在 macOS 平台上编译 CEF132 之前,首要任务是搭建一个完善的开发环境。与 Windows 和 Linux 环境不同,macOS 的开发环境主要以 Xcode 为核心。本篇将作为 CEF132 编译指南系列的第二篇,详细指导读者如何在 macOS 系统上安装和配置 X…

单片机简介

一、单片机简介 电脑和单片机性能对比 二、单片机发展历程 三、CISC VS RISC

Idea集成deepseek生成代码

今天我带大家在idea上安装CodeGpt插件,这个插件可以根据我们的提示词生产代码,我们一起试试。 1、安装插件 打开idea,再点击setting菜单,按以下步骤操作。 安装完成后,一定要点击第四步“ok”。再次点击菜单setting…

服务器使用宝塔面板Docker应用快速部署 DeepSeek-R1模型,实现Open WebUI访问使用

Deepseek这段时间非常火,最新推理模型Deepseek R1,都想装上试一试,特别是部署到服务器教程网上一堆教程好像没几个部署成功靠谱的,先说服务器上下载Ollama就难倒一堆人,每次都超时。今天终于在宝塔看到一篇 应用安装文…

json格式,curl命令,及轻量化处理工具

一. JSON格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于一个子集的JavaScript编程语言,使用人类易于阅读的文本格式来存储和表示数据。尽管名字中有“JavaScript”,但JSON是语言无关的,几…

Django在终端创建项目(pycharm Windows)

1.选择目录 选择或新建一个文件夹,作为项目保存的地方 2.右键在终端打开 3.确定django-admin.exe安装位置 找到自己安装django时,django-admin.exe安装的位置,例如 4.运行命令 使用django-admin.exe的绝对路径,在刚才打开的终端…

四次挥手详解

文章目录 一、四次挥手各状态FIN_WAIT_1CLOSE_WAITFIN_WAIT_2LAST_ACKTIME_WAITCLOSE 二、双方同时调用close(),FIN_WAIT_1状态后进入CLOSING状态CLOSING状态 三、TIME_WAIT状态详解(1) TIME_WAIT状态下的2MSL是什么MSL (报文最大生存时间)为…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海!SCI算法分解组合四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…

MybatisPlus常用增删改查

记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL…

支付宝安全发全套解决方案

产品价值 ● 通过支付宝的资金能力,让服务商机构通过信息流驱动资金流,在不碰触客户企业资金的同时,为客户企业完成转账。账目清晰,无合规和资质风险。 ● 为服务商提供全链路的资金流动明细信息,服务商可以将这些信息…

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发,可以打包成APP(非H5封壳)H5,接其他平台支付通道,前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG,修复无…

Redis企业开发实战(四)——点评项目之分布式锁

目录 一、分布式锁介绍 (一)分布式锁基本介绍 (二)分布式锁满足的条件 (三)常见的分布式锁 1.Mysql 2.Redis 3.Zookeeper 二、Redis分布式锁详解 (一)Redis分布式锁的实现核心思路 获取锁: 释放锁: (二)基于Redis实现分布式锁初级版本 1.…

【HarmonyOS Next 自定义可拖拽image】

效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…