Перейти к основному содержимому

Балансировка нагрузки

При развертывании нескольких узлов FE пользователи могут развернуть слой балансировки нагрузки поверх FE для достижения высокой доступности.

Ниже приведены некоторые варианты обеспечения высокой доступности:

Подход на уровне кода

Один из способов — реализовать код на уровне приложения для выполнения повторных попыток и балансировки нагрузки. Например, если соединение разорвано, оно автоматически повторит попытку на других соединениях. Этот подход требует от пользователей настройки адресов нескольких узлов FE.

JDBC Connector

JDBC connector поддерживает автоматические повторные попытки:

jdbc:mysql:loadbalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]][?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

ProxySQL

ProxySQL — это прокси-слой MySQL, который поддерживает разделение чтения/записи, маршрутизацию запросов, кэширование SQL, динамическую конфигурацию нагрузки, отказоустойчивость и фильтрацию SQL.

Selena FE отвечает за получение запросов на подключение и запросы, и он горизонтально масштабируется и обладает высокой доступностью. Однако FE требует от пользователей настройки прокси-слоя поверх него для достижения автоматической балансировки нагрузки. Смотрите следующие шаги для настройки:

1. Установите необходимые зависимости

yum install -y gnutls perl-DBD-MySQL perl-DBI perl-devel

2. Загрузите установочный пакет

wget https://github.com/sysown/proxysql/releases/download/v2.0.14/proxysql-2.0.14-1-centos7.x86_64.rpm

3. Распакуйте в текущий каталог

rpm2cpio proxysql-2.0.14-1-centos7.x86_64.rpm | cpio -ivdm

4. Измените файл конфигурации

vim ./etc/proxysql.cnf 

Укажите каталог, к которому у пользователя есть права доступа (абсолютный путь):

datadir="/var/lib/proxysql"
errorlog="/var/lib/proxysql/proxysql.log"

5. Запустите

./usr/bin/proxysql -c ./etc/proxysql.cnf --no-monitor

6. Войдите в систему

mysql -u admin -padmin -h 127.0.0.1 -P6032

7. Настройте глобальный журнал

SET mysql-eventslog_filename='proxysql_queries.log';
SET mysql-eventslog_default_log=1;
SET mysql-eventslog_format=2;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

8. Вставьте Leader FE узел

insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.xx.xx.139', 9030);

9. Вставьте Observer FE узлы

insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.xx.xx.139', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.xx.xx.140', 9030);

10. Загрузите конфигурацию

load mysql servers to runtime;
save mysql servers to disk;

11. Настройте имя пользователя и пароль

insert into mysql_users(username, password, active, default_hostgroup, backend, frontend) values('root', '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29', 1, 1, 1, 1);

12. Загрузите конфигурацию

load mysql users to runtime; 
save mysql users to disk;

13. Запишите правила прокси

insert into mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, mirror_hostgroup, apply) values(1, 1, '.', 1, 2, 1);

14. Загрузите конфигурацию

load mysql query rules to runtime; 
save mysql query rules to disk;