基于1主1从 搭建ProxySQL

  • 基于1主1从 搭建ProxySQL
      • 1、环境
      • 2、 数据库设置
      • 3、 安装ProxySQL
      • 4、 创建分组
      • 5、 配置服务:数据库映射到分组
      • 6、 配置业务账号
      • 7、 配置监控账号
      • 8、测试ProxySQL到数据库的连通性
      • 9、 配置读写分离
      • 10、 sysbench 上流量测试
      • 11、 查看分流效果

1、环境

角色 ip port db user passwod
Master 172.16.215.201 3306 db01 xp a
Slave 172.16.215.202 3306 db01 xp a
Slave 172.16.215.203 3306 db01 xp a
ProxySQL sysbench 172.16.215.200 3306 db01 xp a

2、 数据库设置

  • 准备业务账号
    create user 'xp'@'%' identified with mysql_native_password by 'a';
    grant all on . to 'xp'@'%';

  • 监控账号
    create user 'monitor'@'%' identified with mysql_native_password by 'monitor';
    grant replication client on . to 'monitor'@'%';

  • 设置从库只读
    set global read_only=1;


以下操作步骤在ProxySQL服务器执行


3、 安装ProxySQL

  • 下载
    https://proxysql.com/documentation/main-runtime/#mysql_servers

  • 安装
    yum localinstall proxysql2-2.0.10-1.1.el7.x86_64.rpm -y

  • 起动
    systemctl start proxysql

  • 登录
    mysql -h127.0.0.1 -uadmin -padmin -P6032


4、 创建分组

insert into mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment)values(100,101,'myHG');

查看:
select * from mysql_replication_hostgroups;


15881472107780.jpg


5、 配置服务:数据库映射到分组

insert into mysql_servers(hostgroup_id,hostname,port,max_connections)values(10,'172.16.215.201',3306,200);
insert into mysql_servers(hostgroup_id,hostname,port,max_connections)values(101,'172.16.215.202',3306,200);
insert into mysql_servers(hostgroup_id,hostname,port,max_connections)values(101,'172.16.215.203',3306,200);

load mysql servers to run;
save mysql servers to disk;

查看:
select * from mysql_servers;


15881472735977.jpg


6、 配置业务账号

insert into mysql_users(username,password,default_hostgroup,default_schema,max_connections) values('xp','a',100,'db01',1000);

load mysql users to run;
save mysql users to disk;

查看:
select * from mysql_users;


15881473095013.jpg


7、 配置监控账号

set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor';

load mysql variables to run;
save mysql variables to disk;

查看:
select * from global_variables;


15881475337619.jpg


8、测试ProxySQL到数据库的连通性

select * from mysql_server_ping_log;


15881475608553.jpg


9、 配置读写分离

  • 关写节点的read:(重启服务生效)
    set mysql-monitor_writer_is_also_reader='false';
    load mysql variables to run;
    save mysql variables to disk;

  • 读写策略一:读一个组,写一个组:
    INSERT INTO mysql_query_rules (rule_id,active,match_pattern,destination_hostgroup,apply)
    VALUES
    (1,1,'SELECT.*FOR UPDATE$',100,1),
    (2,1,'SELECT',101,1);

    LOAD MYSQL QUERY RULES TO RUNTIME;
    SAVE MYSQL QUERY RULES TO DISK;

    查看:
    select * from mysql_query_rules\G

  • 读写策略二:某些重点语句一个组
    清空环境:
    DELETE FROM mysql_query_rules;
    LOAD MYSQL QUERY RULES TO RUNTIME;
    SAVE MYSQL QUERY RULES TO DISK;

    INSERT INTO mysql_query_rules (rule_id,active,digest,destination_hostgroup,apply)
    VALUES
    (1,1,'0xAC80A5EA0101522E',101,1),
    (2,1,'0xC19480748AE79B4B',101,1);

    LOAD MYSQL QUERY RULES TO RUNTIME;
    SAVE MYSQL QUERY RULES TO DISK;

    查看:
    select * from mysql_query_rules\G

10、 sysbench 上流量测试

1、 编写压测脚本

  • 配置参数:
    vim env.sh
#!/bin/bash

DBIP='172.16.215.200'
DBPORT=6033
DBUSER='xp'
DBPASSWD='a'
NOW=`date +'%Y%m%d%H%M'`
DBNAME='db01'
REPORT_INTERVAL=1
TBLCNT=2
WARMUP=300
ROWS=1000000
thread=1
T=1000
events=2000000

  • 准备压测数据:
    vim prepare.sh
#!/bin/bash

source ./env.sh
sysbench /usr/local/share/sysbench/oltp_write_only.lua \
--table-size=$ROWS \
--tables=$TBLCNT \
--mysql-port=$DBPORT \
--threads=${thread} \
--db-driver=mysql \
--mysql-db=$DBNAME \
--mysql-host=$DBIP \
--mysql-user=$DBUSER \
--mysql-password=$DBPASSWD prepare

  • 运行脚本:
    vim run.sh
#!/bin/bash

source ./env.sh
sysbench /usr/local/share/sysbench/oltp_read_write.lua \
  --events=${events} \
  --mysql-host=$DBIP \
  --mysql-port=$DBPORT \
  --mysql-user=$DBUSER \
  --mysql-password=$DBPASSWD \
  --mysql-db=$DBNAME \
  --tables=$TBLCNT \
  --table-size=$ROWS \
  --report-interval=$REPORT_INTERVAL \
  --threads=${thread} \
  --db-ps-mode=disable \
  --skip_trx=1 \
  --time=${T} \
  --auto_inc=0 run

2、 授权、执行脚本
chmod +x env.sh prepare.sh vim run.sh
./prepare.sh
./run.sh

11、 查看分流效果

select hostgroup,digest_text,digest,first_seen,last_seen,count_star from stats_mysql_query_digest;


15881480272645.jpg

你可能感兴趣的:(基于1主1从 搭建ProxySQL)