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

news/2024/9/28 23:36:57/

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.ppmy.cn/news/1531279.html

相关文章

RHCSA认证-Linux(RHel9)-Linux入门

文章目录 概要一、创建、查看和编辑⽂本1.1 输出重定向1.2 vim编辑器1.3 shell 变量1.5 获取帮助 二、管理本地用户和组2.1 描述用户2.2 切换用户和赋权2.3 用户管理2.4 用户组管理2.5 密码策略 三、控制文件访问3.1 列出文件和文件权限3.2 更改文件权限和拥有者3.3 控制默认权…

Docker实践与应用

引言 在现代软件开发中,Docker以其独特的容器化技术正在迅速改变传统的应用部署方式。Docker不仅提供了应用的便携性和一致性,还有效地解决了环境配置问题。本文将深入探讨Docker的安装、使用、最佳实践及其在实际项目中的应用,帮助开发者更…

前端项目如何使用思源字体

在前端项目中使用思源字体(微软字体商用收费如微软雅黑)可以通过以下几种方式实现: 1. 使用 CDN 引入字体 你可以通过公共 CDN 来引入思源字体,像 Google Fonts 或 Adobe Fonts 提供的思源字体服务。 步骤: 在你的…

assert 语句的主要用途是什么?

assert 语句在 Python 中用于调试目的,主要用于在代码中设置检查点,以确保程序中的某个条件为真。如果条件为假(即表达式的结果为 False),则 assert 会抛出一个 AssertionError 异常。虽然 assert 很有用,但…

URI和URL的区别

1: 将 URI 转换为 URL import java.net.URI; import java.net.URL;public class UriToUrlExample {public static void main(String[] args) {// 创建一个 URI 对象URI uri = new URI("http://example.com/path/to/resource");// 将 URI 转换为 URLtry {URL url = u…

在 Kubernetes 上部署 .NET 应用的完整指南:从容器化到自动化 CI/CD

在 Kubernetes 上部署 .NET 应用的完整指南 目录 引言.NET 应用的容器化Kubernetes 基础概念在 Kubernetes 上部署 .NET 应用高级特性:自动扩展与滚动更新持久化存储结合 CI/CD 实现自动化部署总结 1. 引言 随着微服务架构的流行,容器化技术已经成为应…

Unity3D 中构建行为树插件详解

前言 在Unity3D中,行为树(Behavior Tree)是一种用于游戏AI设计和实现的高级工具,它提供了一种结构化和模块化的方式来管理游戏实体的行为。行为树通过树状结构组织了一系列节点,每个节点代表了一个决策或动作。这种结…

上海电力大学《2020年+2021年830自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《25届上海电力大学830自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2020年真题 2021年真题 Part1:2020年2021年完整版真题 2020年真题 2…