Перейти к основному содержимому
Версия: 1.5.x

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

При развертывании нескольких узлов 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/v1.5.2/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;