Назад | Перейти на главную страницу

MySQL-Proxy не балансирует нагрузку

Это моя текущая тестовая установка:

Балансировщики нагрузки подключаются друг к другу с помощью пульса, и оба они запускают MySQL-Proxy.

Все работает как шарм; один из SQL-серверов умирает, все остается. Один из LB умирает, все остается.

Однако при проверке того, какой сервер SQL используется, я заметил, что он всегда один и тот же, если только тот не становится недоступным.

Например, через пару часов SQL1 имеет 600 000 запросов, тогда как SQL0, скажем, 20 000.

Есть ли способ сбалансировать его больше, чтобы приблизиться к ~ 50% SQL0 и ~ 50% SQL1?

Это моя основная строка, с которой я запускаю прокси:

/usr/bin/mysql-proxy --proxy-skip-profiling -b 0.sql.domain.com:3306 -b 1.sql.domain.com:3306 --keepalive -P :3306

В качестве доказательства здесь тестовый запуск каждые 10 минут со вчерашнего дня.

Прокси-сервер MySQL основан на подключении. Вы упомянули запросы в своем вопросе, чтобы использовать это в качестве примера, если у вас есть одно поле, которое открывает одно соединение и выполняет 100000 запросов по нему, все они будут отправляться на один и тот же внутренний сервер. Вы можете убедиться в этом, посмотрев исходный код:

mysql-proxy-0.8.2/src/network-conn-pool.c:
182         GQueue *conns = network_connection_pool_get_conns(pool, username, NULL);
183 
184         /**
185          * if we know this use, return a authed connection
186          */
187         if (conns) {
188                 entry = g_queue_pop_head(conns);

Он просто захватывает следующее соединение из пула. Если вы посмотрите на количество TCP-соединений для ODBC, которое вы используете, они должны составить 50/50.

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