Неравномерное распределение нагрузки upstream hash consistent

Алексей alexcool на gmail.com
Вс Фев 14 08:46:04 UTC 2021


Здравствуйте.

Создал балансировщик на 10 кэширующих серверов.
Использовал consistent hash по $request_uri

upstream cacheserver {

hash $request_uri consistent;

server 10.0.0.2:8080 max_fails=0;
server 10.0.0.3:8080 max_fails=0;
server 10.0.0.4:8080 max_fails=0;
server 10.0.0.5:8080 max_fails=0;
server 10.0.0.6:8080 max_fails=0;
server 10.0.0.7:8080 max_fails=0;
server 10.0.0.8:8080 max_fails=0;
server 10.0.0.9:8080 max_fails=0;
server 10.0.0.10:8080 max_fails=0;
server 10.0.0.11:8080 max_fails=0;
keepalive_requests 10000;

keepalive 64;

}

Уникальных урлов более 30 миллионов. Размер файлов примерно одинаковый.

Ожидал, что распределение нагрузки между серверами будет примерно
одинаковое. Однако отклонения достигают 23% как по трафику, так и по
объему закэшированных данных.

Поставил php реализацию библиотеки ketama, смоделировал эту ситуацию и
получил похожий результат. На тесте с десятью серверами и миллионом
ключей - отклонения до 27%.

Улучшает ситуацию увеличение количества серверов. При десятикратном
увеличении серверов отклонение составило 8%.

Для выравнивания cache hit rate по серверам скорректировал размеры кэш
зон в соответствии с реальным распределением нагрузки.

С наилучшими пожеланиями.
Алексей.

P.S.: Может быть стоит отразить эту особенность в документации.


Подробная информация о списке рассылки nginx-ru