Балансировка нагрузки Nginx пропускает некоторые сообщения - PullRequest
0 голосов
/ 12 июня 2019

У нас есть следующая конфигурация:

  • fluentd (td-agent) для анализа и пересылки журналов из файла журнала

  • nginx для загрузкисбалансировать эти журналы по 3 узлам

  • GrayLog веб-приложение для отображения журналов, оно работает на этих 3 узлах

Мы обнаружили, что некоторые сообщения нене попасть в серый журнал.Исследуя, мы обнаружили, что проблема заключается в nginx.Если мы отправляем напрямую в graylog или используем только один вышестоящий узел, это работает как шарм.Эти сообщения имеют размер 3-5 символов JSON.

Путем дополнительных исследований и попыток я отметил, что перевод imum_conn; в исходную конфигурацию, это работает, то есть от 3 до6 сообщений из 10, которые отправляются, поступают в graylog, и без него они НИКОГДА не получаются.

Я попытался поместить ip_hash, но я получаю сообщение об ошибке, которое не может быть помещено туда, что странно.

Так что, если мы исключим nginx или настроим его на использование одного узла, он будет работать нормально.На любом из 3 узлов.Когда мы включаем второй узел, проблема возвращается.

Я также пытался поместить большие значения в nginx.conf, в 4 раза больше (4k -> 16k и т. Д.).

Есть идеи, что делатьпопробуйте следующий?

Это один исходный файл конфигурации, у нас около 20 таких на порт

upstream graylog_hosts_14099 {
  least_conn;
  server 10.138.65.213:14099;
  server 10.138.65.64:14099;
  server 10.138.65.81:14099;
}

Это nginx.conf

user nginx;
worker_processes auto;
worker_rlimit_nofile 49152;

pid        /var/run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
  accept_mutex on;
  accept_mutex_delay 500ms;
  worker_connections 49152;
}

http {

  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log error;

  sendfile on;
  server_tokens on;

  types_hash_max_size 2048;
  types_hash_bucket_size 1024;

  server_names_hash_bucket_size 128;
  server_names_hash_max_size 1024;

  keepalive_timeout   65s;
  keepalive_requests  100;
  client_body_timeout 60s;
  send_timeout        60s;
  lingering_timeout   5s;
  tcp_nodelay         on;


  client_body_temp_path   /var/nginx/client_body_temp;
  client_max_body_size    10m;
  client_body_buffer_size 512k;
  proxy_temp_path         /var/nginx/proxy_temp;
  proxy_connect_timeout   90s;
  proxy_send_timeout      90s;
  proxy_read_timeout      90s;
  proxy_buffers           32 16k;
  proxy_buffer_size       32k;
  proxy_set_header        Host $host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        Proxy "";
  proxy_headers_hash_bucket_size 256;
  proxy_headers_hash_max_size 4096;
  proxy_intercept_errors on;
  proxy_request_buffering off;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;

}
stream {
  include /etc/nginx/conf.stream.d/*.conf;
  include /etc/nginx/streams-enabled/*;
}

Этоэто файл конфигурации с поддержкой потоков, для каждого порта также

server {
  listen                *:14080 udp;

  proxy_timeout         1;
  proxy_connect_timeout 1;
  proxy_pass            graylog_hosts_14080;

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...