IPVS
Коротко
IP Virtual Server - балансировщик нагрузки L4 в ядре Linux. Часть проекта LVS (Linux Virtual Server).
Клиент обращается на VIP, IPVS распределяет соединения на real servers. Работает с TCP и UDP.
Три метода доставки:
- NAT - изменение dst IP, ответ через балансировщик
- DR (Direct Routing) - изменение MAC, ответ напрямую клиенту
- TUN (Tunneling) - IPIP инкапсуляция
Используется в keepalived, kube-proxy (Kubernetes).
Методы forwarding
NAT (-m)
Балансировщик переписывает dst IP с VIP на IP real server. Ответ идет обратно через балансировщик.
Client -> [VIP] -> LVS (DNAT) -> Real Server
Client <- [VIP] <- LVS (SNAT) <- Real Server- Real servers используют LVS как default gateway
- Поддерживает port mapping (VIP:80 -> RIP:8080)
- Балансировщик обрабатывает весь трафик
- Real servers могут быть в приватной сети
DR (-g)
Балансировщик меняет только MAC-адрес. IP остается VIP. Real server отвечает напрямую клиенту.
Client -> [VIP] -> LVS (MAC rewrite) -> Real Server
Client <------------------------------ Real Server- Real servers должны иметь VIP на loopback (без ARP)
- Не поддерживает port mapping
- Высокая производительность
- Real servers в одном L2 сегменте с LVS
TUN (-i)
Балансировщик инкапсулирует пакет в IPIP туннель. Real server декапсулирует и отвечает напрямую.
- Real servers могут быть в разных сетях
- Не поддерживает port mapping
- Требует IPIP на real servers
Schedulers
rr - round robin. По очереди.
wrr - weighted round robin. Учитывает weight серверов.
lc - least connections. На сервер с наименьшим числом соединений.
wlc - weighted least connections. lc с учетом weight. По умолчанию.
sh - source hash. Один клиент всегда на один сервер.
dh - destination hash. Для прокси/кешей.
sed - shortest expected delay.
nq - never queue. Сначала на idle серверы.
Команды
| |
Установка.
| |
Загрузка модуля ядра.
| |
Создать сервис (TCP, round robin).
| |
Создать сервис (UDP).
| |
Добавить real server (NAT, weight 1).
| |
Добавить real server (DR, weight 2).
| |
Weight 0 - graceful drain.
| |
Удалить real server.
| |
Удалить сервис.
| |
Показать конфигурацию.
| |
Статистика.
| |
Текущие соединения.
| |
Очистить все правила.
| |
Сохранить/восстановить.
Примеры
HTTP балансировщик (NAT)
| |
Real servers: default gateway на IP балансировщика.
HTTP балансировщик (DR)
На балансировщике:
| |
На каждом real server:
| |
Persistence
| |
Клиент привязан к серверу на 300 секунд.
Проверка
| |
Модуль загружен.
| |
Текущие правила.
| |
Активные соединения.