文档结构如下:

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 读写分离高可用的更多相关文章

  1. MHA+ProxySQL实现读写分离高可用

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...

  2. MySQL for OPS 09:MHA + Atlas 实现读写分离高可用

    写在前面的话 前面做了 MHA 高可用,但是存在这样一个问题,我们花了 4 台机器,但是最终被利用起来的也就一台,主库.这样硬件利用率才 25%,这意味着除非发生故障,不然其他几台机器都是摆设.明显的 ...

  3. MySQL读写分离高可用集群及读操作负载均衡(Centos7)

    目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...

  4. Atlas读写分离[高可用]

    Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...

  5. mysql读写分离[高可用]

    顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...

  6. mysqlfailover高可用与proxysql读写分离配置

    proxysql官方推荐两种高可用方案: 1.MHA+proxysql 2.mysqlrpladmin+proxysql MySQLfailover工具包含在mysqlrpladmin工具中,所以两者 ...

  7. Proxysql读写分离配置

    ProxySQL是Percona主推的读写分离中间件,下载地址为: https://www.percona.com/downloads/proxysql/ 一.安装 1:下载 wget https:/ ...

  8. MySQL ProxySQL读写分离实践

    目的 在上一篇文章MySQL ProxySQL读写分离使用初探里初步介绍了ProxySQL的使用,本文继续介绍它的一些特点和DBProxy的性能差异.深入一些去了解ProxySQL,通过测试来说明Pr ...

  9. centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离

    目录 简介 相关链接 环境准备 Atlas 环境 MySQL 集群环境 Atlas 安装 和 配置 为数据库的密码加密 修改配置文件 启动 Keepalived 安装配置 安装 master 配置 K ...

随机推荐

  1. Oracle 优化和性能调整

    分析评价Oracle数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:  数据库用户响应时间=系统服务时间+用户等待时间  因此 ...

  2. USACO 保护花朵 Protecting the Flowers, 2007 Jan

    Description 约翰留下了 N 只奶牛呆在家里,自顾自地去干活了,这是非常失策的.他还在的时候,奶牛像 往常一样悠闲地在牧场里吃草.可是当他回来的时候,他看到了一幕惨剧:他的奶牛跑进了他的花园 ...

  3. JavaScript DOM编程艺术(第2版)学习笔记2(4~6章应用实例)

    本书的第4章使用第3章学到的操作DOM的方法和属性写了一个展示图片的网页,并在第5,6章对代码进行了优化. 第一版,搭建网页的静态结构,包括一级标题<h1>,无序列表清单<ul> ...

  4. SQL Server的复合索引学习【转载】

      概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结. 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列 ...

  5. mac 下安装mcrypt 扩展

    参考: http://coolestguidesontheplanet.com/how-to-install-mcrypt-for-php-on-mac-osx-lion-10-7-developme ...

  6. php基础-------preg_replace()与preg_replace_callback()

    1.preg_replace() 执行一个正则表达式的搜索和替换. 语法: mixed preg_replace ( mixed $pattern , mixed $replacement , mix ...

  7. ZBrush常用快捷键

    ZBrush是一款数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.强大的功能离不开便捷的操作,为此ZBrush®提供了一系列常用操作快捷键,熟练掌握这些快捷键,可帮助您节 ...

  8. 前端精选文摘:css之BFC 神奇背后的原理(转载)

    一.BFC是什么? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...

  9. js-数组和字符串转化

    一.数组=>字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var arr, str;arr = new Array(0,1,2,3,4);str = arr.join(" ...

  10. HDU 2049 不容易系列之(4)——考新郎( 错排 )

    链接:传送门 思路:错排水题,从N个人中选出M个人进行错排,即 C(n,m)*d[m] 补充:组合数C(n,m)能用double计算吗?第二部分有解释 Part 1. 分别求出来组合数的分子和分母然后 ...