基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】

1、什么是MaxScale

MaxScale是MariaDB数据库的一个中间件,为MariaDB提供代理服务,主要可以实现读写分离和一定的负载均衡功能,其中读写分离可将读操作和写操作分离到不同的数据库服务器上,以提高系统的整体性能和扩展性,而正是读写分离功能,使得MaxScale具备已经的负载均衡特性。

2、搭建环境

在这里插入图片描述

3、搭建步骤

3.1、分别在两台OpenEuler上安装MariaDB数据库并分别完成初始化(两台服务器步骤相同)

(1)执行安装命令“yum install mariadb-server -y”;
在这里插入图片描述
(2)执行启动MariaDB数据库命令“systemctl start mariadb”;
在这里插入图片描述
(3)执行MariaDB初始化命令“mysql_secure_installation”,并按自身需求完成MariaDB初始化,初始化案例如下:

[root@localhost ~]# mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDBSERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.Enter current password for root (enter for none):   #输入事先设置的数据库root账户密码
OK, successfully used password, moving on...Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.You already have a root password set, so you can safely answer 'n'.Change the root password? [Y/n] n   #是否改变root用户密码?... skipping.By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.Remove anonymous users? [Y/n] n   #是否删除匿名用户?... skipping.Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] n   #是否不允许root用户直接登录?... skipping.By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.Remove test database and access to it? [Y/n] n   #是否删除测试数据库?... skipping.Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.Reload privilege tables now? [Y/n] y   #是否重新加载权限信息?... Success!Cleaning up...All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.Thanks for using MariaDB!

(4)输入以下代码分别在两套MariaDB上创建监控用户“monitor”和路由用户“maxscale”,并授予monitor用户replication slave权限和super权限,授予maxscale所有权限:

# 路由账号
create user 'maxscale'@'%' identified by 'ymh123';
grant all on *.* to maxscale@'%';# 监控账号
create user 'monitor'@'%' identified by 'ymh123';
grant replication slave,super on *.* to 'monitor'@'%';

3.2、将两套MariaDB数据库设置为主从关系

3.2.1、配置MariaDB-Master

(1)在192.168.174.136服务器上输入命令“vim /etc/my.cnf”,并在[mysqld]字段下添加如下配置,并保存退出:

server-id=1
log-bin=mysql-bin

在这里插入图片描述
(2)输入命令“systemctl restart mariadb”重启MariaDB数据库;
在这里插入图片描述
(3)输入命令“mysql -u root”进入数据库,并输入命令“show master status;”记录好“File”字段下的binlog文件的文件名和“Position”字段下的数值,如下:
在这里插入图片描述

3.2.2、配置MariaDB-Slave

(1)在192.168.174.136服务器上输入命令“vim /etc/my.cnf”,并在[mysqld]字段下添加如下配置,并保存退出(server-id要与Master不同,且不写入log-bin字段):

server-id=2

(2)输入命令“systemctl restart mariadb”重启MariaDB数据库;
在这里插入图片描述
(3)输入命令“mysql -u root”进入数据库,并输入命令“change master to master_host = '192.168.174.136', master_user = 'monitor', master_password = 'ymh123', master_log_file = 'mysql-bin.000006', master_log_pos = 594;”最后输入“exit”退出MariaDB数据库;
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
(4)输入命令“systemctl restart mariadb”重启MariaDB数据库后,输入“mysql -u root”进入数据库;
在这里插入图片描述
(5)输入命令“show slave status\G;”如果以下两个字段都是yes,则主从搭建成功(当然,可在Master进行写操作,如果同步到slave,则主从没问题):
在这里插入图片描述

4、安装并配置MaxScale

(1)进入MariaDB官方网站,找到对应版本的MaxScale安装包,并下载;
在这里插入图片描述
在这里插入图片描述
(2)通过dpkg命令对安装包进行本地安装,需要注意的是,安装过程中可能会缺乏必要的依赖,如果出现缺依赖的情况,此时通过“apt install -f”命令自动补充依赖;
在这里插入图片描述
在这里插入图片描述
(3)输入“vim /etc/maxscale.cnf”命令,对MaxScale进行如下配置:

[maxscale]
threads=auto[server1]
type=server
address=192.168.174.136
port=3306[server2]
type=server
address=192.168.174.130
port=3306[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2   #监控模块写入所有MariaDB节点
user=monitor
password=ymh123
monitor_interval=2s#本实验只涉及读写分离,不涉及只读,因此只读模块注释掉不配置
#[Read-Only-Service]
#type=service
#router=readconnroute
#servers=server1
#user=service_user
#password=service_pw
#router_options=slave[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
password=ymh123#本实验只涉及读写分离,不涉及只读,因此只读模块注释掉不配置
#[Read-Only-Listener]
#type=listener
#service=Read-Only-Service
#protocol=mariadbprotocol
#port=4008[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=mariadbprotocol
port=4006

(4)输入命令“systemctl restart maxscale”重启MaxScale;
在这里插入图片描述
(5)输入命令“maxctrl list servers”,若出现下图结果,则MaxScale读写分离搭建成功;
在这里插入图片描述
(6)查看MaxScale读写分离模块的监听端口,为默认的4006端口
在这里插入图片描述

5、读写分离验证

在读写分离验证之前,我们需要明确MariaDB主从架构的一个特点,即数据的同步只能是Master节点向Slave节点单方向进行同步。因此如果在Slave节点进行写操作,则写入的数据不会同步到Master节点中。
在这里插入图片描述
基于上述特性,如果通过MaxScale转发出来的写操作,写入的数据在Master和 Slave两个节点同时存在,则该写操作是由MaxScale分配到Master节点,然后由Master节点主从同步到Slave,步骤如下:
(1)打开数据库客户端,连接到MaxScale节点的4006端口;
在这里插入图片描述
(2)进行写操作,并验证Master和Slave节点是否同时存在写入的数据;
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
(3)通过SQL语句“select @@hostname”查看读操作访问的节点(需提前修改数据库服务器的主机名)
在这里插入图片描述
综上,读写分离配置成功。

6、注意事项

(1)创建用户时,监控用户monitor除赋予replication slave权限外,还要赋予super权限,否则MaxScale与MariaDB通过monitor用户建立监控进程时,会出现认证错误(Auth Error),这一点无论是在国内其他文章还是在官方英文文档中,都没有指明,如果出现认证错误,此时最佳的排查方式是查看路径为/var/log/maxscale/maxscale.log的日志内容;
在这里插入图片描述
在这里插入图片描述
(2)进行写操作后,不要单纯使用“select @@hostname”来判断写操作的节点,因为“select @@hostname”本身是读操作语句,只能判断自己,结果也一定是slave节点;
(3)OpenEuler系统本身暂未适配MaxScale,如果要在OpenEuler上安装MaxScale,最好的方式是使用容器版本的MaxScale;
(4)MaxScale不具备高可用功能,需要配合MariaDB的其他高可用方案使用。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle 数据库安装和配置指南

目录 1. 什么是Oracle数据库? 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量(Linux) 4.…

探索GraphRAG:用yfiles-jupyter-graphs将知识库可视化!

yfiles-jupyter-graphs 可视化 GraphRAG 结构 前言 前面我们通过 GraphRag 命令生成了知识库文件 parquet,这节我们看一下如何使用 yfiles-jupyter-graphs 添加 parquet 文件的交互式图形可视化以及如何可视化 graphrag 查询的结果。 yfiles-jupyter-graphs 是一…

微服务拆分技巧

微服务架构整体思路 常见场景实施建议 只有从0开始构建业务系统才需要一步到位,这样长痛不如短痛,其它的都只能逐步落地,因为有包袱 如何按业务拆分微服务 DDD 概要介绍 DDD 告诉你限界上下文是什么,却没有告诉你如何划分 DDD …

鸿蒙​​​​​​保障应用开发安全的技术措施

应用开发安全是指在开发过程中嵌入安全能力,使应用程序从源头上安全可靠。 开发者是应用程序的创作者,合法的开发者是创作出安全、可靠应用的前提条件;为了保证应用开发者身份真实可信,鸿蒙通过开发者证书对应用进行签名,保证应用…

高刷显示器哪个好?540Hz才有资格称高刷

高刷显示器哪个好?说实话,540Hz这些才能成为高刷显示器,什么200,240的,都不够高,什么是从容,有我不用才叫从容。下面我们一起来看看540Hz的高刷显示器都有哪些吧! 1.高刷显示器哪个好 - 蚂蚁电…

Chainlit集成LlamaIndex实现知识库高级检索(BM25全文检索器)

检索原理 BM25Retriever类是一个基于BM25算法设计的检索器,它主要用于从一组文档或节点中检索出与查询最相关的文档或节点。这个类的设计目的是为了提高文本检索的效率和准确性,尤其是在处理大量文本数据时。 BM25(Best Matching 25&#x…

如何使用ssm实现新媒体视域下的中国古诗词展演+vue

TOC ssm678新媒体视域下的中国古诗词展演vue 绪论 课题背景 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化。目前,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到提…

物联网助力智慧交通:优势与前景

智慧交通是当今城市发展的必然趋势,而物联网技术在交通运输领域的应用正是为实现智慧交通建设提供了前所未有的机遇和优势。物联网作为连接和控制物理世界的重要技术手段,在交通领域的应用极大地改善了交通系统的效率、安全性和环保性。 首先&#xff0c…

智能算法躲避拥堵,高德企业用车上线“动态选路服务”为出行提效

近日,高德企业用车正式上线了一项全新服务——“动态选路服务”,旨在基于智能算法,动态规避突发拥堵路线,为企业用车用户提供更便捷、智能的出行方案。 以技术着眼细节,高德企业用车在帮助企业用车用户节约出行时间和…

大部分基础排序复习C++(归并、快排、堆)

归并排序(稳定) 时间复杂度: O(N * logN ) 。空间复杂度 O(N) 归并排序主要是分治的思想: 将一段数组以中间点mid划分成两半,让它们各自去下一层递归,继续对半划分,直到这个数组只有一个元素…

MySQL(学习笔记)(02)(进阶篇)

P1 存储引擎 MySQL的体系结构 存储引擎简介 存储引擎的选择 P2 索引(重要) 索引概述 索引结构 二叉树 B树(多路平衡查找) B树 hash 总结 索引分类 思考题 索引语法 SOL性能分析 索引使用 索引设计原则 P3 SQL优化 P4 视图/存储过…

redis常用五种数据类型的常用指令

本文为初识redis记录的基本知识,如有不正确之处还请指出 一、redis五种类型简介 string:存储结构为简单动态字符串(SDS) hash:存储结构可以是哈希表(O(1))、压缩列表&am…

动手学深度学习(李沐)PyTorch 第 3 章 线性神经网络

3.1 线性回归 线性回归是对n维输入的加权,外加偏差 线性回归可以看作是单层神经网络 回归问题中最常用的损失函数是平方误差函数。 平方误差可以定义为以下公式: 常数1/2不会带来本质的差别,但这样在形式上稍微简单一些 (因为当…

一篇讲完CSS的核心内容

目录 一 、引言 1.1CSS概念 二、 CSS简介 2.1 什么是CSS 2.2 CSS能干什么 2.3 CSS书写规范 2.4 基础语法 三、 CSS导入方式 3.1 内嵌方式(内联方式) 3.2 内部方式 3.3 外部方式 四、 CSS选择器 4.1 基本选择器 [重点] 4.2 属性选择器 五、 CSS属性 5.1 文字属性…

Excel的基本应用__1

1. 模拟运算 1.1 单变量求解 1.1.1 步骤 1.1.1 效果 1.2 模拟运算表 1.2.1 步骤 1.2.2 效果 2.选择性粘贴--转至 3. Excel中如何使用和定义名称 使用 相当于全局变量,可以在不同表中调用 3.1名称中使用常量 3.2名称中使用函数 调用 可以在不同的表中调用 3.…

C语言 | Leetcode C语言题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; int minMutation(char * start, char * end, char ** bank, int bankSize) {int m strlen(start);int **adj (int **)malloc(sizeof(int *) * bankSize);int endIndex -1;for (int i 0; i < bankSize; i) {adj[i] (int *)malloc(si…

Dynamic Connected Networks for Chinese Spelling Check(ACL2021)

Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一&#xff0e;概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系&#xff0c;从而导致了不连贯的问题。为些&#xff0c…

CORS解决浏览器跨域请求(同源策略)限制原理、后端springboot CROS跨域解决方案

文章目录 1 浏览器的同源策略1.1 什么是源&#xff08;origin&#xff09;&#xff1f;1.2 跨域请求&#xff1f;1.3 同源策略&#xff08;跨域限制&#xff09;是什么&#xff1f;1.3.1 同源策略的具体限制&#xff1f;1.3.2 浏览器CORS校验 2 CORS解决Ajax跨域问题2.1 CORS概…

【JavaEE】——内存可见性问题

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;内存可见性问题 1&#xff1a;代码解释 2&#xff1a;结果分析 &#xff08;1&#xf…

分享开源且强大的HTML5网页视频播放器

随着互联网技术的飞速发展&#xff0c;视频内容已成为现代网络体验中不可或缺的一部分。无论是在线教育、娱乐还是企业宣传&#xff0c;高质量的视频播放器都是确保用户获得良好观看体验的关键。HTML5的出现极大地推动了网页视频播放技术的进步&#xff0c;逐渐取代了传统的Fla…