Proxysql-请帮助我阐明“规则链”功能

时间:2019-02-14 04:11:57

标签: proxysql

我是proxysql的新手,这是我的环境: Centos 7的proxysql-1.4.13。我定义了2个主机组ID:主机组ID 2用于可写的mysql服务器,主机组ID 3用于可读取的mysql服务器。

所有以插入,更新,删除,更改开头的查询都应路由到主机组ID 2。

所有以select开头的查询都应路由到主机组ID 3。 所以这是我的规则:

Admin> select rule_id,active,digest,match_digest,destination_hostgroup,flagIN,flagOUT,next_query_flagIN,sticky_conn,apply from mysql_query_rules;
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+
| rule_id | active | digest             | match_digest | destination_hostgroup | flagIN | flagOUT | next_query_flagIN | sticky_conn | apply |
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+
| 101     | 1      | NULL               | ^insert      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 102     | 1      | NULL               | ^update      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 103     | 1      | NULL               | ^delete      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 104     | 1      | NULL               | ^alter       | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 105     | 1      | NULL               | ^select      | 3                     | 0      | NULL    | NULL              | NULL        | 1     |
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+

它们工作正常。顺便说一句,这些规则还可以吗?我应该将match_digest替换为match_pattern吗?

但是,我的应用程序具有1个功能,可以将数据插入表中(创建预订),然后(几乎立即)从该表中选择新数据。 因此,如果选择查询失败(因为尚未将新数据复制到主机组ID 3),则应用程序功能将运行错误。

我想在插入查询之后立即将选择查询路由到主机组ID 2,以便它将成功获取新数据。

我阅读了proxysql文档https://github.com/sysown/proxysql/wiki/Main-(runtime)#mysql_query_rules和此讨论https://github.com/sysown/proxysql/pull/825,我认为这对我来说是解决方案,不是吗?我仍然不十分了解这些flagIN,flagOUT,next_query_flagIN,sticky_conn东西,但我会尝试一下。

我知道插入查询摘要为0xCDD6DB677604AFA7

选择查询摘要为0x0DCD2E8ADF6A66CB 然后添加2条新规则:

Admin> select rule_id,active,digest,match_digest,destination_hostgroup,flagIN,flagOUT,next_query_flagIN,sticky_conn,apply from mysql_query_rules;
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+
| rule_id | active | digest             | match_digest | destination_hostgroup | flagIN | flagOUT | next_query_flagIN | sticky_conn | apply |
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+
| 1       | 1      | 0xCDD6DB677604AFA7 | NULL         | 2                     | 0      | NULL    | 1                 | 1           | 1     |
| 2       | 1      | 0x0DCD2E8ADF6A66CB | NULL         | 2                     | 1      | NULL    | NULL              | NULL        | 1     |
| 101     | 1      | NULL               | ^insert      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 102     | 1      | NULL               | ^update      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 103     | 1      | NULL               | ^delete      | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 104     | 1      | NULL               | ^alter       | 2                     | 0      | NULL    | NULL              | NULL        | 1     |
| 105     | 1      | NULL               | ^select      | 3                     | 0      | NULL    | NULL              | NULL        | 1     |
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+

它们工作正常,插入查询后的选择查询将路由到主机组ID 2,因此它成功获取新数据并且应用程序功能正常运行。

但是我做对了吗? 我很困惑,因为stats_mysql_query_rules结果: 在运行应用程序功能之前:

Admin> select * from stats_mysql_query_rules;
+---------+------+
| rule_id | hits |
+---------+------+
| 1       | 20   |
| 2       | 20   |
| 101     | 33   |
| 102     | 0    |
| 103     | 2    |
| 104     | 0    |
| 105     | 903  |
+---------+------+

运行应用程序功能后(10个预订):

Admin> select * from stats_mysql_query_rules;
+---------+------+
| rule_id | hits |
+---------+------+
| 1       | 30   |
| 2       | 30   |
| 101     | 43   |
| 102     | 0    |
| 103     | 2    |
| 104     | 0    |
| 105     | 1313 |
+---------+------+

为什么rule_id 101的命中率从33-> 43增加?那么rule_id 101(match_digest ^ insert)是否也匹配应用程序功能中的插入查询?这是否表示我做错了?

0 个答案:

没有答案