Распределение mysql-соединений с помощью ldirectord
Я использую ldirectord с heartbeat для балансировки нагрузки mysql. Он распределяет mysql-соединения в равной степени по всем серверам, доступным в пуле, но иногда ведомое устройство остается в пуле даже после возникновения ошибки Too many connections. Должна быть какая-то опция для подсчета количества запущенных запросов на ведомом устройстве, прежде чем отправлять больше подключений к нему.
Кто-нибудь, кто использует ldirectord для mysql и хотел бы поделиться тем же опытом с предлагаемыми решениями для этой заминки?
Благодарю.
2 ответа
С этих страниц:
http://www.ultramonkey.org/3/topologies/ha-lb-eg.html
http://www.ultramonkey.org/3/topologies/config/lb/non-fwmark/linux-director/ldirectord.cf
Похоже, что вы хотите сделать, это настроить URL-адрес, к которому у вас есть доступ на каждом внутреннем хосте (что-то вроде крошечного CGI с thttpd сделает свое дело), который тестирует демон на коробке и сообщает что-то, что не соответствует получить строку. Когда это происходит, ldirectord извлекает узел из пула.
Пример конфигурации:
request="test-mysql.cgi"
receive="MYSQL OK"
Если вы используете алгоритм балансировки нагрузки с наименьшим количеством соединений, IPVS отправит новое соединение на сервер с наименьшим количеством активных соединений, что будет означать, что вы получите ошибку "слишком много соединений" только тогда, когда все серверы заполнены, В настоящее время в IPVS (или ldirectord) нет механизмов, определяющих ограничение на количество одновременных подключений, которые бэкэнд будет принимать, прежде чем он больше не сможет обрабатывать; на самом деле это не будет слишком сложно реализовать, но вопрос в том, что вы делаете с соединениями, когда вы переполнены? RST попытка подключения? Что бы вы ни делали, клиенту придется обрабатывать ошибку, и "слишком много соединений" в MySQL-протоколе проще, на мой взгляд, легче диагностировать, что "Соединение отказано", потому что есть гораздо больше и различные причины последней ошибки, чем первая.
Если бы это был мой кластер, я бы переключился на балансировку с наименьшим количеством подключений и добавил бы гораздо больше мониторинга рабочей нагрузки; Если вы выходите за пределы пределов и не знали, что заранее приближаетесь к ним, у вас сразу же возникает ошибка мониторинга.