标签:主程序 ref amoeba des app 一个 tran https 硬盘
mysq通过ProxySQL实现读写分离 Oracle:mysql-proxy
qihoo:Atlas
美团:dbproxy
网易:cetus
amoeba
阿里巴巴:cobar 基于amoeba研发
Mycat:基于cobar实现
ProxySQL
准备:
注:slave服务器 配置文件中必须为 read_only=1,ProxySQL通过read_only=1参数,确定哪个是salve服务器
基于YUM仓库安装:
[ root@centos ~]# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
EOF
ProxySQL的组成:
启动ProxySQL:service proxysql start
使用mysql客户端连接到ProxySQL的管理端口6032,默认管理员用户和密码都是admin
[ root@weiying ~]# mysql -uadmin -padmin -p6032 -hhost
ProxySQL实现读写分离:
内置了SQLite小型数据库,里面存储了proxysql的设置
- 内置的数据库说明:
- main:是默认的数据库名,表里面存放后端db实例,用户验证,路由规则等信息,表名以runtime_开头表示ProxySQL当前运行的配置内容,不能通过dml语句修改,只能修改对应的不以runtime_开头的表,然后LOAD使其生效,save使其保存到硬盘一共下次重启加载
- disk:是持久化到停盘的配置,sqlite数据文件
- stats:是ProxySQL运行抓取到的统计信息,包括到后端各命令的执行次数、流量、processlist、查询种类汇总/执行时间、等等
- monnitor:库存储monitor模块收集的信息,主要是对后端db的健康/延迟检查
注:监控模块的指标存在log表中
- 说明:
1. 在main和monitor数据库中的表,runtime_开头的是运行时的配置,不能修改,只能修改非runtime_表
2. 修改后必须执行LOAD … TO RUNTIME才能加载到RUNTIME生效
3. 执行save … to disk 才将配置持久化保存到磁盘,即保存在proxysql.db文件中
4. global_variables 有许多变量可以设置,其中就包括监听的端口、管理账号等
参考: https://github.com/sysown/proxysql/wiki/Global-variables
配置- ProxySQL:
1. 查看指定的表结构:
select * from sqlite_master where name=‘mysql_servers‘\G
2. 添加所有参与主从复制的主机:
insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘172.22.45.131‘,3306);
insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘172.22.45.132‘,3306);
3. 加载到runtime中使其生效:
load mysql servers to runtime;
4. 保存到硬盘中:
save mysql servers to disk;
字段说明:
hostgroup_id:分组id,用来实现区分读组和写组,后续可通过ProxySQL程序自动判断
hostname:主从服务器的地址
port:主从服务器监听的端口号
grant replication client on *.* to monitor@‘172.22.45.%‘ identified by ‘centos‘; #用来实现proxysql连接主从节点
ProxySQL上配置监控:
set mysql-monitor_username=‘monitor‘;
set mysql-monitor_password=‘centos‘;
load mysql variables to runtime;
save mysql variables to disk;
查看监控连接是否正常:
select * from mysql_server_connect_log;
查看监控心跳信息(对ping指标的监控):
select * from mysql_server_ping_log;
查看read_only和replication_lag的监控日志
select * from mysql_server_read_only_log;
select * from mysql_server_replication_lag_log;
insert inot mysql_replication_hostgroups values(10,20,‘test‘);
load mysql servers to runtime;
save mysql servers to disk;
# Monitor模块监控后端的read_only值,按照read_only的值将节点自动移动到读/写组
查看主从服务器的分组信息:
select hostgroup_id,hostname,port,status,weight from mysql_servers;
+--------------+---------------+------+--------+--------+
| hostgroup_id | hostname | port | status | weight |
+--------------+---------------+------+--------+--------+
| 10 | 172.22.45.131 | 3306 | ONLINE | 1 |
| 20 | 172.22.45.132 | 3306 | ONLINE | 1 |
+--------------+---------------+------+--------+--------+
grant all on *.* to sqluser@‘host‘ identified by ‘centos‘; #用来让用户连接proxy使用
insert into mysql_users(username,password,default_hostgroup)values(‘sqluser‘,‘magedu‘,10);
load mysql servers to runtime;
save mysql servers to disk;
mysql -usqluser -pcentos -P6033 -h127.0.0.1 -e ‘select @@server_id‘
+-------------+
| @@server_id |
+-------------+
| 131 |
+-------------+
mysql -usqluser -pcentos -P6033 -h127.0.0.1 -e ‘create database testdb‘
mysql -usqluser -pcentos testdb -P6033 -h127.0.0.1 -e ‘create table t(id int)‘
配置读写分离的路由规则:
与规则有关的表:mysql_query_rules和mysql_query_rules_fast_routing,后者是前者的扩展表,1.4.7之后支持
插入路由规则:将select语句分离到20的读组,select语句中有一个特殊语句SELECT...FOR UPDATE它会申请写锁,应路由到10的写组:insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) VALUES(1,1,‘^SELECT.*FOR UPDATE$‘,10,1),(2,1,‘^SELECT‘,20,1);
load mysql query rules to runtime;
save mysql query rules to disk;
#注意:因ProxySQL根据rule_id顺序进行规则匹配,select ... for update规则的 rule_id必须要小于普通的select规则的rule_id
mysql -usqluser -pmagedu -P6033 -h127.0.0.1 -e ‘select @@server_id‘
+-------------+
| @@server_id |
+-------------+
| 131 |
+-------------+
mysql -usqluser -pcentos -P6033 -h172.22.45.133 -e ‘start transaction;select @@server_id;commit;select @@server_id‘
+-------------+
| @@server_id |
+-------------+
| 131 |
+-------------+
+-------------+
| @@server_id |
+-------------+
| 132 |
+-------------+
mysql -usqluser -pcentos -P6033 -h127.0.0.1 -e ‘insert testdb.t values (1)‘
mysql -usqluser -pcentos -P6033 -h127.0.0.1 -e ‘select id from testdb.t‘
SELECT hostgroup hg,sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
标签:主程序 ref amoeba des app 一个 tran https 硬盘
原文地址:https://blog.51cto.com/13408885/2392208