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读组。
进行读写分离测试:

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

MHA+ProxySQL 读写分离高可用的更多相关文章
- MHA+ProxySQL实现读写分离高可用
最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...
- MySQL for OPS 09:MHA + Atlas 实现读写分离高可用
写在前面的话 前面做了 MHA 高可用,但是存在这样一个问题,我们花了 4 台机器,但是最终被利用起来的也就一台,主库.这样硬件利用率才 25%,这意味着除非发生故障,不然其他几台机器都是摆设.明显的 ...
- MySQL读写分离高可用集群及读操作负载均衡(Centos7)
目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...
- Atlas读写分离[高可用]
Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...
- mysql读写分离[高可用]
顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...
- mysqlfailover高可用与proxysql读写分离配置
proxysql官方推荐两种高可用方案: 1.MHA+proxysql 2.mysqlrpladmin+proxysql MySQLfailover工具包含在mysqlrpladmin工具中,所以两者 ...
- Proxysql读写分离配置
ProxySQL是Percona主推的读写分离中间件,下载地址为: https://www.percona.com/downloads/proxysql/ 一.安装 1:下载 wget https:/ ...
- MySQL ProxySQL读写分离实践
目的 在上一篇文章MySQL ProxySQL读写分离使用初探里初步介绍了ProxySQL的使用,本文继续介绍它的一些特点和DBProxy的性能差异.深入一些去了解ProxySQL,通过测试来说明Pr ...
- centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离
目录 简介 相关链接 环境准备 Atlas 环境 MySQL 集群环境 Atlas 安装 和 配置 为数据库的密码加密 修改配置文件 启动 Keepalived 安装配置 安装 master 配置 K ...
随机推荐
- DB-MySQL:MySQL 连接的使用
ylbtech-DB-MySQL:MySQL 连接的使用 1.返回顶部 1. Mysql 连接的使用 在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多 ...
- AJAX请求 $.ajaxSetup方法的使用
转自:https://blog.csdn.net/qq_23476319/article/details/78798885 jQuery.ajaxSetup()函数用于设置AJAX的全局默认设置. 该 ...
- C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符
情景描述:由于任务需要,现有一用户表数据,用户名 字段 在新增用户时,输入中文和拼音两种,先要区分同时含有中文和拼音字母的用户名.由于数据很多,可以通过一段代码完成查询: 前提:在阅读本文之前可以先了 ...
- APNs推送
消息推送是可以指定声音的.譬如你可以对正面的反馈使用欢快的声音,对负面的反馈使用低沉一点的声音,都可以达到别出心裁让人眼前一亮的目的.你需要先放一些aiff.wav或者caf音频文件到app的资源文件 ...
- mybatis、spring、mysql、maven实现简单增删查改
之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...
- gdal集成kml库的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 最近要读取kml文件,具体就是把kml文件当作一个矢量文件来读取.我发现gdal是支持集成kml库的.不过集成这个km ...
- pgpool中定义的数据库节点及pgpool支持的复制模式
/* * The first DB node id appears in pgpool.conf or the first "live" DB * node otherwise. ...
- AARRR:互联网创业者一定要掌握的指标
创业公司如何做数据分析?网站分析工具里的指标千百种,到底要从哪些数据入手呢?除了流量跟转换率,还有哪些数据跟公司成长有关呢?或许可以从了解AARRR Metrics开始.AARRR Metrics是由 ...
- Java基础之Colloction
0 引言 以下是介绍Java有关集合类,以及对应每个类的用途,同时进行比较集合类的不同特点来让我们深入了解. 1 Collction接口 Collection是最基本的集合接口,一个Collectio ...
- HDU 1757 A Simple Math Problem( 矩阵快速幂 )
<font color = red , size = '4'>下列图表转载自 efreet 链接:传送门 题意:给出递推关系,求 f(k) % m 的值, 思路: 因为 k<2 * ...