文档结构如下:
1、Proxysql说明Proxysql是MysqL的一款中间件的产品,是灵活的MysqL代理层,可以实现读写分离,支持query路由器的功能,支持动态指定sql进行缓存,支持动态加载配置,故障切换和一些sql的过滤功能。
其他产品:Dbproxy,MyCAT,OneProxy等。
2、MHA+Proxysql 读写分离实验2.1. 安装步骤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监控href="https://github.com/sysown/proxysql/wiki/Configuring-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,'172.16.10.34','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,'^SELECT',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 读写分离高可用全部内容,希望文章能够帮你解决MHA+ProxySQL 读写分离高可用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)