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视图,参考上面多主压测说明内容。
~
~
完毕!