ProxySQL(读写分离)部署

Posted 南宫葬月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ProxySQL(读写分离)部署相关的知识,希望对你有一定的参考价值。

proxySQL是mysql的中间件产品,是灵活强大的代理层,实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载配置,故障切换和一些SQL

过滤功能

 

环境:

192.168.139.152  proxy SQL中间件   server-id=1

192.168.139.153  master mysql         server-id=2

192.168.139.154 slave mysql            server-id=3

 

 

proxy SQL更多信息可以访问 https://github.com/sysown/proxysql/wiki

 

MYSQL安装(all node)

要点:所有节点都安装MySQL并修改/etc/my.cnf 中的server-id

 更新root密码123qweASD!

修改配置文件/etc/my.cnf

[mysqld]

server-id=1   

mysql主从部署(master-slave)

从节点read_only=on

PROXYSQL安装(proxysql node)

安装依赖包:

yum install -y perl-DBD-MySQL  perl-DBI  perl-Time-HiRes perl-IO-Socket-SSL 

创建repo文件

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


安装proxy SQL
yum install -y proxysql

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

启动proxy SQL
service proxysql start

查看proxysql版本:
proxy SQL--version

proxy SQL 默认用户名/密码 admin/admin

proxysql 管理端口6032 对外服务端口6033
登陆proxysql :
mysql -u admin -padmin -h 127.0.0.1 -P 6032
MySQL>show databases; 显示5个数据库 main disk stats monitor stats_history
main 内存配置数据库,即MEMORY ,表里存放后端db实例,用户验证,路由规则等信息
  主要表:mysql_servers 后端可以连接MySQL服务器的列表
      mysql_users 配置后端数据库的账户和监控账户
     mysql_query_rules 指定Query路由到后端不同服务器的规则列表
注:runtime 开头的表,表示当前运行的配置,不可修改;其余表修改后,LOAD使其生效,SAVE使其存到硬盘以供下次重启加载


master 节点创建proxy SQL监控账户:
create user \'monitor\'@\'192.168.139.%\' identified by \'123qweASD!\';
grant all privileges on *.* to \'monitor\'@\'192.168.139.%\' with grant option;

master节点创建对外访问账户:
mysql> create user \'zs\'@\'192.168.139.%\' identified by \'123qweASD!\';
mysql> grant all privileges on *.* to \'zs\'@\'192.168.139.%\' with grant option;

proxy SQL节点:添加主服务器列表 将主从MySQL加进去,自己不加
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,\'192.168.139.153\',3306);
mysql>insert into mysql_servers(hostgroup_id,hostname,port) values(10,\'192.168.139.154\',3306);
mysql>load mysql servers to runtime;
mysql>save mysql servers to disk;

   机器的状态都是online状态

proxysql配置监控账号
mysql> set mysql-monitor_username=\'monitor\';
mysql> set mysql-monitor_password=\'123qweASD!\'; ===》 /etc/proxysql.cnf 中的monitor_password也要修改

配置proxy SQL主从分组
mysql> insert into  mysql_replication_hostgroups values(10,20,\'proxy\');
mysql> load mysql servers to runtime;
mysql> save mysql servers to disk;

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

mysql> insert into mysql_users(username,password,default_hostgroup) values(\'zs\',\'123qweASD!\',10);
mysql> update mysql_users set transaction_persistent=1 where username=\'zs\';
mysql> load mysql users to runtime;
mysql> save mysql users to disk;

验证登陆服务器就:
是主库

 

读写分离策略配置

mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,\'^SELECT.*FOR UPDATE$\',10,1); ===》写
mysql> insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,\'^SELECT\',20,1); ===》读
mysql> load mysql query rules to runtime;
mysql> save mysql query rules to disk;

读写分离测试:

mysql -u zs -p123qweASD! -h 192.168.139.152 -P 6033 登陆proxysql所在机器登陆数据库
mysql> select * from mysql.user; 读操作
mysql> create database zhangyu ; 写操作

登陆proxysql管理账户

10 是写库组 20是读库组

 

    调整权重,让某个机器承受更多读操作

mysql> update mysql_servers set weight=10 where hostname=\'192.168.139.154\';

mysql> load mysql servers to runtime;

mysql> save mysql servers to disk;

 



以上是关于ProxySQL(读写分离)部署的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中间件proxysql实现MySQL读写分离

mysql中间件proxysql实现mysql读写分离

MHA+ProxySQL实现读写分离高可用

ProxySQL实现读写分离

proxysql安装配置和读写分离初识

MHA+ProxySQL 读写分离高可用