暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ProxySQL

MySQLDBA修炼之路 2019-08-19
1395

ProxySQL是一个读写分离的中间件,开源项目,优势是强大的规则引擎、支持在线配置、支持负载均衡,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能

准备3台虚拟机:

192.168.168.101  maseter1

192.168.168.102  slave1

192.168.168.103  slave2

在从库设置read_only

set global read_only=1

只读参数,需要大家注意的对于拥有super权限的用户,该参数不起作用

set global super_read_only=1(5.7新参数)

如果想对拥有super权限用户只读,使用super_read_only,开启该参数后,read_only会自动开启。

关闭防火墙,每台 systemctl stop firewalld.service

1、首先安装ProxySQL

yum -y install perl-DBD-MySQLyum -y install perl-DBIyum -y install perl-Time-HiResyum -y install perl-IO-Socket-SSL

下载https://github.com/sysown/proxysql/releases软件

安装:安装在101机上就可

rpm -ivh proxysql-1.3.10-1-centos7.x86_64.rpm

service proxysql start开启proxySQL

利用101机上mysql客户端登录proxysql

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

--service proxysql stop关闭proxySQL

看到4个库

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

mysql_servers—后端可以连接MySQL服务器的列表。mysql_users—配置后端数据库的账号和监控的账号。mysql_query_rules—指定Query路由到后端不同服务器的规则列表。

注:表名以runtime_开头的表示ProxySQL当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以 runtime开头的表,然后“LOAD”使其生效,“SAVE”使其存到硬盘以供下次重启加载。

disk库—持久化磁盘的配置。stats库—统计信息的汇总。monitor库—一些监控的收集信息,包括数据库的健康状态等。

2、配置监控

主库上配置101机proxy监控账户和对外访问账户

grant all on *.* to chen@'%' identified by 'chen' with grant option;

grant all on *.* to monitor@'%' identified by 'monitor' with grant option;

flush privileges;

3、配置后端可以连接MySQL服务器的列表

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

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

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

介绍完这三层配置系统之后,用超管用户登录ProxySQL来添加主从服务器列表。

进入proxySQL执行如下sql

insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.168.101',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.168.102',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.168.103',3306);

load mysql servers to runtime;

save mysql servers to disk;

登录ProxySQL之后,凡是进行任何操作,都需要运行load to runtime,从memory加载到runtime。然后再执行save  to disk持久化到磁盘。

4、配置监控账号

接下来继续为ProxySQL配置监控账号,命令如下:

set mysql-monitor_username='monitor';

set mysql-monitor_password='monitor';

load mysql variables to runtime;

save mysql variables to disk;

查看监控信息

select * from monitor.mysql_server_connect_log order by time_start_us desc limit 6;

5、配置ProxySQL主从分组信息

show create table mysql_replication_hostgroups

里面的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;

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

6、配置对外访问账号,默认指定主库,并对该用户开启事务持久化保护。

注:mysql_users表中的transaction_persistent字段默认为0

建议在创建完用户之后设置为1,避免发生脏读、幻读等现象命令如下:

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

update mysql_users set transaction_persistent=1 where username='chen';

load mysql users to runtime;

save mysql users to disk;

验证登录的服务器就是主库:

不要在101机上登录,随便找个可以连接的就行,我找的103机子

usr/local/mysql/bin/mysql -uchen -pchen -h192.168.168.101 -P6033 -e "show slave hosts"

7、配置读写分离策略

配置读写分离策略需要使用mysql_query_rules表。表中的match_pattern字段就是代表设置的规则,destination_hostgroup字段代表默认指定的分组,apply代表真正执行应用规则。

把所有以select开头的语句全部分配到编号为20的读组中。select for update 会产生一个写锁,对数据查询的实效性要求高,把它分配到编号为10的写组中,其他所有操作都会默认路由到写组中。

命令如下:

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;

8、测试读写分离

登录管理端口,查看

select * from stats_mysql_query_digest;

9、调整权重

update mysql_servers set weight=10 where hostname='192.168.168.102';

load mysql servers to runtime;

save mysql servers to disk;


文章转载自MySQLDBA修炼之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论