无锡阿里巴巴做网站,建网站深,服装网络营销方案策划,金华义乌网站建设一、前言 在mysql一主两从架构的前提下#xff0c;引入读写分离组件#xff0c;可以极大的提高mysql性能#xff0c;proxysql可以在高可用mysql架构发生主从故障时#xff0c;进行自动的主从读写节点切换#xff0c;即当mysql其他从节点当选新的主节点时#xff0c;proxy…一、前言 在mysql一主两从架构的前提下引入读写分离组件可以极大的提高mysql性能proxysql可以在高可用mysql架构发生主从故障时进行自动的主从读写节点切换即当mysql其他从节点当选新的主节点时proxysql会自动识别6033端口为mysql命令调用端口6032端口为proxysql的管理端口
二、部署 需要先部署mysql主从架构或者mysql高可用架构mysql主从架构没有高可用功能mysql高可用架构拥有高可用功能使用主从架构发生故障没有主从切换功能所有proxysql也不会进行故障切换 主从参考mysql一主两从读写分离搭建_mysql 一主两从搭建-CSDN博客 高可用参考 mysql mha高可用-CSDN博客 在github上下载proxysql rpm安装包 参考 Releases · sysown/proxysql · GitHub 我这里使用的是 2.4.0版本的安装包太新版本的配置了读写组后会出现mysql_servers库的组id不会自动更改识别但是proxysql的读写分离和故障切换功能都是正常的并没有影响 创建proxysql安装包存放目录 mkdir /opt/proxysql cd /opt/proxysql ls 安装proxysql yum -y install proxysql-2.4.0-1-centos7.x86_64.rpm 在mysql创建监控用户 mysql -u root -p grant select on *.* to monitor% identified by 12345678; flush privileges; 登陆proxysql配置读写分离
mysql -u admin -padmin -h 127.0.0.1 -P6032 --promptAdmin 插入后端mysql信息
#组id都配置都无所谓后面通过配置了识别read_only分配读写分离组id会自动变更到对应组
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,10.1.60.113,3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,10.1.60.114,3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,10.1.60.115,3306);
查看插入的mysql信息
select * from mysql_servers 配置后端mysql的监控用户
UPDATE global_variables SET variable_valuemonitor WHERE variable_namemysql-monitor_username;
UPDATE global_variables SET variable_value12345678 WHERE variable_namemysql-monitor_password;
update global_variables set variable_value2000 where variable_name in (mysql-monitor_connect_interval,mysql-monitor_ping_interval,mysql-monitor_read_only_interval);
查看修改后的配置
SELECT * FROM global_variables WHERE variable_name LIKE mysql-monitor_%; 使配置生效与保存配置
load mysql servers to runtime;
save mysql servers to disk;
查看对后端的健康检查结果
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 3; SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 3; 配置主从切换的自动检测即检测read_only状态分配到读组或写组
INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) VALUES (1,2,cluster1);
使配置生效
LOAD MYSQL SERVERS TO RUNTIME; 检查是否生效
SELECT * FROM monitor.mysql_server_read_only_log ORDER BY time_start_us DESC LIMIT 3; 可以看到已经识别到后端不同mysql节点的read_only状态 现在查看mysql_servers表也会发现之前配置的相同的id也自动更改为根据主从节点分配的读写组id 配置读写分离规则
#注意规则配置的顺序代表匹配的顺序前面的匹配不到才会匹配后面的
#select命令中这有一条特殊的加锁命令是需要写操作的所以第一条规则是匹配到写id组
#第二条规则匹配所有读命令匹配到读id组这两条规则就可以实现读写分离
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,^SELECT.*FOR UPDATE$,1,1);
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,^SELECT,2,1);
查看配置的读写分离规则
SELECT match_digest,destination_hostgroup FROM mysql_query_rules WHERE active1; 在proxysql中配置mysql存在的用户
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES (root,12345678,1);
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES (deploy,12345678,1);
查看配置的用户
SELECT * FROM mysql_users; 保存与使配置生效
LOAD MYSQL QUERY RULES TO RUNTIME;
save mysql servers to disk;
使用以上配置的用户在其他mysql中调用proxysql端口执行命令验证读写分离
mysql -u root -p -h10.1.60.115 -P6033 -e select * from mysql.user 查找执行命令表查询命令在哪台主机执行
SELECT * FROM stats.stats_mysql_connection_pool; 可以每执行一条就查询一次就可以看出读写分离的效果了
也可以通过以下命令直接查询命令在哪个组执行了来验证是否进行了读写分离
SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC; 可以看到读操作都分配在了组id为2的读组 至此proxysql 读写分离配置完成关于主从的故障切换可以通过mysql高可用架构自行验证当mysql的主节点挂掉先由高可用组件实现主从的故障切换选出新的主节点然后proxysql根据每个mysql节点的read_only变化去变更mysql节点所在的读写组实现读写节点的切换
关于proxysql的高可用可以通过keepalived组件实现即再部署一个proxysql在两个proxysql上部署keepalived高可用组件实现