ProxySQL集群
实验环境信息 MySQL主从信息
IP 1 | 角色 |
---|---|
188.188.0.68 | Node1 |
188.188.0.69 | Node2 |
188.188.0.70 | Node3 |
ProxySQL服务节点
IP 1 | 角色 |
---|---|
188.188.0.68 | 节点68 |
188.188.0.71 | 节点71 |
ProxySQL版本: 2.0.3-29-g00f26d5
一、ProxySQL服务安装
在多个服务器上安装相同版本的ProxySQL服务;并在各个节点启动服务。 安装方式参考官网或<01_ProxySQL安装.txt>
二、设置集群内节点信息
!!!在各节点分别执行以下操作!!!
1)登录ProxySQL点 登录各个节点,设置通一的用户名、密码:
mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt 'Admin> '
2)设置服务器信息
Admin> SELECT * FROM proxysql_servers;
Empty set (0.00 sec)
Admin> INSERT INTO proxysql_servers(hostname,port,weight,comment) VALUES ('188.188.0.68',6032,1,'节点68'),('188.188.0.71',6032,1,'节点71');
Query OK, 2 rows affected (0.00 sec)
Admin> SELECT * FROM proxysql_servers;
+--------------+------+--------+----------+
| hostname | port | weight | comment |
+--------------+------+--------+----------+
| 188.188.0.68 | 6032 | 1 | 节点68 |
| 188.188.0.71 | 6032 | 1 | 节点71 |
+--------------+------+--------+----------+
2 rows in set (0.00 sec)
3)配置生效
Admin> LOAD PROXYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
Admin> SELECT * FROM runtime_proxysql_servers;
+--------------+------+--------+----------+
| hostname | port | weight | comment |
+--------------+------+--------+----------+
| 188.188.0.71 | 6032 | 1 | 节点71 |
| 188.188.0.68 | 6032 | 1 | 节点68 |
+--------------+------+--------+----------+
2 rows in set (0.00 sec)
三、设置集群节点间数据同步用户
!!!在各节点分别执行以下操作!!!
1)查看原始值
Admin> SHOW VARIABLES LIKE 'admin-cluster_username';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| admin-cluster_username | |
+------------------------+-------+
1 row in set (0.00 sec)
Admin> SHOW VARIABLES LIKE 'admin-cluster_password';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| admin-cluster_password | |
+------------------------+-------+
1 row in set (0.00 sec)
Admin> SHOW VARIABLES LIKE 'admin_admin_credentials';
+-------------------------+-------------+
| Variable_name | Value |
+-------------------------+-------------+
| admin-admin_credentials | admin:admin |
+-------------------------+-------------+
1 row in set (0.00 sec)
注意,对同步使用的username/password也应该出现在admin-admin_credentials中,否则连接将失败。
2)指定特定值
Admin> SET admin-cluster_username = 'cluser';
Query OK, 1 row affected (0.00 sec)
Admin> SET admin-cluster_password = '654987';
Query OK, 1 row affected (0.00 sec)
Admin> UPDATE global_variables SET variable_value='admin:admin;cluser:654987' WHERE variable_name='admin-admin_credentials';
Query OK, 1 row affected (0.01 sec)
注意:不同用户间用分号(;)分隔。账号不需要提前建立,直接用就好。
3)查看结果
Admin> SHOW VARIABLES LIKE 'admin-cluster_username';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| admin-cluster_username | cluser |
+------------------------+--------+
1 row in set (0.00 sec)
Admin> SHOW VARIABLES LIKE 'admin-cluster_password';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| admin-cluster_password | 654987 |
+------------------------+--------+
1 row in set (0.00 sec)
Admin> SHOW VARIABLES LIKE 'admin_admin_credentials' ;
+-------------------------+---------------------------+
| Variable_name | Value |
+-------------------------+---------------------------+
| admin-admin_credentials | admin:admin;cluser:654987 |
+-------------------------+---------------------------+
1 row in set (0.00 sec)
4)使配置生效
Admin> LOAD ADMIN VARIABLES TO RUNTIME ;
Query OK, 0 rows affected (0.00 sec)
四、在各节点查看集群状态
!!!在各节点分别执行以下操作!!!
1)查看ProxySQL集群节点校验和
Admin> SELECT * FROM stats.stats_proxysql_servers_checksums ;
+--------------+------+-------------------+---------+------------+--------------------+------------+------------+------------+
| hostname | port | name | version | epoch | checksum | changed_at | updated_at | diff_check |
+--------------+------+-------------------+---------+------------+--------------------+------------+------------+------------+
| 188.188.0.71 | 6032 | admin_variables | 0 | 0 | | 0 | 1558360976 | 0 |
| 188.188.0.71 | 6032 | mysql_query_rules | 9 | 1558251408 | 0x0000000000000000 | 1558360877 | 1558360976 | 0 |
| 188.188.0.71 | 6032 | mysql_servers | 671 | 1558360886 | 0xA98C8BA3A59F15B6 | 1558360877 | 1558360976 | 100 |
| 188.188.0.71 | 6032 | mysql_users | 8 | 1558251284 | 0xFE7A30305853A000 | 1558360877 | 1558360976 | 0 |
| 188.188.0.71 | 6032 | mysql_variables | 0 | 0 | | 0 | 1558360976 | 0 |
| 188.188.0.71 | 6032 | proxysql_servers | 2 | 1558359750 | 0x93A30F7C7F6EE496 | 1558360877 | 1558360976 | 0 |
| 188.188.0.68 | 6032 | admin_variables | 0 | 0 | | 0 | 1558360975 | 0 |
| 188.188.0.68 | 6032 | mysql_query_rules | 1 | 1558357984 | 0x0000000000000000 | 1558359728 | 1558360975 | 0 |
| 188.188.0.68 | 6032 | mysql_servers | 3 | 1558360886 | 0x624AF2D0247C16D3 | 1558360880 | 1558360975 | 0 |
| 188.188.0.68 | 6032 | mysql_users | 2 | 1558360880 | 0xFE7A30305853A000 | 1558360880 | 1558360975 | 0 |
| 188.188.0.68 | 6032 | mysql_variables | 0 | 0 | | 0 | 1558360975 | 0 |
| 188.188.0.68 | 6032 | proxysql_servers | 2 | 1558359728 | 0x93A30F7C7F6EE496 | 1558359728 | 1558360975 | 0 |
+--------------+------+-------------------+---------+------------+--------------------+------------+------------+------------+
12 rows in set (0.00 sec)
注意: A)如果该表中的记录都为0,那么很有可能是同步失败了。需要去查看错误日志来判断具体问题。 B)对于admin_variables和mysql_variables的参数配置是不会同步的,这需要手动的在各个节点上分别设置;
2)查看ProxySQL集群节点间全局状态信息同步状况
Admin> SELECT * FROM stats.stats_proxysql_servers_metrics ;
+--------------+------+--------+----------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| hostname | port | weight | comment | response_time_ms | Uptime_s | last_check_ms | Queries | Client_Connections_connected | Client_Connections_created |
+--------------+------+--------+----------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| 188.188.0.71 | 6032 | 1 | 节点71 | 3 | 641614 | 4021 | 172 | 0 | 87 |
| 188.188.0.68 | 6032 | 1 | 节点68 | 3 | 3023 | 2442 | 0 | 0 | 0 |
+--------------+------+--------+----------+------------------+----------+---------------+---------+------------------------------+----------------------------+
2 rows in set (0.00 sec)
到这里,基础的集群设置已经完毕,再次基础上可以对集群进行参数优化;以及加入后端MySQL服务器进行使用!!!
- 》》》》压测篇《《《《
一、后端为MGR多主模式
可以对MGR多主压测,但要注意: 由于ProxySQL监控主从状态是靠在后端MySQL上建立一个sys.gr_member_routing_candidate_status的状态视图,而对该视图的查询实际上是对多个系统表查询结果的汇总。因此,在MySQL繁忙时访问该视图会导致监控程序获取信息超时而失败,继而误判主机状态而修改runtime_mysql_servers的状态,导致连接后端MGR线程断开。所以,压测时最好将该视图用一个同名表代替,并在里面写死服务器状态,这样就不会在监控程序访问时获取内容超时异常,也就不会杀死后端连接线程。
对Proxy SQL压测时,如果后端使用了MGR多主模式,则压测可以参考以下思路: 由于MGR在对大事务支持和事务冲突检测上的限制和不足,导致对MGR直接并行压测是不可能的。Oracle官方的Multi-Primary Mode测试是在每个结点上,对不同的测试库进行压测,即这样可以避免了工具无法并行压测的问题,同时,这样也减少了冲突的可能性。切记,Multi-Primary Mode一定要避免热点数据冲突的场景。
例如MGR集群中有3个节点,分别为A、B、C;那么,压测时需要建立至少3个库;这样每个tpcc压测都使用1个线程来测试一个库,并且同时启动多个tpcc来测试。 可以这样测试: A节点:
./tpcc_start -h188.188.0.68 -P3306 -uroot -p '123456' -d tpcc1 -w 5 -c 1 -r 10 -l 30 -i 10 -f tpcc_mysql.log -t tpcc_mysql.rtx
.....
B节点:
./tpcc_start -h188.188.0.69 -P3306 -uroot -p '123456' -d tpcc2 -w 5 -c 1 -r 10 -l 30 -i 10 -f tpcc_mysql.log -t tpcc_mysql.rtx
.....
C节点:
./tpcc_start -h188.188.0.70 -P3306 -uroot -p '123456' -d tpcc3 -w 5 -c 1 -r 10 -l 30 -i 10 -f tpcc_mysql.log -t tpcc_mysql.rtx
.....
不过对Multi-Primary Mode压测并不会有一个很好的结果,因为热点太过集中,会导致提交失败很多,或许反而会导致了性能的下降。
如果用sysbench压测,也是一样的思路,只能使用多库+单线程+多测试终端运行的方式。
二、后端为MGR单主模式
可以直接用多线程压测PROXYSQL,就像压测普通MySQL一样。但要注意:后端MySQL上建立的sys.gr_member_routing_candidate_status视图,参考上面多主压测说明内容。
~ ~ 完毕!