Proxysql - Пожалуйста, помогите мне прояснить функцию "цепочки правил" - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок с proxysql, это моя среда: Centos 7, proxysql-1.4.13.Я определяю 2 идентификатора группы хостов: идентификатор группы хостов 2 для сервера mysql, который может писать, идентификатор группы хостов 3 для сервера mysql, который может читать.

Все запросы, начинающиеся со вставки, обновления, удаления, изменения, должны маршрутизироваться.к идентификатору группы хостов 2.

Все запросы, начинающиеся с select, должны быть направлены на идентификатор группы хостов 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 функция, которая позволяет вставлять данные в таблицу (создавать резервирование), а затем выбирать (почти сразу) новые данные из этой таблицы.Поэтому, если запрос на выборку завершится неудачно (поскольку новые данные еще не реплицированы на идентификатор группы хостов 3), функция приложения будет работать неправильно.

Я хочу направить запрос на выборку сразу после запроса вставки на идентификатор группы хостов 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     |
+---------+--------+--------------------+--------------+-----------------------+--------+---------+-------------------+-------------+-------+

Они работают нормально, запрос на выборку сразу после запроса вставки направляется к идентификатору группы хостов 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) также соответствует запросу вставки в функции приложения?Значит ли это, что я делаю не так?

...