upsync
Директива `upsync` позволяет NGINX динамически синхронизировать конфигурации upstream-серверов из Consul или Etcd, обеспечивая обновления в реальном времени без прерываний обслуживания.
Описание
Директива upsync — мощная функция модуля NGINX, которая синхронизирует конфигурации upstream-серверов из хранилища ключ‑значение, такого как Consul или Etcd. Эта синхронизация выполняется без необходимости перезапуска NGINX, что предотвращает простой и обеспечивает непрерывную доставку сервиса. Когда директива используется в контексте upstream, она требует как минимум один аргумент, указывающий адрес сервера Consul или Etcd и путь к конфигурации upstream. Можно задать дополнительные параметры, такие как upsync_timeout, который определяет временной лимит для операций синхронизации, и upsync_interval, который задаёт частоту проверок синхронизации. Кроме того, параметр upsync_type указывает тип используемого хранилища (например, Consul или Etcd).
После успешной настройки NGINX может автоматически добавлять или удалять бэкенд‑серверы в соответствии с записями в хранилище ключ‑значение, изменяя соответствующие атрибуты, такие как weight и health checks, в реальном времени. Если сервер выходит из строя или становится нездоровым, он может быть бесшовно удалён из upstream без каких-либо действий со стороны администратора. Модуль также предоставляет опцию указания пути для дампа, куда можно сохранить текущее состояние конфигураций upstream для ручной проверки или отката при необходимости.
Пример конфига
http {
upstream my_upstream {
upsync 127.0.0.1:8500/v1/kv/upstreams/my_app upsync_timeout=10s upsync_interval=1s upsync_type=consul;
}
server {
listen 80;
location / {
proxy_pass http://my_upstream;
}
}
}Убедитесь, что для Consul или Etcd указан правильный IP-адрес и порт, иначе синхронизация завершится неудачей.
Учтите настройку strong_dependency, поскольку она влияет на то, как управляются upstream-серверы в условиях отказов — её неправильное использование может привести к нежелательному удалению серверов.
Поймите последствия установки слишком короткого интервала синхронизации, так как это может создать ненужную нагрузку как на NGINX, так и на key-value store.