proxysql 部署

环境:

172.17.0.5     proxysql  

172.17.0.4  master

172.17.0.2  slave1

172.17.0.3  slave2

 

master 新建监控账号,以及管理账号:

创建连接数据库的账号
create user 'fengjian'@'172.17.0.%' identified by '123456';
grant all on *.* to 'fengjian'@'172.17.0.%' ;


创建监控账号
create user 'monitor'@'172.17.0.%' identified by 'monitor';
grant select,replication slave on *.* to 'monitor'@'172.17.0.%';

 

2. 设置从 配置文件 read-only  super-read-only 为可读状态。

配置文件
read-only = 1
super-read-only=1

 

 

 

下载:

wget https://github.com/sysown/proxysql/releases/download/v2.0.10/proxysql-2.0.10-1-centos7.x86_64.rpm

 

安装:

yum localinstall proxysql-2.0.10-1-centos7.x86_64.rpm
yum install   openssl*

 

proxysql.con配置文件

 

monitor 监控账户使用  replication client 权限。

 

启动

systemctl start  proxysql

 

登陆

 mysql -u admin -padmin -h 127.0.0.1 -P6032

 

里面有4个库

 

 

main

    是默认的数据库名,表里存放后端db实例、用户验证、路由规则等信息。表名以 runtime_开头的表示proxysql当前运行的配置内容,不能通过dml语句修改,只能修改对应的不以 runtime_ 开头的(在内存)里的表,然后 LOAD 使其生效, SAVE 使其存到硬盘以供下次重启加载。

disk

    是持久化到硬盘的配置,sqlite数据文件。

stats

    是proxysql运行抓取的统计信息,包括到后端各命令的执行次数、流量、processlist、查询种类汇总/执行时间,等等。

monitor 

    存储 monitor 模块收集的信息,主要是对后端db的健康/延迟检查。

  Proxysql登录管理和监控界面后,不需要使用use database_name;的命令,直接查询下列表即可。

 

主要的表信息:

 

 

其中最重要的是 mysql_replication_hostgroupsmysql_servers,mysql_users,mysql_query_rules这4个表,其他表很少修改。这3个最重要的表的内容也可以在/etc/proxysql.conf中修改,但只是第一次初始化时有用,以后的修改和初始化信息都是存储在sqllite文件中的,建议不要对/etc/proxysql.conf做任何修改。

 

1.  mysql_replication_hostgroups

设置 读和写库编号
1.  w_database    10
2.  R_database    11

use main;
insert into mysql_replication_hostgroups(writer_hostgroup, reader_hostgroup) values(10,11);

 

 

 

mysql_servers

 

定义所有可用的mysql数据库IP,hostgroup_id可以自定义,只需将读和写的组设为不一样的hostgroup_id即可。

insert into mysql_servers(hostgroup_id,hostname,port,max_connections,max_replication_lag) values(10,'172.17.0.4',3306,1000,300), (11,'172.17.0.2',3306,1000), (11,'172.17.0.3',3306,1000,300);

 

 如果 master 为read_only 和  super_read_only 那么 hostgroup_id 为 11, 需要把master  配置修改成 OFF 状态。

 

mysql_users

定义连接proxysql的数据库账户和密码,首先需要此账号在mysql库中存在,这里使用已经存在账号,可以看到这个账号既能连接mysql也能连接proxysql的6033端口。

insert into mysql_users(username,password,default_hostgroup,default_schema,max_connections) values('fengjian',123456,10,'T100',10000)

 

 

 

 

global_variables 

查看监控的账号

select * from global_variables where variable_name like '%monitor%';

 


其中set mysql_monitor_write_is_also_reader = true  为主库是不是参与从库服务。

save mysql variables to disk;
load mysql variables to runtime;


 

 

 

最后再load并在sqlite中保存上述各种修改:

load mysql servers to runtime;
load mysql users to runtime;
save mysql servers to disk;
save mysql users to disk;

# 如果更改了 varliables, 需要加载和保存
load mysql variables to runtime;
save mysql variables to disk;

 

 

 

mysql_query_rules:

定义读写分离规则,可以看到是通过正则实现的,下列定义表示除了select for update,其他的select一律转发到hostgroup_id为11的虚拟节点上,也就说读操作负载均衡的分配到17.17.0.2  172.17.0.3 三个库上。其他操作使用默认的hostgroup_id为10的库

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',11,1);
 
--load并在sqlite中保存上述修改。
load mysql query rules to runtime;
save mysql query rules to disk;

 

测试状态:

在一台 有msql的机器上连接:

mysql -h 172.17.0.5   -u fengjian  -p123456 -P 6033

测试读:
            select @@hostname  
      

测试for update
            select @@hostname for  update
       

 

 

 

 

proxysql  stats 库

show tables from stats;

1
global_variables 全局变量 2 stats_mysql_global 当前status 状态值 3 stats_mysql_commands_counters 当前操作命令的统计 4 stats_mysql_processlit 当前的连接的输出 5 stats_mysql_query_digest 6 stats_mysql_query_digest_reset 重新清空 query_digest 7 stats_mysql_query_rules 启作用的规则。

 

 select * from stats_mysql_query_digest\G;

digest_text: CREATE INDEX k_8 ON sbtest8(k)
*************************** 55. row ***************************
digest_text: CREATE TABLE sbtest9( id INTEGER NOT NULL AUTO_INCREMENT, k INTEGER DEFAULT ? NOT NULL, c CHAR(?) DEFAULT ? NOT NULL, pad CHAR(?) DEFAULT ? NOT NULL, PRIMARY KEY (id) ) ENGINE = Innodb
*************************** 56. row ***************************
digest_text: CREATE INDEX k_7 ON sbtest7(k)
*************************** 57. row ***************************
digest_text: CREATE INDEX k_9 ON sbtest9(k)
*************************** 58. row ***************************
digest_text: CREATE INDEX k_10 ON sbtest10(k)
*************************** 59. row ***************************
digest_text: CREATE TABLE sbtest7( id INTEGER NOT NULL AUTO_INCREMENT, k INTEGER DEFAULT ? NOT NULL, c CHAR(?) DEFAULT ? NOT NULL, pad CHAR(?) DEFAULT ? NOT NULL, PRIMARY KEY (id) ) ENGINE = Innodb
*************************** 60. row ***************************
digest_text: CREATE TABLE sbtest10( id INTEGER NOT NULL AUTO_INCREMENT, k INTEGER DEFAULT ? NOT NULL, c CHAR(?) DEFAULT ? NOT NULL, pad CHAR(?) DEFAULT ? NOT NULL, PRIMARY KEY (id) ) ENGINE = Innodb

 

查看 stats.stats_mysql_query_digest 表结构

show create table stats.stats_mysql_query_digest

 stats_mysql_query_digest | CREATE TABLE stats_mysql_query_digest (
    hostgroup INT,
    schemaname VARCHAR NOT NULL,
    username VARCHAR NOT NULL,
    client_address VARCHAR NOT NULL,
    digest VARCHAR NOT NULL,
    digest_text VARCHAR NOT NULL,
    count_star INTEGER NOT NULL,    #访问多少次
    first_seen INTEGER NOT NULL,
    last_seen INTEGER NOT NULL,
    sum_time INTEGER NOT NULL,
    min_time INTEGER NOT NULL,
    max_time INTEGER NOT NULL,
    sum_rows_affected INTEGER NOT NULL,
    sum_rows_sent INTEGER NOT NULL,
    PRIMARY KEY(hostgroup, schemaname, username, client_address, digest)) |


可以找到访问次数最多的sql, 清空后,看多少次请求
select sum(count_star) from stats_mysql_query_digest

做监控可以没隔一段时间获取一下 count_start 数量, 使用stats_mysql_query_digest_rest 会把stats_mysql_query_digest 清空



 

 

 select * from stats_mysql_commands_counters;

命令统计测试

 

 

获取QPS, 
1. t1时间 select sum(count_start) from  stats_mysql_commands_counters
2. sleep(5)
3. t2 时间 select sum(count_start) from  stats_mysql_commands_counters
4. qps= (t2-t1)/5

 

统计有多少连接

 select * from stats_mysql_connection_pool;

 

 

 显示主库、从库所有的 processlit

 select * from stats_mysql_processlist;

 

 

 

proxysql  monitor 库:

+--------------------------------------+
| tables                               |
+--------------------------------------+
| mysql_server_aws_aurora_check_status |
| mysql_server_aws_aurora_failovers    |
| mysql_server_aws_aurora_log          |
| mysql_server_connect_log             |
| mysql_server_galera_log              |
| mysql_server_group_replication_log   |
| mysql_server_ping_log                |
| mysql_server_read_only_log           |
| mysql_server_replication_lag_log     |
+--------------------------------------+

 

检查ping的,加入到proxysql 看看

 

 

 

 

 

 

https://blog.csdn.net/n88Lpo/article/details/93252968

posted @ 2020-03-21 21:24  fengjian1585  阅读(205)  评论(0编辑  收藏  举报