proxysql

proxysql软件包的下载地址:

Github下载地址: https://github.com/sysown/proxysql/releases

proxysql网站的下载地址:https://proxysql.com/documentation/installing-proxysql/

 

可以yum直接安装

配置文件路径/etc/proxysql.cnf

 启动proxysql的服务

service proxysql start 

注:6032是proxysql的管理端口号,6033是对外服务的端口号

用户名和密码都是默认的admin

关闭proxysql:

service   proxysql   stop

管理员的登录命令:

/usr/local/mysql/bin/mysql   -uadmin -padmin -h  127.0.0.1  -P  6032

可见有四个库:main 、disk 、stats 和monitor。分别说明一下这四个库的作用。

  main:内存配置数据库,即MEMORY,表里存放后端db实例、用户验证、路由规则等信息。main库中有如下信息:

 

   库下的主要表:

  mysql_servers ——后端可以连接mysql服务器的列表。

  mysql_users——配置后端数据库的账号和监控的账号。

  mysql_query_rules——指定query路由到后端不同服务器的规则列表。

  注:表名以runtime_开头的表示proxysql当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以runtime开头的表,然后“LOAD”使其生效,“SAVE”使其存到硬盘以供下次重启加载。

  disk库:持久化磁盘的配置。

  stats库:统计信息的汇总。

  monitor库:一些监控的收集信息,包括数据库的健康状态等。

 

配置PROXYSQL监控

首先在master()上创建proxysql的监控账户和对外访问账户并赋予权限。

给全权限。

 

proxysql有一套很完整的配置系统,方便DBA对线上的操作。整套配置系统分为三层,顶层为RUNTIME,中间层为MEMORY,底层也就是持久层为DISK和CONFIG FILE。

 

 

RUNTIME:代表proxysql当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层“load”进来。

MEMORY:MEMORY层上面连接RUNTIME层,下面连接持久化层。在这层可以正常操作proxysql配置,随便修改,不会影响生产环境。修改一个配置一般都是先在MEMORY层完成的,确认正常之后再加载到RUNTIME和持久化到磁盘上。

DISK和CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所以需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

然后用超管用户登录proxysql来添加主从服务器列表。

insert into mysql_servers (hostgroup_id,hostname,port)   values (10,'192.168.2.100',3306);

insert into mysql_servers (hostgroup_id,hostname,port)  values  (10,'192.168.2.101',3306);

insert into mysql_servers (hostgroup_id,hostname,port)  values  (10,'192.168.2.102',3306);

load mysql servers to runtime;

save mysql servers to disk;

  登录proxysql之后,凡是进行任何操作,都需要运行load ** to runtime,从memory加载到runtime,再执行save ** to disk 持久化到磁盘。

加载完成之后,三台机器都是online 状态。

  接下来继续为proxysql配置监控账号,命令如下:

  set mysql-monitor_username='monitor';

  set mysql-monitor_password='monitor';

  load mysql variables to runtime;

  save mysql variables to disk;

 

 

 

 

  配置proxysql主从分组信息


这里会用到一张表mysql_replication_hostgroups;

里面的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;

proxysql 会根据server的read_only的取值将服务器进行分组。read_only=0的server,master被分到编号为10的写组,read_only=1的server,slave则被分到编号为20的读组。

配置对外访问账号,默认指定主库,并对该用户开启事务持久化保护。

注:mysql_users表中的transaction_persistent字段默认为0,建议在创建完用户之后设置为1,避免发生脏读、幻读等现象,命令如下:

insert into mysql_users(username,password,default_hostgroup) values ('wcf','wcf',10);

update mysql_users set transaction_persistent=1  where username='zs';

load mysql users to runtime;

save mysql users to disk;

注:对外访问的端口号需要指定为6033.

 

配置读写分离策略

  配置读写分离策略需要使用mysql_query_rules表。表中的match_pattern字段就是代表设置的规则,destination_hostgroup字段代表默认指定的分组,apply代表真正执行应用规则。

  把所有以select开头的语句全部分配到编号为20的读组中。select for update会产生一个写锁,对数据查询的时效性要求高,把它分配到编号为10的写组中,其他所有操作都会默认路由到写组中。

  命令如下:

  insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values (1,'^select.*for update$',10,1);

  insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values (1,'^select',20,1);

  load mysql query rules to runtime;

  save mysql query rules to disk;

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  

 

posted @ 2020-10-20 23:47  wongchaofan  阅读(464)  评论(0编辑  收藏  举报