proxysql读写分离组件部署

一、前言

      在mysql一主两从架构的前提下,引入读写分离组件,可以极大的提高mysql性能,proxysql可以在高可用mysql架构发生主从故障时,进行自动的主从读写节点切换,即当mysql其他从节点当选新的主节点时,proxysql会自动识别,6033端口为mysql命令调用端口,6032端口为proxysql的管理端口

二、部署

     需要先部署mysql主从架构或者mysql高可用架构,mysql主从架构没有高可用功能,mysql高可用架构拥有高可用功能,使用主从架构发生故障没有主从切换功能,所有proxysql也不会进行故障切换

     主从参考:mysql一主两从读写分离搭建_mysql 一主两从搭建-CSDN博客

     高可用参考: mysql mha高可用-CSDN博客

     在github上下载proxysql rpm安装包

     参考: Releases · sysown/proxysql · GitHub

     我这里使用的是 2.4.0版本的安装包,太新版本的配置了读写组后会出现mysql_servers库的组id不会自动更改识别,但是proxysql的读写分离和故障切换功能都是正常的,并没有影响

     创建proxysql安装包存放目录

      mkdir /opt/proxysql &&  cd /opt/proxysql

      ls

    安装proxysql

     yum -y install proxysql-2.4.0-1-centos7.x86_64.rpm

    在mysql创建监控用户

    mysql -u root -p

    grant select on *.* to 'monitor'@'%' identified by '12345678';

    flush privileges;

    登陆proxysql配置读写分离

mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin>'

   插入后端mysql信息

#组id都配置都无所谓,后面通过配置了识别read_only分配读写分离组,id会自动变更到对应组
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.1.60.113',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.1.60.114',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.1.60.115',3306);

查看插入的mysql信息

select * from mysql_servers

 配置后端mysql的监控用户

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='12345678' WHERE variable_name='mysql-monitor_password';
update global_variables set variable_value='2000' where variable_name in ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');

查看修改后的配置

SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';

使配置生效与保存配置

load mysql servers to runtime;
save mysql servers to disk;

查看对后端的健康检查结果

SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 3;

SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 3;

 配置主从切换的自动检测即检测read_only状态分配到读组或写组

INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) VALUES (1,2,'cluster1');

使配置生效

LOAD MYSQL SERVERS TO RUNTIME;

 检查是否生效

SELECT * FROM monitor.mysql_server_read_only_log ORDER BY time_start_us DESC LIMIT 3;

可以看到已经识别到后端不同mysql节点的read_only状态

 现在查看mysql_servers表也会发现之前配置的相同的id也自动更改为根据主从节点分配的读写组id

配置读写分离规则

#注意规则配置的顺序代表匹配的顺序,前面的匹配不到才会匹配后面的
#select命令中这有一条特殊的加锁命令,是需要写操作的,所以第一条规则是匹配到写id组
#第二条规则匹配所有读命令,匹配到读id组,这两条规则就可以实现读写分离
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',1,1);
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',2,1);

查看配置的读写分离规则

SELECT match_digest,destination_hostgroup FROM mysql_query_rules WHERE active=1;

在proxysql中配置mysql存在的用户

INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('root','12345678',1);
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('deploy','12345678',1);

查看配置的用户

SELECT * FROM mysql_users;

保存与使配置生效

LOAD MYSQL QUERY RULES TO RUNTIME;
save mysql servers to disk;

使用以上配置的用户在其他mysql中调用proxysql端口执行命令验证读写分离

mysql -u root -p -h10.1.60.115 -P6033 -e "select * from mysql.user"

查找执行命令表查询命令在哪台主机执行

SELECT * FROM stats.stats_mysql_connection_pool;

可以每执行一条就查询一次就可以看出读写分离的效果了

也可以通过以下命令直接查询命令在哪个组执行了来验证是否进行了读写分离

SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;

 可以看到读操作都分配在了组id为2的读组

 至此proxysql 读写分离配置完成,关于主从的故障切换可以通过mysql高可用架构自行验证,当mysql的主节点挂掉,先由高可用组件实现主从的故障切换,选出新的主节点,然后proxysql根据每个mysql节点的read_only变化去变更mysql节点所在的读写组实现读写节点的切换

关于proxysql的高可用可以通过keepalived组件实现,即再部署一个proxysql,在两个proxysql上部署keepalived高可用组件实现

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

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

相关文章

vscode开发python环境配置

前言 vscode作为一款好用的轻量级代码编辑器,不仅支持代码调试,而且还有丰富的插件库,可以说是免费好用,对于初学者来说用来写写python是再合适不过了。下面就推荐几款个人觉得还不错的插件,希望可以帮助大家更好地写…

Python游戏编程 – 猜数字游戏

Python游戏编程 – 猜数字游戏 Python Game Programming – Guessing Number Game By JacksonML 对Python有一定了解,并且熟知变量、数据类型、循环与分支、函数功能后,我们可以尝试来编写简单的游戏代码。 本文简要介绍如何编写猜数字游戏的Python代码…

研发管理-代码管理篇

前言: 工作了这些年,工作了三家公司,也用过主流的代码管理平台,比如SVN,git系列(gitlib,gitee),各有优点,我个人比较喜欢SVN,多人协作的代码管理难免会有代码冲突&#…

MaBatis使用`ResultMap`标签手动映射详解使用

文章目录 MaBatis使用ResultMap标签手动映射详解使用1、MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM,如下:2、在SQL中使用 as 为查询字段添加列别名,以匹配属性名:但是如果我…

TCAX特效字幕保姆入门教程+效果演示+软件源码自取

目录 介绍 下载链接 初步使用 软件使用 tcc文件介绍 tcc文件版本 模式设置 ​编辑 k值提供方式举例 特效脚本设置 主要设置 ass全局风格设置 额外设置 常见问题 编码使用 使用其他tcax博主的进行编码测试 介绍 TCAX是一款专门用于制作特效字幕的软件。通过TCAX…

【中小型企业网络实战案例 一】规划、需求和基本配置

热门IT技术【视频教程】https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 案例拓扑图 案例需求 在中小园区中,S5735通常部署在网络的接入层,S8700通常部署在网络的核心,出口路由器一般选用AR系列路由器。 …

使用Windows批处理命令行和ImageMagick批量将文件夹中的图片转换为PDF文档的方法

目录 应用场景 实现思路 实现过程 1.下载安装imageMagick 2.遍历源文件夹 3.转换图片为pdf文档 4.最终执行的命令 5.结果验证 6.将以上命令改写为windows批处理文件 应用场景 图像是一种常见的数据。图片几乎是一个信息系统中必不可少的组成部分。为了方便阅读&…

Redis一些常用的技术

文章目录 第1关:Redis 事务与锁机制第2关:流水线第3关:发布订阅第4关:超时命令第5关:使用Lua语言 第1关:Redis 事务与锁机制 编程要求 根据提示,在右侧编辑器Begin-End补充代码,根据…

Mac managing Multiple Python Versions With pyenv 【 mac pyenv 管理多个python 版本 】

文章目录 1. 简介2. 安装2.1 brew 安装 pyenv2.2 脚本安装 3. pyenv 安装 Python4. 卸载 python5. 管理 python 1. 简介 Pyenv 是一个用于管理和切换多个 Python 版本的工具。它允许开发人员在同一台计算机上同时安装和使用多个不同的 Python 版本,而无需对系统进行…

基于EasyDarwin、ffmpeg实现rtsp推流

目录 1 安装EasyDarwin 2 编译安装ffmpeg 3 启动EasyDarwin 4 ffmepg推流 5 百度网盘备份 某项目中测试时需要用到推流,于是用EasyDarwin、ffmpeg实现了RTSP推流,简单记录下过程, 1 安装EasyDarwin 这个可以去官网下载:Eas…

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代,除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial(新生代) Serial Old(老年代) Pa…

Jenkins 构建环境指南

目录 Delete workspace before build starts(常用) Use secret text(s) or file(s) (常用) Add timestamps to the Console Output (常用) Inspect build log for published build scans Terminate a …

Python与Flink的完美融合:合流基本操作解析

更多资料获取 📚 个人网站:ipengtao.com Apache Flink 是一个流式处理框架,支持复杂事件处理和大规模数据分析。在 Flink 中,合流(Join)是一种常见的操作,用于将两个或多个流中的数据按照指定条…

【jsonview去除排序】如何让jsonview不自动排序(已解决)

✈️涉及知识 如何取消JSON默认数值排序,JSON.parse()函数排序关闭,取消JSON.parse排序,Json格式化校验,jsonview排序问题解决方法。 🥇专栏🥇:前端技术,json格式化 💂关…

【模式识别】解锁降维奥秘:深度剖析PCA人脸识别技术

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《模式之谜 | 数据奇迹解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌌1 初识模式识…

【力扣100】543.二叉树的直径

添加链接描述 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def __init__(self):self.max 0def diamete…

【C语言】自定义类型——枚举、联合体

引言 对枚举、联合体进行介绍,包括枚举的声明、枚举的优点,联合体的声明、联合体的大小。 ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》 🎈跟着猪巴戒,一起学习C语言🎈 目录 引言 枚举 枚举…

【JVM从入门到实战】(八)垃圾回收(1)

内存泄漏:指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃 圾回收器来对不再使用的…

速度与稳定性的完美结合:深入横测ToDesk、TeamViewer和AnyDesk

文章目录 前言什么是远程办公?远程办公的优势 远程办公软件横测对象远程软件的注册&安装ToDeskTeamViewerAnyDesk 各场景下的实操体验1.办公文件传输及丢包率2.玩游戏操作延迟、稳定3.追剧画质流畅度、稳定4.临时技术支持SOS模式 收费情况与设备连接数总结 前言…

VueCron使用方法

1)什么是vueCron Vue Cron 是基于 Vue.js 的定时任务管理组件,它提供了一种简单易用的方式来设定和管理定时任务。Vue Cron 提供了一个类似于 Linux crontab 的界面,用户可以通过它来创建、编辑和删除定时任务。 2)安装依赖及应…