架构
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
ProxySQL的多层配置结构逻辑
proxysql的操作,分成三层
最顶层为runtime层,数据加载到这一层后可以实现执行;
中间层为内存层,也就是各种表内容的写入;
最底层为disk层,也就是把数据写到磁盘保存;
根据吴总的推荐,proxy的操作最好是首先在内存层的个表中写入数据,确认数据无误后,写入到disk层进行存储,存储完毕后加载到runtime层用于实现;
不过网上的文档很多是直接加载到runtime,然后再存储到disk中,个人觉得吴总的方法更严谨一点(然而我做实验的时候因为是测试库的关系,实际上也是先执行的load_)
实际搭建配置ProxySQL+MGR+读写分离过程
#相关账号已经存在于MySQL正式库中
monitor为前端监控账号
run为后端程序账号
权限给的不是很严谨,为了保障实验顺利,给的都是all privileges;实际工作中,监控端账号只需要给select权限即可
#之前已经部署过proxysql,这里需要干掉老的proxysql,重新部署一次
删除proxysql的配置和路径
#yum安装proxysql
#配置/etc/proxysql.cnf
#启动proxysql并用admin登陆(6032端口)
#配置监控账号
set mysql-monitor_username='monitor';
set mysql-monitor_password='beacon';
这里配置的监控账号密码与proxysql.cnf里面配置的一致
#配置默认组信息
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
#配置用户(主要是添加程序端的这个用户,也就是run,将其设置到写组10里面)
insert into mysql_users(username,password,default_hostgroup) values('run','beacon',10);
#配置后端节点信息
主节点定义为写组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');
#配置读写分离参数
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;
#保存到磁盘并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;
#用程序端账号并使用6033端口登陆,执行show databases可以得出结果,证明状态通畅
验证ProxySQL相关功能
测试部分说法约定
监控端:使用admin用户登陆6032端口
程序端:使用run用户登陆6033端口
节点端:使用root用户在本地登陆
#在MySQL库添加一个监控脚本:addition_to_sys.sql
脚本内容如下
作者:飞翔的麋鹿
链接:https://www.jianshu.com/p/e22b149ba270