MySQL Group Replication+ProxySQL进行读写分离测试

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: MySQL Group Replication+ProxySQL进行读写分离测试

目前主流的中间件有很多,比如Mycat、altas、dbproxy、oneproxy。但是都有不少的问题。我司产品
采用的是基于ProxySQL的模式;因此这里我对proxysql进行一次简单测试。如下是简单安装配置和测试过程,供参考:

1. 增加基于proxysql的yum源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/7
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
EOF

2. yum安装proxysql

yum clean all
yum makecache
yum install proxysql

3. proxysql安装配置完成后默认配置文件在/etc/proxysql.cnf

4. 安装完毕后可用通过如下方式来验证proxysql安装是否ok

[root@mysqldb ~]# mysql -uadmin -padmin -h127.0.0.1 -P6032
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 148
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

关于默认的用户和密码信息,以及端口等内容,均可直接查看/etc/proxysql.cnf配置文件.

5. 创建相关监控和测试账户

mysql> CREATE USER 'mgrtest'@'%' IDENTIFIED BY 'mgrtest';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT USAGE ON *.* TO 'mgrtest'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'proxysql';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON *.* TO 'proxysql'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

6.配置db列表(10为write节点,20表示备写,30是read节点,40表示offline)

--配置db列表
insert into mysql_group_replication_hostgroups(writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup,active) values(10,20,30,40,1);
insert into mysql_users(username,password,default_hostgroup) values('mgrtest','mgrtest',10);
insert into mysql_servers(hostgroup_id,hostname,port,comment) values(10,'172.16.29.133',3306,'write');
insert into mysql_servers(hostgroup_id,hostname,port,comment) values(30,'172.16.29.154',3306,'read');
insert into mysql_servers(hostgroup_id,hostname,port,comment) values(30,'172.16.29.132',3306,'read');
--定义读写分离规则
insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',10,1);
insert into mysq_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',30,1);

7. 将持久化到配置文件中,并load到内存

save mysql users to disk;
save mysql servers to disk;
save mysql query rules to disk;
save mysql variables to disk;
save admin variables to disk;
load mysql users to runtime;
load mysql servers to runtime;
load mysql query rules to runtime;
load mysql variables to runtime;
load admin variables to runtime;

操作完毕后,我们看看此时的情况:

mysql> show tables;
+--------------------------------------------+
| tables                                     |
+--------------------------------------------+
| global_variables                           |
| mysql_collations                           |
| mysql_group_replication_hostgroups         |
| mysql_query_rules                          |
| mysql_query_rules_fast_routing             |
| mysql_replication_hostgroups               |
| mysql_servers                              |
| mysql_users                                |
| proxysql_servers                           |
| runtime_checksums_values                   |
| runtime_global_variables                   |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules                  |
| runtime_mysql_query_rules_fast_routing     |
| runtime_mysql_replication_hostgroups       |
| runtime_mysql_servers                      |
| runtime_mysql_users                        |
| runtime_proxysql_servers                   |
| runtime_scheduler                          |
| scheduler                                  |
+--------------------------------------------+
20 rows in set (0.00 sec)
mysql> select * from mysql_servers;
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname      | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 10           | 172.16.29.133 | 3306 | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              | write   |
| 30           | 172.16.29.132 | 3306 | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              | read    |
| 30           | 172.16.29.154 | 3306 | ONLINE | 1      | 0           | 1000            | 0                   | 0       | 0              | read    |
+--------------+---------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
3 rows in set (0.00 sec)

mysql> select * from mysql_users;
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| mgrtest  | mgrtest  | 1      | 0       | 10                | NULL           | 0             | 1                      | 0            | 1       | 1        | 10000           |
+----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
1 row in set (0.00 sec)

7. 下面通过sysbench来压测对比一下,看看加了一层ProxySQL,是否有较大的性能影响

---直接压测mgr节点
[root@killdb lua]# /tmp/sysbench-1.0/src/sysbench oltp_read_write.lua --mysql-host=172.16.29.133 --mysql-port=3306 --mysql-db=enmotech --mysql-user=mgrtest --mysql-password=mgrtest --table_size=100000 --tables=10 --threads=16 --report-interval=10 --time=300 run
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 16 tps: 78.92 qps: 1597.84 (r/w/o: 1122.14/267.72/207.98) lat (ms,95%): 344.08 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 16 tps: 93.08 qps: 1866.38 (r/w/o: 1304.80/317.47/244.11) lat (ms,95%): 272.27 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 16 tps: 73.40 qps: 1466.48 (r/w/o: 1026.99/245.80/193.70) lat (ms,95%): 337.94 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 16 tps: 74.19 qps: 1483.40 (r/w/o: 1038.63/249.18/195.59) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 16 tps: 89.50 qps: 1790.19 (r/w/o: 1252.99/300.70/236.50) lat (ms,95%): 262.64 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 16 tps: 87.86 qps: 1758.66 (r/w/o: 1231.78/296.77/230.10) lat (ms,95%): 272.27 err/s: 0.10 reconn/s: 0.00
[ 70s ] thds: 16 tps: 93.24 qps: 1867.17 (r/w/o: 1307.61/315.15/244.41) lat (ms,95%): 248.83 err/s: 0.10 reconn/s: 0.00
[ 80s ] thds: 16 tps: 85.70 qps: 1717.27 (r/w/o: 1201.68/293.79/221.80) lat (ms,95%): 287.38 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 16 tps: 74.40 qps: 1484.32 (r/w/o: 1039.81/251.20/193.30) lat (ms,95%): 363.18 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 16 tps: 84.90 qps: 1701.14 (r/w/o: 1190.46/291.89/218.79) lat (ms,95%): 297.92 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 16 tps: 78.79 qps: 1571.22 (r/w/o: 1099.88/263.77/207.58) lat (ms,95%): 369.77 err/s: 0.20 reconn/s: 0.00
[ 120s ] thds: 16 tps: 73.31 qps: 1472.83 (r/w/o: 1032.06/251.84/188.93) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 16 tps: 84.99 qps: 1694.76 (r/w/o: 1184.30/290.68/219.78) lat (ms,95%): 314.45 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 16 tps: 60.30 qps: 1209.36 (r/w/o: 846.94/205.91/156.51) lat (ms,95%): 411.96 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 16 tps: 45.90 qps: 916.91 (r/w/o: 642.50/155.50/118.90) lat (ms,95%): 694.45 err/s: 0.00 reconn/s: 0.00
[ 160s ] thds: 16 tps: 44.08 qps: 884.08 (r/w/o: 619.81/151.33/112.95) lat (ms,95%): 682.06 err/s: 0.00 reconn/s: 0.00
[ 170s ] thds: 16 tps: 54.62 qps: 1087.71 (r/w/o: 760.08/187.27/140.35) lat (ms,95%): 502.20 err/s: 0.00 reconn/s: 0.00
[ 180s ] thds: 16 tps: 66.81 qps: 1333.72 (r/w/o: 934.29/225.82/173.62) lat (ms,95%): 390.30 err/s: 0.00 reconn/s: 0.00
[ 190s ] thds: 16 tps: 82.30 qps: 1648.87 (r/w/o: 1152.88/278.89/217.10) lat (ms,95%): 320.17 err/s: 0.00 reconn/s: 0.00
[ 200s ] thds: 16 tps: 87.21 qps: 1745.26 (r/w/o: 1223.21/293.83/228.22) lat (ms,95%): 297.92 err/s: 0.00 reconn/s: 0.00
[ 210s ] thds: 16 tps: 72.70 qps: 1451.01 (r/w/o: 1015.03/248.38/187.59) lat (ms,95%): 363.18 err/s: 0.00 reconn/s: 0.00
[ 220s ] thds: 16 tps: 84.80 qps: 1703.82 (r/w/o: 1192.31/293.70/217.80) lat (ms,95%): 320.17 err/s: 0.10 reconn/s: 0.00
[ 230s ] thds: 16 tps: 99.50 qps: 1988.24 (r/w/o: 1393.03/338.01/257.20) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00
[ 240s ] thds: 16 tps: 100.30 qps: 2008.11 (r/w/o: 1405.64/344.78/257.69) lat (ms,95%): 244.38 err/s: 0.00 reconn/s: 0.00
[ 250s ] thds: 16 tps: 68.48 qps: 1370.72 (r/w/o: 959.76/232.82/178.14) lat (ms,95%): 419.45 err/s: 0.00 reconn/s: 0.00
[ 260s ] thds: 16 tps: 71.73 qps: 1435.21 (r/w/o: 1003.26/244.09/187.87) lat (ms,95%): 434.83 err/s: 0.00 reconn/s: 0.00
[ 270s ] thds: 16 tps: 36.50 qps: 722.52 (r/w/o: 507.02/120.40/95.10) lat (ms,95%): 1170.65 err/s: 0.00 reconn/s: 0.00
[ 280s ] thds: 16 tps: 32.70 qps: 664.41 (r/w/o: 463.21/114.70/86.50) lat (ms,95%): 1032.01 err/s: 0.00 reconn/s: 0.00
[ 290s ] thds: 16 tps: 31.02 qps: 607.81 (r/w/o: 425.69/102.43/79.69) lat (ms,95%): 1069.86 err/s: 0.00 reconn/s: 0.00
 [ 300s ] thds: 16 tps: 34.48 qps: 690.58 (r/w/o: 485.08/116.08/89.42) lat (ms,95%): 960.30 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            300692
        write:                           72949
        other:                           55898
        total:                           429539
    transactions:                        21473  (71.51 per sec.)
    queries:                             429539 (1430.53 per sec.)
    ignored errors:                      5      (0.02 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.2648s
    total number of events:              21473

Latency (ms):
         min:                                   39.42
         avg:                                  223.67
         max:                                 2681.44
         95th percentile:                      434.83
         sum:                              4802945.03

Threads fairness:
    events (avg/stddev):           1342.0625/12.91
    execution time (avg/stddev):   300.1841/0.02
 
[root@killdb lua]# /tmp/sysbench-1.0/src/sysbench oltp_read_only.lua --mysql-host=172.16.29.132 --mysql-port=3306 --mysql-db=enmotech --mysql-user=mgrtest --mysql-password=mgrtest --table_size=100000 --tables=10 --threads=24 --report-interval=10 --time=300 run
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 24
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 24 tps: 194.17 qps: 3127.56 (r/w/o: 2736.83/0.00/390.73) lat (ms,95%): 183.21 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 24 tps: 152.11 qps: 2436.76 (r/w/o: 2132.64/0.00/304.12) lat (ms,95%): 287.38 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 24 tps: 117.59 qps: 1878.14 (r/w/o: 1642.86/0.00/235.28) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 24 tps: 152.21 qps: 2436.21 (r/w/o: 2131.80/0.00/304.41) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 24 tps: 174.00 qps: 2783.67 (r/w/o: 2435.68/0.00/348.00) lat (ms,95%): 253.35 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 24 tps: 192.99 qps: 3089.32 (r/w/o: 2703.43/0.00/385.89) lat (ms,95%): 179.94 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 24 tps: 191.30 qps: 3064.60 (r/w/o: 2682.00/0.00/382.60) lat (ms,95%): 176.73 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 24 tps: 169.86 qps: 2715.87 (r/w/o: 2376.15/0.00/339.72) lat (ms,95%): 248.83 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 24 tps: 199.45 qps: 3194.13 (r/w/o: 2795.14/0.00/398.99) lat (ms,95%): 167.44 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 24 tps: 157.90 qps: 2516.83 (r/w/o: 2201.43/0.00/315.40) lat (ms,95%): 267.41 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 24 tps: 145.00 qps: 2322.74 (r/w/o: 2032.53/0.00/290.20) lat (ms,95%): 282.25 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 24 tps: 191.08 qps: 3062.64 (r/w/o: 2680.27/0.00/382.37) lat (ms,95%): 215.44 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 24 tps: 213.12 qps: 3410.62 (r/w/o: 2984.48/0.00/426.14) lat (ms,95%): 158.63 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 24 tps: 169.61 qps: 2713.64 (r/w/o: 2374.32/0.00/339.32) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 24 tps: 172.20 qps: 2750.04 (r/w/o: 2405.65/0.00/344.39) lat (ms,95%): 219.36 err/s: 0.00 reconn/s: 0.00
[ 160s ] thds: 24 tps: 180.98 qps: 2897.95 (r/w/o: 2536.00/0.00/361.96) lat (ms,95%): 200.47 err/s: 0.00 reconn/s: 0.00
[ 170s ] thds: 24 tps: 167.32 qps: 2672.77 (r/w/o: 2338.32/0.00/334.45) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00
[ 180s ] thds: 24 tps: 151.90 qps: 2436.71 (r/w/o: 2132.71/0.00/304.00) lat (ms,95%): 272.27 err/s: 0.00 reconn/s: 0.00
[ 190s ] thds: 24 tps: 151.17 qps: 2417.87 (r/w/o: 2115.53/0.00/302.33) lat (ms,95%): 292.60 err/s: 0.00 reconn/s: 0.00
[ 200s ] thds: 24 tps: 197.03 qps: 3150.61 (r/w/o: 2756.65/0.00/393.96) lat (ms,95%): 170.48 err/s: 0.00 reconn/s: 0.00
[ 210s ] thds: 24 tps: 201.65 qps: 3228.66 (r/w/o: 2825.35/0.00/403.31) lat (ms,95%): 155.80 err/s: 0.00 reconn/s: 0.00
[ 220s ] thds: 24 tps: 185.41 qps: 2962.30 (r/w/o: 2591.58/0.00/370.73) lat (ms,95%): 183.21 err/s: 0.00 reconn/s: 0.00
[ 230s ] thds: 24 tps: 118.12 qps: 1896.89 (r/w/o: 1660.44/0.00/236.45) lat (ms,95%): 484.44 err/s: 0.00 reconn/s: 0.00
[ 240s ] thds: 24 tps: 100.69 qps: 1604.12 (r/w/o: 1402.73/0.00/201.39) lat (ms,95%): 530.08 err/s: 0.00 reconn/s: 0.00
[ 250s ] thds: 24 tps: 151.52 qps: 2427.09 (r/w/o: 2124.14/0.00/302.95) lat (ms,95%): 244.38 err/s: 0.00 reconn/s: 0.00
[ 260s ] thds: 24 tps: 150.97 qps: 2414.70 (r/w/o: 2112.66/0.00/302.04) lat (ms,95%): 292.60 err/s: 0.00 reconn/s: 0.00
[ 270s ] thds: 24 tps: 139.71 qps: 2235.71 (r/w/o: 1956.28/0.00/279.43) lat (ms,95%): 303.33 err/s: 0.00 reconn/s: 0.00
[ 280s ] thds: 24 tps: 151.16 qps: 2421.21 (r/w/o: 2118.88/0.00/302.33) lat (ms,95%): 308.84 err/s: 0.00 reconn/s: 0.00
[ 290s ] thds: 24 tps: 143.44 qps: 2294.27 (r/w/o: 2007.50/0.00/286.77) lat (ms,95%): 344.08 err/s: 0.00 reconn/s: 0.00
 [ 300s ] thds: 24 tps: 183.30 qps: 2933.48 (r/w/o: 2566.98/0.00/366.50) lat (ms,95%): 200.47 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            695716
        write:                           0
        other:                           99388
        total:                           795104
    transactions:                        49694  (165.59 per sec.)
    queries:                             795104 (2649.48 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0963s
    total number of events:              49694

Latency (ms):
         min:                                   51.73
         avg:                                  144.90
         max:                                 2482.04
         95th percentile:                      253.35
         sum:                              7200898.71

Threads fairness:
    events (avg/stddev):           2070.5833/21.72
    execution time (avg/stddev):   300.0374/0.02

--通过proxysql的压测

[root@mysqldb lua]# /tmp/sysbench-1.0/src/sysbench oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=6033 --mysql-db=enmotech --mysql-user=mgrtest --mysql-password=mgrtest --table_size=100000 --tables=10 --threads=16 --report-interval=10 --time=300 run
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 16 tps: 66.66 qps: 1354.18 (r/w/o: 949.38/215.47/189.34) lat (ms,95%): 450.77 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 16 tps: 69.73 qps: 1397.35 (r/w/o: 978.66/223.99/194.70) lat (ms,95%): 450.77 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 16 tps: 83.32 qps: 1665.71 (r/w/o: 1166.22/270.75/228.74) lat (ms,95%): 325.98 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 16 tps: 89.10 qps: 1775.48 (r/w/o: 1242.88/288.10/244.50) lat (ms,95%): 287.38 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 16 tps: 83.91 qps: 1675.61 (r/w/o: 1172.68/272.92/230.02) lat (ms,95%): 325.98 err/s: 0.10 reconn/s: 0.00
[ 60s ] thds: 16 tps: 82.60 qps: 1656.01 (r/w/o: 1159.81/269.50/226.70) lat (ms,95%): 320.17 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 16 tps: 79.19 qps: 1581.47 (r/w/o: 1106.51/259.28/215.68) lat (ms,95%): 337.94 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 16 tps: 71.09 qps: 1417.53 (r/w/o: 991.38/230.77/195.38) lat (ms,95%): 383.33 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 16 tps: 74.70 qps: 1501.47 (r/w/o: 1051.15/247.01/203.31) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 16 tps: 78.60 qps: 1576.47 (r/w/o: 1104.68/256.60/215.20) lat (ms,95%): 331.91 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 16 tps: 88.11 qps: 1754.93 (r/w/o: 1228.36/289.34/237.23) lat (ms,95%): 292.60 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 16 tps: 54.00 qps: 1084.46 (r/w/o: 759.17/178.29/146.99) lat (ms,95%): 539.71 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 16 tps: 51.00 qps: 1016.78 (r/w/o: 711.36/168.41/137.01) lat (ms,95%): 580.02 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 16 tps: 58.87 qps: 1184.77 (r/w/o: 831.13/199.21/154.43) lat (ms,95%): 520.62 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 16 tps: 56.11 qps: 1117.77 (r/w/o: 781.99/185.94/149.84) lat (ms,95%): 511.33 err/s: 0.00 reconn/s: 0.00
[ 160s ] thds: 16 tps: 46.31 qps: 924.82 (r/w/o: 646.48/154.72/123.62) lat (ms,95%): 733.00 err/s: 0.00 reconn/s: 0.00
[ 170s ] thds: 16 tps: 65.51 qps: 1316.85 (r/w/o: 922.00/218.32/176.52) lat (ms,95%): 475.79 err/s: 0.20 reconn/s: 0.00
[ 180s ] thds: 16 tps: 79.50 qps: 1581.13 (r/w/o: 1105.45/265.19/210.49) lat (ms,95%): 356.70 err/s: 0.00 reconn/s: 0.00
[ 190s ] thds: 16 tps: 81.89 qps: 1639.93 (r/w/o: 1148.71/274.35/216.86) lat (ms,95%): 314.45 err/s: 0.00 reconn/s: 0.00
[ 200s ] thds: 16 tps: 64.81 qps: 1300.92 (r/w/o: 911.28/218.62/171.02) lat (ms,95%): 427.07 err/s: 0.00 reconn/s: 0.00
[ 210s ] thds: 16 tps: 68.98 qps: 1377.46 (r/w/o: 964.76/232.54/180.16) lat (ms,95%): 450.77 err/s: 0.00 reconn/s: 0.00
[ 220s ] thds: 16 tps: 76.12 qps: 1518.19 (r/w/o: 1062.04/253.38/202.77) lat (ms,95%): 369.77 err/s: 0.00 reconn/s: 0.00
[ 230s ] thds: 16 tps: 73.80 qps: 1475.21 (r/w/o: 1031.64/245.98/197.59) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 240s ] thds: 16 tps: 56.80 qps: 1141.05 (r/w/o: 799.83/191.01/150.21) lat (ms,95%): 484.44 err/s: 0.00 reconn/s: 0.00
[ 250s ] thds: 16 tps: 78.87 qps: 1577.07 (r/w/o: 1104.63/266.51/205.93) lat (ms,95%): 344.08 err/s: 0.00 reconn/s: 0.00
[ 260s ] thds: 16 tps: 77.33 qps: 1542.87 (r/w/o: 1078.10/263.80/200.97) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 270s ] thds: 16 tps: 77.40 qps: 1545.25 (r/w/o: 1081.76/258.99/204.49) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
[ 280s ] thds: 16 tps: 86.40 qps: 1736.59 (r/w/o: 1216.86/290.51/229.21) lat (ms,95%): 303.33 err/s: 0.00 reconn/s: 0.00
[ 290s ] thds: 16 tps: 79.16 qps: 1582.19 (r/w/o: 1108.40/264.28/209.51) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00
 [ 300s ] thds: 16 tps: 84.93 qps: 1702.25 (r/w/o: 1191.49/285.19/225.57) lat (ms,95%): 314.45 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            306138
        write:                           72434
        other:                           58760
        total:                           437332
    transactions:                        21864  (72.84 per sec.)
    queries:                             437332 (1456.97 per sec.)
    ignored errors:                      3      (0.01 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.1637s
    total number of events:              21864

Latency (ms):
         min:                                   35.02
         avg:                                  219.60
         max:                                 1455.33
         95th percentile:                      411.96
         sum:                              4801349.57

Threads fairness:
    events (avg/stddev):           1366.5000/69.06
    execution time (avg/stddev):   300.0843/0.04

[root@mysqldb lua]# /tmp/sysbench-1.0/src/sysbench oltp_read_only.lua --mysql-host=127.0.0.1 --mysql-port=6033 --mysql-db=enmotech --mysql-user=mgrtest --mysql-password=mgrtest --table_size=100000 --tables=10 --threads=16 --report-interval=10 --time=300 run
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 10s ] thds: 16 tps: 114.57 qps: 1846.86 (r/w/o: 1616.12/0.00/230.73) lat (ms,95%): 253.35 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 16 tps: 129.71 qps: 2072.79 (r/w/o: 1813.38/0.00/259.41) lat (ms,95%): 219.36 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 16 tps: 147.20 qps: 2354.86 (r/w/o: 2060.47/0.00/294.40) lat (ms,95%): 207.82 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 16 tps: 153.66 qps: 2462.13 (r/w/o: 2154.92/0.00/307.22) lat (ms,95%): 183.21 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 16 tps: 149.27 qps: 2385.42 (r/w/o: 2086.88/0.00/298.54) lat (ms,95%): 189.93 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 16 tps: 114.04 qps: 1827.69 (r/w/o: 1599.61/0.00/228.07) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 16 tps: 119.22 qps: 1904.07 (r/w/o: 1665.54/0.00/238.53) lat (ms,95%): 257.95 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 16 tps: 111.07 qps: 1776.87 (r/w/o: 1554.73/0.00/222.15) lat (ms,95%): 282.25 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 16 tps: 118.86 qps: 1901.43 (r/w/o: 1663.80/0.00/237.63) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 16 tps: 139.95 qps: 2240.74 (r/w/o: 1960.85/0.00/279.89) lat (ms,95%): 211.60 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 16 tps: 163.23 qps: 2611.96 (r/w/o: 2285.39/0.00/326.57) lat (ms,95%): 170.48 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 16 tps: 163.30 qps: 2614.77 (r/w/o: 2288.17/0.00/326.60) lat (ms,95%): 167.44 err/s: 0.00 reconn/s: 0.00
[ 130s ] thds: 16 tps: 158.62 qps: 2538.53 (r/w/o: 2221.29/0.00/317.24) lat (ms,95%): 173.58 err/s: 0.00 reconn/s: 0.00
[ 140s ] thds: 16 tps: 168.98 qps: 2703.10 (r/w/o: 2365.14/0.00/337.96) lat (ms,95%): 164.45 err/s: 0.00 reconn/s: 0.00
[ 150s ] thds: 16 tps: 164.60 qps: 2634.11 (r/w/o: 2305.01/0.00/329.10) lat (ms,95%): 167.44 err/s: 0.00 reconn/s: 0.00
[ 160s ] thds: 16 tps: 164.70 qps: 2633.55 (r/w/o: 2304.15/0.00/329.41) lat (ms,95%): 173.58 err/s: 0.00 reconn/s: 0.00
[ 170s ] thds: 16 tps: 156.39 qps: 2503.92 (r/w/o: 2191.03/0.00/312.89) lat (ms,95%): 183.21 err/s: 0.00 reconn/s: 0.00
[ 180s ] thds: 16 tps: 165.39 qps: 2644.56 (r/w/o: 2313.87/0.00/330.68) lat (ms,95%): 167.44 err/s: 0.00 reconn/s: 0.00
[ 190s ] thds: 16 tps: 142.21 qps: 2278.81 (r/w/o: 1994.30/0.00/284.51) lat (ms,95%): 196.89 err/s: 0.00 reconn/s: 0.00
[ 200s ] thds: 16 tps: 159.00 qps: 2539.67 (r/w/o: 2221.66/0.00/318.01) lat (ms,95%): 183.21 err/s: 0.00 reconn/s: 0.00
[ 210s ] thds: 16 tps: 122.90 qps: 1965.56 (r/w/o: 1720.06/0.00/245.51) lat (ms,95%): 282.25 err/s: 0.00 reconn/s: 0.00
[ 220s ] thds: 16 tps: 138.89 qps: 2223.72 (r/w/o: 1945.64/0.00/278.08) lat (ms,95%): 227.40 err/s: 0.00 reconn/s: 0.00
[ 230s ] thds: 16 tps: 112.16 qps: 1792.44 (r/w/o: 1568.12/0.00/224.32) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00
[ 240s ] thds: 16 tps: 121.93 qps: 1952.77 (r/w/o: 1709.01/0.00/243.76) lat (ms,95%): 244.38 err/s: 0.00 reconn/s: 0.00
[ 250s ] thds: 16 tps: 124.41 qps: 1993.00 (r/w/o: 1744.28/0.00/248.73) lat (ms,95%): 240.02 err/s: 0.00 reconn/s: 0.00
[ 260s ] thds: 16 tps: 130.11 qps: 2079.93 (r/w/o: 1819.51/0.00/260.42) lat (ms,95%): 231.53 err/s: 0.00 reconn/s: 0.00
[ 270s ] thds: 16 tps: 141.71 qps: 2264.80 (r/w/o: 1981.39/0.00/283.41) lat (ms,95%): 204.11 err/s: 0.00 reconn/s: 0.00
[ 280s ] thds: 16 tps: 137.89 qps: 2208.05 (r/w/o: 1932.47/0.00/275.58) lat (ms,95%): 207.82 err/s: 0.00 reconn/s: 0.00
[ 290s ] thds: 16 tps: 117.09 qps: 1872.65 (r/w/o: 1638.27/0.00/234.38) lat (ms,95%): 257.95 err/s: 0.00 reconn/s: 0.00
 [ 300s ] thds: 16 tps: 118.11 qps: 1891.39 (r/w/o: 1655.27/0.00/236.12) lat (ms,95%): 253.35 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            583898
        write:                           0
        other:                           83414
        total:                           667312
    transactions:                        41707  (138.98 per sec.)
    queries:                             667312 (2223.75 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0822s
    total number of events:              41707

Latency (ms):
         min:                                   21.34
         avg:                                  115.09
         max:                                  772.68
         95th percentile:                      219.36
         sum:                              4800223.99

Threads fairness:
    events (avg/stddev):           2606.6875/679.58
    execution time (avg/stddev):   300.0140/0.02

可以看上去,proxysql的效果还不错,损耗是比较低的。在压测过程中发现我这个虚拟机(只有1个cpu)
的cpu基本上要被耗尽,其中proxysql消耗了近80%的cpu。

CPU Utilisation ---------------------------------------------------------------------------------
|---------------------------+-------------------------------------------------+                   
|CPU  User%  Sys% Wait% Idle|0          |25         |50          |75       100|                   
|  1  35.7  59.1   0.0   5.3|UUUUUUUUUUUUUUUUUsssssssssssssssssssssssssssss >>|                   
|---------------------------+-------------------------------------------------+                   
| Kernel Stats -----------------------------------------------------------------------------------
| RunQueue              7   Load Average    CPU use since boot time                               
| ContextSwitch    7048.8    1 mins  2.89    Uptime Days= 24 Hours=14 Mins=59                     
| Forks               0.0    5 mins  1.55    Idle   Days= 24 Hours= 1 Mins=16                     
| Interrupts       4913.1   15 mins  1.08    Average CPU use=  2.32%                              
| Network I/O ------------------------------------------------------------------------------------
|I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak->Recv Trans                     
|virbr0-nic     0.0     0.0       0.0      0.0     0.0    0.0        0.0     0.0                  
|  virbr0     0.0     0.0       0.0      0.0     0.0    0.0        0.0     0.0                    
|   ens33  5928.3   464.9    7613.0   5965.5   797.4   79.8    159409.7 12942.7   .7              
|      lo  5728.4  5728.4    5634.2   5634.2  1041.1 1041.1    154408.8 154408.8   8.8            
|-------------------------------------------------------------------------------------------------

  PerfTop:     770 irqs/sec  kernel:76.8%  exact:  0.0% [1000Hz cpu-clock],  (target_pid: 117862)
--------------------------------------------------------------------------------------------------

    45.37%  [kernel]            [k] e1000_xmit_frame                                              
     3.52%  [kernel]            [k] _raw_spin_unlock_irqrestore                                   
     3.34%  [kernel]            [k] finish_task_switch                                            
     1.70%  [kernel]            [k] __fget                                                        
     1.47%  [kernel]            [k] e1000_clean                                                   
     1.45%  proxysql            [.] _ZN12MySQL_Thread3runEv                                       
     1.25%  libc-2.17.so        [.] __memcpy_ssse3_back                                           
     1.22%  [kernel]            [k] sock_poll

主要在消耗在e1000_xmit_frame 调用上,这是Linux os调用网卡的操作函数,这也跟前面nmon的监控比较符合;ContextSwitch 是很高的。

由此可见,对于mgr+proxysql的架构;Proxysql 所在节点的机器配置也不能过低,否则还是会有所影响的。

那么能否通过proxysql来让应用对mgr节点的切换无感知呢?当节点切换后,自动连接mgr,无需修改配置。

首先在mgr节点执行相关脚本,创建响应的函数来实现这个功能,这里我直接使用了老外的脚本。链接地址:https://github.com/lefred/mysql_gr_routing_check/blob/master/addition_to_sys.sql

mysql> source add_to_sys.sql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

 

–配置scheduler

这里网直接使用了网友的脚本 https://github.com/ZzzCrazyPig/proxysql_groupreplication_checker/gr_sw_mode_checker.sh

将脚本放在目录/var/lib/proxysql/即可;然后在scheduler中插入记录。

[root@mysqldb proxysql]# mysql -uadmin -padmin -h127.0.0.1 -P6032                
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 203
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> insert into scheduler(id, active, interval_ms, filename, arg1, arg2, arg3, arg4)
    ->   values(1, 1, 3000, '/var/lib/proxysql/mgr_node_check.sh', 10, 30, 1, '/var/lib/proxysql/check.log');
Query OK, 1 row affected (0.01 sec)

mysql> save scheduler to disk;
Query OK, 0 rows affected (0.01 sec)

mysql> load scheduler to runtime;
Query OK, 0 rows affected (0.00 sec)

—我们来看下目前节点的情况

[root@killdb lua]# dig @172.16.29.160 -p 8600 w-mgr-test-enmotech.service.consul

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.0.2.el6_4.6 <<>> @172.16.29.160 -p 8600 w-mgr-test-enmotech.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18343
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;w-mgr-test-enmotech.service.consul. IN A

;; ANSWER SECTION:
w-mgr-test-enmotech.service.consul. 0 IN A      172.16.29.132

;; ADDITIONAL SECTION:
w-mgr-test-enmotech.service.consul. 0 IN TXT    "consul-network-segment="

;; Query time: 4 msec
;; SERVER: 172.16.29.160#8600(172.16.29.160)
;; WHEN: Mon Oct  9 05:56:36 2017
;; MSG SIZE  rcvd: 104

目前132是写节点,我们现在将132节点停掉.

mysql> stop group_replication;

Query OK, 0 rows affected (9.17 sec)

mysql> 
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)

再次解析域名看看write节点是否转移。

[root@killdb lua]# dig @172.16.29.160 -p 8600 w-mgr-test-enmotech.service.consul

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.0.2.el6_4.6 <<>> @172.16.29.160 -p 8600 w-mgr-test-enmotech.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13738
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;w-mgr-test-enmotech.service.consul. IN A

;; ANSWER SECTION:
w-mgr-test-enmotech.service.consul. 0 IN A      172.16.29.133

;; ADDITIONAL SECTION:
w-mgr-test-enmotech.service.consul. 0 IN TXT    "consul-network-segment="

;; Query time: 3 msec
;; SERVER: 172.16.29.160#8600(172.16.29.160)
;; WHEN: Mon Oct  9 06:08:21 2017
;; MSG SIZE  rcvd: 104

可以看到write节点转移到了133. 检查此时proxysql的配置,其实并没有改变:

mysql> select * from runtime_mysql_servers;
+--------------+---------------+------+---------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname      | port | status  | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+---------------+------+---------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 10           | 172.16.29.133 | 3306 | ONLINE  | 1      | 0           | 1000            | 0                   | 0       | 0              | read    |
| 40           | 172.16.29.132 | 3306 | SHUNNED | 1      | 0           | 1000            | 0                   | 0       | 0              | write   |
| 30           | 172.16.29.154 | 3306 | ONLINE  | 1      | 0           | 1000            | 0                   | 0       | 0              | read    |
+--------------+---------------+------+---------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
3 rows in set (0.00 sec)

仍然显示132是write节点,133,154是read 节点。

这里其实不影响,此时check脚本运行正常。如下是日志:

[root@mysqldb proxysql]# tail -10f check.log                          
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.

下面来测试一下,是否仍然可以进行正常的操作:

[root@mysqldb proxysql]#  mysql -umgrtest -pmgrtest -h127.0.0.1 -P6033  
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4198
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create table test99(a int);
Query OK, 0 rows affected (0.01 sec)
mysql> alter table test99 add primary key(a);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into test99 values(1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test99;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.01 sec)

mysql> truncate table test99;
Query OK, 0 rows affected (0.01 sec)

可见此时对于应用来说几乎是无感知的。祝大家玩得开心!

此条目发表在 MySQL 分类目录。将固定链接加入收藏夹。

评论功能已关闭。