что означает hostgroup_id объяснение для proxysql

Вопрос или проблема

На: https://proxysql.com/documentation/ProxySQL-Configuration/
Инструкции по proxy sql гласят:

ПРИМЕЧАНИЕ: Серверы MySQL в качестве бэкенда имеют read_only = 1, настроенный на всех репликах. ProxySQL рассматривает бэкенд-инстансы с read_only = 0 как WRITER-инстансы, поэтому это следует устанавливать только на ваших основных серверах MySQL (или всех основных серверах в случае многоосновной репликации). Убедитесь, что это правильно настроено, выполните set global read_only = 1 и настройте это в файле my.cnf, так как ProxySQL будет принимать решения о маршрутизации на основе этого значения.

Означает ли это, что если я выполню:

INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (0,'mariadb1.cn.lan',3306); 

мой сервер mariadb1.cn.lan будет доступен для чтения/записи?
Что означает
set global read_only = 1

Ответ или решение

ProxySQL — это мощный инструмент, предназначенный для улучшения масштабируемости и надежности MySQL-баз данных. Одной из его ключевых функций является динамическое распределение нагрузки между несколькими серверами базы данных. В этой связи важным понятием в ProxySQL является hostgroup_id, который играет ключевую роль в распределении трафика между различными серверами. Давайте подробно рассмотрим, что означает hostgroup_id и как он используется в контексте ProxySQL, а также разберёмся с понятием read_only в MySQL.

Теория

Hostgroup и hostgroup_id в ProxySQL

  • В ProxySQL hostgroup_id используется для группировки серверов, которые могут выполнять определенные роли. Это идентификатор группы серверов, который является основным при распределении запросов.

  • По умолчанию, различные группы серверов (hostgroups) могут быть настроены для выполнения операций только на чтение, только на запись или обеих функций. Hostgroup с hostgroup_id=0 обычно настраивается для первичных серверов (WRITER), куда направляются команды на запись.

Чтение и запись в MySQL

  • В контексте MySQL понятие read_only относится к возможности сервера выполнять операции записи.
  • SET GLOBAL read_only = 1 делает базу доступной только для чтения. Это обычно используется для реплик (чаще для серверов Slave), чтобы предотвратить нежелательные изменения данных.

Пример

В вашем примере:

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0, 'mariadb1.cn.lan', 3306);

этот запрос добавляет сервер mariadb1.cn.lan в группу серверов с идентификатором hostgroup_id=0. Если ProxySQL настроен по умолчанию, это означает, что hostgroup_id=0 предназначен для WRITER-серверов. Таким образом, если read_only на этом сервере отключен (read_only=0), ProxySQL будет считать его доступным для операций записи.

Применение

Если ваш сервер mariadb1.cn.lan настроен с read_only=0, ProxySQL будет маршрутизировать запросы на запись к этому серверу, исходя из логики балансировки нагрузки. Это имеет критическую важность в системах, где необходимо гарантировать, что только определенные серверы могут принимать запросы на запись.

В случае неправильной конфигурации, как если бы вы оставили read_only=0 на всех серверных узлах, вы бы могли столкнуться с непредсказуемым поведением, особенно в средах с несколькими допускающими запись серверами. Правильно относясь к конфигурированию переменной read_only, вы обеспечиваете, что нагрузка распределяется согласно проектным решениям, минимизируя риск конфликтов записи.

Выводы

Правильная конфигурация hostgroup_id и управление read_only важны для обеспечения надёжной и отказоустойчивой работы сервера. Используя hostgroup_id, вы можете точно определить, какой сервер будет получать конкретные типы запросов. Это способствует более целенаправленному распределению нагрузок и повышению устойчивости базы данных.

ProxySQL предоставляет сложные механизмы управления и предоставляет вашему проекту гибкость в конфигурации, позволяя одновременно увеличивать производительность и надежность базы данных. Однако правильная настройка и понимание его работы необходимы для полной реализации всех его возможностей.

Оцените материал
Добавить комментарий

Капча загружается...