热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读写分离_MHA+ProxySQL读写分离高可用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MHA+ProxySQL读写分离高可用相关的知识,希望对你有一定的参考价值。文档结构如下:

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MHA+ProxySQL 读写分离高可用相关的知识,希望对你有一定的参考价值。



文档结构如下:

 

 


1、ProxySQL说明

ProxySQL是mysql的一款中间件的产品,是灵活的mysql代理层,可以实现读写分离,支持query路由器的功能,支持动态指定sql进行缓存,支持动态加载配置,故障切换和一些sql的过滤功能。

其他产品:Dbproxy,MyCAT,OneProxy等。

 


2、MHA+Proxysql 读写分离实验


2.1. 安装步骤









































IP


角色


操作系统


版本


172.16.10.21


Proxysql


Redhat6.7


1.4.9


172.16.10.32


Master


Redhat6.7


5.7.20


172.16.10.34


Slave1


Redhat6.7


5.7.20


172.16.10.36


Salve2


Redhat6.7


5.7.20


172.16.10.30


VIP


 


 


 

从库开启read_Only=1,主库read_Only=0

ProxySQL安装源码包:

yum -y install perl-DBD-MYSQL perl-DBI perl-Time-Hires perl-IO-Socket-ssl

或者简单粗暴的 :yum -y install perl*

proxySQL软件包下载地址:

https://www.percona.com/downloads/proxysql/

安装proxysql

rpm -ivh proxysql-1.4.9-1.1.el6.x86_64.rpm

配置文件路径为:/etc/proxysql.cnf

启动proxysql

service proxysql start

 

 

netstat -anlp |grep proxysql

 

 

6032是管理端口,6033是对外服务的端口号

用户名和密码默认都是admin

使用帮助如下:

 

 

 

查看proxysql 安装库情况:

mysql -uadmin -padmin -h127.0.0.1 -P6032

 

 

 

 


2.2. Proxysql库说明

Proxysql 版本1.4.9-percona-1.1实例:

Main:内存配置数据库,即memory,表里存放后端db实例,用户验证,路由规则等信息。Main库中有如下信息:

 

 

mysql_servers          --后端可以连接mysql服务器的列表                   

mysql_users            --配置后端数据库的账号和监控的账号

mysql_query_rules    --指定query路由到后端不同服务器的规则列表

 

disk库:持续化磁盘的配置。

Stats库:统计信息的汇总。

Monitor库:一些监控的收集信息,包括数据库的健康状态。

 


2.3. 配置proxysql监控

 

https://github.com/sysown/proxysql/wiki/Configuring-ProxySQL

顶层为runtime,中间层为memory,底层也就是持久层disk和config file。

 

Runtime:代表Proxysql当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层load进来。

Memory:memory层上面连接runtime层,下面连接持久化层。在这层可以正常操作Proxysql配置,随便修改,不会影响生产环境。修改一个配置一般都是现在memory层完成,确认正常后在加载到runtime和持久化到磁盘。

Disk和config file:持久化配置信息,重启后内存的配置信息会丢失,所以需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

 

1为写组,2为读组。

insert into mysql_servers(hostgroup_id,hostname,port) values(10,\'172.16.10.32\',3307);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,\'172.16.10.34\',3307);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,\'172.16.10.36\',3307);

 

select * from mysql_servers;

 

 

 

配置监控账户:

create user \'mon\'@\'172.16.10.%\' IDENTIFIED BY \'mon\';

GRANT all privileges ON *.* TO \'mon\'@\'172.16.10.%\' with grant option;

 

对外访问账户:

create user \'wr\'@\'172.16.10.%\' IDENTIFIED BY \'wr\';

GRANT all privileges ON *.* TO ON *.* TO \'wr\'@\'172.16.10.%\' with grant option;  

 

配置Proxysql监控:

set mysql-monitor_username=\'mon\';

set mysql-monitor_password=\'mon\';

load mysql servers to runtime;

save mysql servers to disk;

 

 

 

之后验证监控信息:

select * from monitor.mysql_server_connect_log limit 6;

 

 

select * from monitor.mysql_server_ping_log order by time_start_us limit 6;

 

 

监控信息提示正常。

 


2.4. 配置Proxysql主从分区信息

配置主从分区需要用到mysql_replication_hostgroups

show create table mysql_replication_hostgroups\\G;

 

writer_hostgroup 写入组的编号

reader_hostgroup 读取组的编号

实验使用10作为写入组,20作为读取组。

insert into mysql_replication_hostgroups values(10,20,\'proxy\');

load mysql servers to runtime;

save mysql servers to disk;

select * from mysql_replication_hostgroups;

 

 

Proxysql 会根据server的read_only的取值将服务进行分组,read_Only=0的server,master被分到编号为10的组,read_Only=1的server,slave则被分到编号为20的读组。

select * from mysql_servers;

 

 

Mysql_users表中的 transaction_persistent字段默认为0,建议在创建完用户之后设置为1,避免发生脏读幻读等现象:

insert into mysql_users(username,password,default_hostgroup) values(\'wr\',\'wr\',10);

update mysql_users set transaction_persistent=1 where username=\'wr\';

load mysql users to runtime;

save mysql users to disk;

测试登陆(端口6033):

mysql -uwr -pwr -h 172.16.10.34 -P3307 -e "show slave status\\G"

 

 


2.5. 配置读写分离策略

 

配置读写分离使用的表mysql_query_rules:

match_pattern:字段就是代表设置的规则。

destination_hostgroup:字段代表默认指定的分组。

apply代表真正执行应用规则。

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,\'^SELECT.*FOR UPDATE$\',10,1);

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,\'^SELECT\',20,1);

LOAD MYSQL QUERY RULES TO RUNTIME;

SAVE MYSQL QUERY RULES TO DISK;

 


2.6. 测试读写分离

通过wr所创建的账户连接Proxysql登陆数据库。

mysql -uwr -pwr -h172.16.10.21 -P6033

 

 

 

通过管理端口登陆查看:

mysql -uadmin -padmin -h127.0.0.1 -P6032

select * from stats_mysql_query_digest;

 

 

可以得知,select count(*) from t; 这条语句自动编号到20的读组上,即slave上。

 

测试update。

 

测试update语句在10的写组上。

 


2.7. 读写分离权重调整

读写分离设置成功后,可以调节权重,如slave2(172.16.10.36)多进行读操作。

update mysql_servers set weight=10 where hostname=\'172.16.10.36\';

 

load mysql servers to runtime;

load mysql variables to runtime;

load mysql users to runtime;

 

save mysql servers to disk;

save mysql variables to disk;

save mysql users to disk;

 

 

select * from mysql_servers;

 

 


2.8. MHA failover测试

测试前:

 

Master 172.16.10.32为master,组数为10,写组。

Failover后:

 

 

新的master为172.16.10.34(原slave1)

select * from runtime_mysql_servers;

 

 

新的master为写组(10),原为20读组。

 

进行读写分离测试:

 

 

发现读写分离仍然成功(回切后也成功)。

 

 

 



推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • 在安装 iOS 开发所需的 CocoaPods 时,用户可能会遇到多种问题。其中一个常见问题是,在执行 `pod setup` 命令后,系统无法连接到 GitHub 以更新 CocoaPods/Specs 仓库。这可能是由于网络连接不稳定、GitHub 服务器暂时不可用或本地配置错误等原因导致。为解决此问题,建议检查网络连接、确保 GitHub API 限制未被触发,并验证本地配置文件是否正确。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
author-avatar
砖头资源
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有