proxysql读写分离组件部署

2023-12-20 20:45

本文主要是介绍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高可用组件实现

这篇关于proxysql读写分离组件部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517439

相关文章

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins