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