1

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

所有以 insert、update、delete、alter 开头的查询都应该路由到主机组 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_pattern 替换 match_digest 吗?

但是,我的应用程序有 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) 也匹配应用程序功能中的插入查询?这是否意味着我做错了?

4

0 回答 0