Добрый день! Имеется конфигурация, к которой 1 сервер мантикоры в качестве прокси (все запросы от клиентов поступают на него) и несколько серверов в качестве агентов, на которые прокси распределяет эти запросы. Версия 6.3.6.
К примеру индекс на прокси выглядит как то так:
index distributed
{
type = distributed
ha_strategy = nodeads
}
index my_super_index:distributed
{
agent = 10.129.0.1:9312|10.129.0.2:9312|10.129.0.3:9312|10.129.0.4:9312|10.129.0.5:9312:my_super_index
}
На прокси 4 ядра и 4 Gb памяти, конфиг (оставил значимые настройки)
searchd
{
listen = 9306:mysql
net_workers = 6
threads = 5
agent_connect_timeout = 100
agent_query_timeout = 10000
agent_retry_count = 5
agent_retry_delay = 0
ha_period_karma = 60
ha_ping_interval = 1000
network_timeout = 5
client_timeout = 300
sphinxql_timeout = 86400
}
На прокси команда выдает такие результаты:
mysql> show status like 'work%';
+---------------------+-------+
| Counter | Value |
+---------------------+-------+
| workers_total | 5 |
| workers_active | 52 |
| workers_clients | 52 |
| workers_clients_vip | 0 |
| work_queue_length | 54 |
+---------------------+-------+
Не смогли найти в документации подробное описание работы manticore в режиме прокси. В нашем представлении работает так:
Директива threads задает число потоков для обработки запросов (workers_total). net_worker при получении запроса либо передает его на исполнение в обработку (если потоки обработки свободны) либо ставит в очередь (work_queue). Далее workers выбирает одно из зеркал и отправляет на него запрос и ждет ответ. Т.о. одновременно могут обрабатываться максимум 5 запросов, остальные ждут в очереди.
Процессор на агентах нагружен скачкообразно, то 20% то 70%. Сейчас у нас проблема в том, что время ответа от прокси временами вырастает вплоть до 2 секунд, в то время как обычно такие запросы укладываются в 40-50 мс, пытаемся установить причины такого поведения (то ли запросы проводит много времени в очереди, то ли застревают при agent_retry, т.к. периодически мы перезапускаем агенты по очереди для обновления дисковых индексов, то ли по иной причине).
Вопросы:
- Что значят показатели workers_active, workers_clients, work_queue_length? Вроде выходит что всего воркеров 5, из них активны 52, что странно. work_queue_length всегда на 2-3 единицы больше чем workers_active и никогда не бывает пустая.
- Совпадает ли наше представление о работе с реальностью?
- Следует ли на прокси поднять threads до скажем 500, т.к. обработчики фактически лишь переправляют запрос на агенты и ждут ответ (не нагружены)
- Есть ли какие то иные идеи, куда можно копать?