Mysql - 读写分离与读负载均衡之Maxscale

news2024/9/27 5:54:00

原文地址

Mysql - 读写分离与读负载均衡之Maxscale - 小豹子加油 - 博客园

maxscale会自动识别出集群的master与slave角色。所以我们可以将maxscale与mha结合起来,既能实现主库的故障转移,又能实现读写分离和从库的负载均衡。

一、概述

常见的高可用方案如MMM和MHA等都将重点放在主库上,一旦主库出现故障,通过这些方案能将主库故障进行转移。

本文将给大家介绍一款由mariadb公司出品的中间件Maxscale,该中间件能实现读写分离和读负载均衡,安装和配置都十分简单。

官方文档https://mariadb.com/kb/en/maxscale-22-getting-started/

二、节点介绍

本次实验采用4台虚拟机,操作系统版本Centos6.10,mysql版本5.7.25

maxscale 10.40.16.60  路由  路由节点

node1     10.40.16.61  主库  提供写服务

node2     10.40.16.62  从库  提供读服务

node3     10.40.16.63  从库  提供读服务

节点拓扑图

 

三、安装

1. 配置一主二从

其中node1是主库,node2和node3是从库。具体的复制搭建这里就省略,要是这都不会,那么该文章对你就没意思了。顺便安利一个自己写的mysql一键安装脚本https://www.cnblogs.com/ddzj01/p/10678296.html

注明:集群中使用的复制账号为repl,密码是'123456'

2. 下载maxscale包

下载地址:MaxScale/2.2.0/centos/6Server/x86_64/ - MariaDB

我在做实验的时候,最开始使用的是maxscale的最新版本(如:2.2.21-GA),安装完后发现参数文件/etc/maxscale.cnf里面都只支持mariadb(protocol=MariaDBBackend),而不支持oracle官方的mysql。所以就选用一个了比较老的maxscale版本。等实验做完了,我再试着用最新版本的maxscale软件+老的参数文件也是能够运行的。所以如果使用的oracle官方的mysql,要想使用最新版本的maxscale,则需要使用老版本的参数文件去替换新版本中的参数文件。

 

3. 安装maxscale

在maxscale节点

yum install -y libaio libaio-devel

rpm -ivh maxscale-2.2.0-1.centos.6.x86_64.rpm

四、配置

1. 在node1(主库)创建相关账号

监控账号,maxscale使用该账号监控集群状态。如果发现某个从服务器复制线程停掉了,那么就不向其转发请求了。

(root@localhost)[(none)]> grant replication slave, replication client on *.* to scalemon@'%' identified by '123456';

路由账号,maxscale使用该账号将不同的请求分发到不同的节点上。当客户端连接到maxscale这个节点上时,maxscale节点会使用该账号去查后端数据库,检查客户端登陆的用户是否有权限或密码是否正确等等。

(root@localhost)[(none)]> grant select on mysql.* to maxscale@'%' identified by '123456';

2. 在maxscale节点配置参数文件/etc/maxscale.cnf

3. 在maxscale节点安装mysql客户端

注意这一步不是必须的,我只是为了方便后面的实验,选择在该节点安装一个mysql客户端,然后通过该客户端去连maxscale

tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

cd /usr/local/

ln -s mysql-5.7.25-linux-glibc2.12-x86_64 mysql

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /root/.bash_profile

cd ~

source .bash_profile

五、maxscale相关操作

1. 启动maxscale服务

maxscale -f /etc/maxscale.cnf

2. 登录maxscale管理器

默认的用户名和密码是admin/mariadb

[root@monitor ~]# maxadmin --user=admin --password=mariadb

查看集群状态

 

可以看到我并没有在maxscale.cnf中指明哪一个是master哪一个是slave,maxscale会自动识别出集群的master与slave角色。所以我们可以将maxscale与mha结合起来,既能实现主库的故障转移,又能实现读写分离和从库的负载均衡。

查看集群中的用户

 

六、测试

1. 测试读写分离

在node1(主库)上创建一个测试账号

(root@localhost)[(none)]> grant all on *.* to scott@'%' identified by 'tiger';

在maxscale节点连接数据库

[root@monitor ~]# mysql -uscott -ptiger -h10.40.16.60 -P4006

注意这里的-h连接的maxscale节点,-P是maxscale的端口,如果maxscale与mysql client不在同一台机器,还需要关闭maxscale上的防火墙

验证读写分离

 

 

可以看到,读的请求就转发给了node2,而写的请求转发给了node1,读写分离验证成功。

2. 测试读负载均衡

在mysql服务器上分别查看当前的连接状态

node1

node2

node3

 

可以看到在maxscale上面进行的三个连接在这三台mysql服务器上都进行了连接,所不同的是,node2有两个会话在执行该语句,而node3有一个会话在执行该语句。也就是说默认会将读的操作均匀分配到每个从节点中。

3. 单个slave出现故障

修改maxscale.cnf参数,将路由日志的级别设置为info,这步跟实验无关,只是为了方便看日志

 

重启maxscale服务

ps -ef | grep maxscale | grep -v grep | awk '{print $2}' | xargs kill -9

maxscale -f /etc/maxscale.cnf

停掉node2的复制

(root@localhost)[(none)]> stop slave;

观察/tmp/maxscale.log

 

查看集群状态

 

通过客户端连接集群

mysql -uscott -ptiger -h10.40.16.60 -P4006 -BNe "select @@hostname;"

 

可以看到node2已经不提供读服务了

4. 所有slave都出现故障

停掉node3的复制

(root@localhost)[(none)]> stop slave;

观察/tmp/maxscale.log

 

查看集群状态

 

通过客户端连接集群

mysql -uscott -ptiger -h10.40.16.60 -P4006 -BNe "select @@hostname;"

 

可以看到读写分离已经不再有效,因为没有slave了,只能去主库读。

我看到有的文章写,如果所有从服务器都失效,即使主库正常也会连接失败,需要在配置文件中添加detect_stale_master=true,但是我这里并没有这种情况,可能是早期的maxscale特性导致的,这里仅作为一个记录。

5. 恢复slave

node2&node3

(root@localhost)[(none)]> start slave;

查看集群状态

 

可以看到slave恢复后,又会自动加入到maxscale中来。

6. 测试从库延迟

在node1(主库)创建数据库和给scalemon用户赋权

(root@localhost)[hello]> grant all on *.* to scalemon@'%' identified by '123456';

(root@localhost)[hello]> create database maxscale_schema;

在maxscale节点修改参数文件/etc/maxscale

添加以下参数

 

重启maxscale服务

ps -ef | grep maxscale | grep -v grep | awk '{print $2}' | xargs kill -9

maxscale -f /etc/maxscale.cnf

把node2的数据库锁住

(root@localhost)[(none)]> flush table with read lock;

在node1中做点修改

(root@localhost)[hello]> insert into t1 values(2);

过一段时间再连数据库发现只能连接到node3了

mysql -uscott -ptiger -h10.40.16.60 -P4006 -BNe "select @@hostname;"

 

从库延迟测试成功,但是遗憾的是我通过maxadmin和后台日志都没看出任何异常来,可能是有命令我还没熟吧。

七、总结

maxscale就给大家介绍到这里了,我在网上搜maxscale相关的博客时,发现并不多,而且即使有几篇,也非常老,说明这个中间件使用的并不是很广,如果大家对于这个持异议,欢迎大家留言。如果要在生产中使用这种中间件,还需要多多测试稳定性和加了中间件后查询效率的损耗。

优点:

1. 配置简单

2. 能实现读写分离

3. 能实现读负载均衡

缺点:

1. 由于增加了中间层,所以对查询效率有损耗

2. 中间层节点也容易出现单点故障

本文实验部分取材于https://blog.csdn.net/yehanyy/article/details/78983763

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

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

相关文章

干货 | Burpsuite的使用tips总结

渗透测试用到Burp时候很多,整理了一些tips供测试时候更得心应手~ tips1:光标错位和中文显示 新版一打开容易光标错位,默认情况下使用字体是Courier New,显示不了中文。 换用Monospaced字体即可正常显示中文,一般这里就不会错位了…

[附源码]Python计算机毕业设计Django基于Web的绿色环保网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Matplotlib绘制图像大全】(十一):Matplotlib使用rcParams修改默认参数配置

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

Allegro如何在PCB上开槽的三种方法操作指导

Allegro如何在PCB上开槽的三种方法操作指导 当PCB有特殊设计要求的时候,需要在PCB上开槽,Allegro支持在PCB上开槽操作,具体操作如下 以下图为例,需要在这个板框中间开槽 开方形槽 选择shape add rect命令 画在Board Geometry-outline层,type选择Unfilled 在需要开槽的…

C/C++ 动态规划 算法

动态规划算法,以最小的消耗解题! 以一个走楼梯为例子展开。 假设有一个三级台阶,我们一次可以走一步,或者一次走两步,那么由此可知,一共有3中走法,如下图 当台阶数量少的时候,确实很…

MPViT : Multi-Path Vision Transformer for Dense Prediction

MPViT : Multi-Path Vision Transformer for Dense Prediction一、引言(一)、Vision Transformers for dense predictions(二)、Comparison to Concurrent work二、实现细节(一)、Multi-Path Vision Transf…

C#【必备技能篇】使用GDI绘制进度条的代码实现

文章目录一、使用“用户控件”生成圆环进度条的dll1、使用VS2019新建项目(类库)2、添加用户控件3 、用户控件PercentStar.cs源码编写二、引用dll,在Winform中代码实现1、新建Windows窗体应用(.NET Framework)2、添加引…

Java项目:ssm房屋租赁管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员与租户2种角色: 管理员主要功能包括: 登录、查看房源信息、添加房源、查看租赁情况、合同查看、看房申…

皓量科技入选《中国数字营销生态图2022版》4大赛道!

11月28日,由中国商务广告协会数字营销专业委员会、虎啸奖组委会及秒针营销科学院三方合作出版的《中国数字营销生态图2022版》正式发布(以下简称生态图)。皓量科技凭借多年深耕程序化广告领域的实力与经验,在全行业服务商的征集调…

Codeforces Round #752 (Div. 1) B. Moderate Modular Mode

翻译: 谁有两个偶数𝑥和𝑦。帮助他找到一个整数𝑛,使1≤𝑛≤2⋅1018,且𝑛mod𝑥𝑦mod𝑛。这里,𝑎mod𝑏表示&am…

夯实算法-整数转罗马数字

题目:LeetCodeLeetCode 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D …

Linux操作系统~匿名管道和命名管道的使用及其原理分析

目录 1.匿名管道 (1).匿名管道的原理 (2).pipe接口的使用 如果只写不读(求管道的大小) (3).匿名管道五个特点 (4).匿名管道的四种情况 3.命名管道 &a…

世界杯之用Java实现随机胜平负

一、本章猜测随机数首先需要用到Scanner语句,对用户需要几组胜平负数量进行猜测,说动用到几组肯定要用到for循环了,还有要实现随机,就需要用到Math方法,进行随机抽取。 1.Scanner 首先使用Scanner语句抓取用户…

MATLAB算法实战应用案例精讲-【工具篇】运筹优化工具OR-TOOLS(补充篇)(附实战案例及代码实现)

前言 本文为【工具篇】运筹优化工具OR-TOOLS(附实战案例及代码实现)的补充篇。 OR-Tools是一个用于优化的开源软件套件,用于解决车辆路径、流程、整数和线性规划以及约束编程等世界上最棘手的问题。同时OR-Tools提供了C++,Python,Java,.NET的接口,同时提供统一接口封装来…

为你揭秘拼购为什么是破产老板手中的最后一根稻草?

拼购,已经成为了电商平台自主传播的一种营销活动,通过拼团可以促成更多的成交量,但拼团也不是这样简单的放在那里就能有客户进来参与,其中还有很多细节上面的地方需要我们好好探究。这个拼购模式和我们之前见过的拼多多拼团、拼购…

什么蓝牙耳机适合realme手机?适合realme手机的高端蓝牙耳机推荐

根据网络调查数据显示,市面上的耳机需求量在不断增加,随着智能手机的普及,耳机作为炙手可热的产品,尤其是网易云、全民K歌,直播的流行,消费者对于耳机的需求不仅仅是听歌了,有线耳机也逐渐被无线…

【Matplotlib绘制图像大全】(五):饼图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

风靡互联网关键词 Web3.0 | 区块链 | 比特币 | 元宇宙……

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Web web是互联网的总称,全称为World Wide Web,缩写WWW ,即全球广域网,也称为万维网,它是一种基于超文本和H…

007.复原 IP 地址

1.题目链接: 93. 复原 IP 地址 2.解题思路: 2.1.题目要求: 给定一串只包含数字的字符串s,返回所有让 s 构成 有效IP地址 的数字组合。 有IP地址: 4个 [0,255] 范围内的数字 组成,并且整数之间用 " …

绿源:“老大哥”冲刺IPO,新的故事如何讲?

又一家老牌电动两轮车企业“开”向了资本市场。 11月22日,绿源集团控股(开曼)有限公司(以下简称“绿源集团”)正式向港交所递交招股说明书,拟主板挂牌上市,中信建设国际担任独家保荐人&#xf…