Настройка keepalive как аналог OneConnect profile от F5#

Для повторного использования уже открытых TCP-соединений с серверами бэкенда используйте механизм keepalive.

Особенности:

  • Если в upstream-группе определено несколько серверов, то keepalive-соединения устанавливаются с каждым из них в соответствии с выбранным методом балансировки.

  • Мастер-процесс запускает несколько рабочих процессов в зависимости от настройки директивы worker_processes и у каждого рабочего процесса будет собственный пул keepalive-соединений:

    • Если все запросы обрабатывает один рабочий процесс, то они могут проксироваться в одно и то же установленное соединение.

    • Если запросы распределяются между несколькими рабочими процессами, то для каждого процесса формируются свои keepalive-соединения с бэкендом.

Настройка#

  1. Задайте директиву keepalive в upstream.

    Пример:

    upstream http_backend {
        server 192.168.0.1;
        server 192.168.0.2;
    
        keepalive 32;
    }
    
  2. Для HTTP установите директиву proxy_http_version в 1.1, а поле заголовка Connection в proxy_set_header очистите:

    Пример:

    server {
        # ...
    
        location / {
            proxy_pass http://http_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            # ...
        }
    }
    
  3. Если требуется разделять потоки по IP-адресам, используйте привязку по sticky learn в группе upstream в сочетании с директивой geo.

    Пример:

    geo $idmask {
        ranges;
        default                   ZZ;
        10.21.0.0-10.21.0.255     tau;
        10.21.4.0-10.21.4.255     chi;
        10.21.8.0-10.21.8.255     alpha;
        10.21.20.0-10.21.20.255   nu;
    }
    
    upstream http_backend {
        server 10.21.8.6:80;
        server 10.21.8.13:80;
    
        sticky learn
            create=$idmask
            lookup=$idmask
            zone=client_sessions:1m
            timeout=60s;
    
        keepalive 32;
    }
    
    server {
        listen       10.21.8.8:80;
        server_name  localhost;
    
        location / {
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    
            proxy_pass http://http_backend;
        }
    }
    

    В этом случае в пределах одного рабочего процесса поведение Angie ADC будет очень похоже на механизм OneConnect в F5 BIG-IP.