mysqlproxy mysql mgr_ProxySQL+MGR+读写分离(完结)

架构

ProxySQL:172.17.100.101

MGR单主:172.17.100.101

MGR双从:172.17.100.103

172.17.100.104

部署ProxySQL

#下载安装最新的proxy1.4.x版本

(本段摘抄自骏马金龙博客:http://www.cnblogs.com/f-ck-need-u/p/9278818.html)

cat <

[proxysql_repo]

name= ProxySQL

baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever

gpgcheck=1

gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key

EOF

yum install -y proxysql

AAffA0nNPuCLAAAAAElFTkSuQmCC

ProxySQL的多层配置结构逻辑

proxysql的操作,分成三层

最顶层为runtime层,数据加载到这一层后可以实现执行;

中间层为内存层,也就是各种表内容的写入;

最底层为disk层,也就是把数据写到磁盘保存;

根据吴总的推荐,proxy的操作最好是首先在内存层的个表中写入数据,确认数据无误后,写入到disk层进行存储,存储完毕后加载到runtime层用于实现;

不过网上的文档很多是直接加载到runtime,然后再存储到disk中,个人觉得吴总的方法更严谨一点(然而我做实验的时候因为是测试库的关系,实际上也是先执行的load_)

AAffA0nNPuCLAAAAAElFTkSuQmCC

实际搭建配置ProxySQL+MGR+读写分离过程

#相关账号已经存在于MySQL正式库中

monitor为前端监控账号

run为后端程序账号

权限给的不是很严谨,为了保障实验顺利,给的都是all privileges;实际工作中,监控端账号只需要给select权限即可

AAffA0nNPuCLAAAAAElFTkSuQmCC

#之前已经部署过proxysql,这里需要干掉老的proxysql,重新部署一次

删除proxysql的配置和路径

AAffA0nNPuCLAAAAAElFTkSuQmCC

#yum安装proxysql

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置/etc/proxysql.cnf

AAffA0nNPuCLAAAAAElFTkSuQmCC

#启动proxysql并用admin登陆(6032端口)

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置监控账号

set mysql-monitor_username='monitor';

set mysql-monitor_password='beacon';

这里配置的监控账号密码与proxysql.cnf里面配置的一致

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置默认组信息

insert into mysql_group_replication_hostgroups(writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup,active) values(10,20,30,40,1);

组ID含义如下

写组:10

备写组:20

读组:30

离线组(不可用):40

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置用户(主要是添加程序端的这个用户,也就是run,将其设置到写组10里面)

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置后端节点信息

主节点定义为写组10,从节点定义为只读组30

insert into mysql_servers(hostgroup_id,hostname,port,comment) values(10,'172.17.100.101',3306,'write');

insert into mysql_servers(hostgroup_id,hostname,port,comment) values(30,'172.17.100.103',3306,'read');

insert into mysql_servers(hostgroup_id,hostname,port,comment) values(30,'172.17.100.104',3306,'read');

AAffA0nNPuCLAAAAAElFTkSuQmCC

#配置读写分离参数

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

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',30,1);

select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;

AAffA0nNPuCLAAAAAElFTkSuQmCC

#保存到磁盘并load到runtime

综上,我们一共操作了5张表

mysql_users

mysql_servers

mysql_query_rules

global_variables

mysql_group_replication_hostgroups

前面4张都需要执行save和load操作

save是使内存数据永久存储到磁盘,load使内存数据加载到runtime生效

save mysql users to disk;

save mysql servers to disk;

save mysql query rules to disk;

save mysql variables to disk;

save admin variables to disk;

load mysql users to runtime;

load mysql servers to runtime;

load mysql query rules to runtime;

load mysql variables to runtime;

load admin variables to runtime;

AAffA0nNPuCLAAAAAElFTkSuQmCC

#用程序端账号并使用6033端口登陆,执行show databases可以得出结果,证明状态通畅

AAffA0nNPuCLAAAAAElFTkSuQmCC

验证ProxySQL相关功能

测试部分说法约定

监控端:使用admin用户登陆6032端口

程序端:使用run用户登陆6033端口

节点端:使用root用户在本地登陆

#在MySQL库添加一个监控脚本:addition_to_sys.sql

脚本内容如下

作者:飞翔的麋鹿

链接:https://www.jianshu.com/p/e22b149ba270

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值