Сетчатая маршрутизация, скорее всего, только циклическая.
Я погрузился в источник докера. Я нашел ссылки на различные методы маршрутизации, но, похоже, используется только циклический перебор. Я также нашел вопрос на форуме докеров, который, кажется, подтверждает, что маршрутизация сетки является только циклической.
Изучение источника
В поставщик/github.com/moby/ipvs/constants.go это интересный список стратегий маршрутизации:
константа (
// RoundRobin равномерно распределяет задания среди доступных
// реальные серверы.
RoundRobin = "рр"
// LeastConnection назначает больше заданий реальным серверам с
// меньше активных заданий.
Наименьшее соединение = "lc"
// DestinationHashing назначает задания серверам, просматривая
// поднимаем статически назначенную хеш-таблицу по их целевому IP-адресу
// адреса.
DestinationHashing = "dh"
// SourceHashing назначает задания серверам через поиск
// статически назначенная хеш-таблица по их исходному IP-адресу
// адреса.
SourceHashing = "ш"
// WeightedRoundRobin распределяет задания на реальные серверы пропорционально
// к реальному весу серверов. Серверы с большим весом
// получать новые задания первыми и получать больше заданий, чем серверы
// с меньшими весами. Серверы с одинаковым весом получают
// равное распределение новых заданий
WeightedRoundRobin = "wrr"
// WeightedLeastConnection назначает серверам больше заданий
// с меньшим количеством заданий и по отношению к реальному весу серверов
Взвешенное наименьшее соединение = "wlc"
)
Однако единственная из этих констант, которая используется каждый раз, — это RoundRobin:
wayne@treebeard:~/temp/docker-src/moby$ ack 'ipvs\.(RoundRobin|LeastConnection|DestinationHashing|SourceHashing|WeightedRoundRobin|WeightedLeastConnection)'
libnetwork/service_linux.go
117: SchedName: ipvs.RoundRobin,
225: s.SchedName = ipvs.RoundRobin
Хотя это был очень беглый взгляд на источник, я не нашел очевидных способов настроить режим маршрутизации на какой-либо другой, кроме RoundRobin.
Связанный вопрос на форумах докеров
Вопрос на форуме докеров, кажется, подтверждает, что единственный метод маршрутизации, доступный для сетки, — циклический:
https://forums.docker.com/t/configure-swarm-mode-routing-mesh-load-balancing-method/75413
Я читал, что балансировщик нагрузки ячеистой сети маршрутизации в режиме роя использует циклический перебор (https://success.docker.com/article/ucp-service-discovery#externalloadbalancing (swarmmoderoutingmesh) 15).
Есть ли возможность настроить метод балансировки нагрузки (например,(взвешенное) наименьшее количество соединений, хэширование источника/назначения…) сетки маршрутизации в режиме роя?
Ответ был:
Сетка маршрутизации режима роя, также известная как вход, действует на уровне 4 и не знает о тех деталях конфигурации, которые вы запрашиваете. Документацию можно найти здесь: https://docs.docker.com/engine/swarm/ingress/ 45. Ссылка, которую вы вставили, нацелена на «почему использование прокси-сервера блокировки в качестве преимущества».
Если у вас есть корпоративная лицензия: вы имеете право использовать прокси-сервер блокировки, который является частью UCP. Это обратный прокси/балансировщик нагрузки уровня 7. В те дни, когда я пробовал ранние версии блокировки, у нее были некоторые ограничения. Из того, что я прочитал в журнале изменений, текущие версии кажутся близкими к тому, на что способен traefik.
Если вы используете Docker-CE, возможно, вам стоит взглянуть на traefik.