Nginx负载平衡会跳过一些消息

时间:2019-06-12 15:15:26

标签: nginx load-balancing graylog2

我们具有以下配置:

  • 熟练(td-agent)可以解析和转发日志文件中的日志

  • nginx将这些日志负载平衡到3个节点

  • graylog Web应用程序以显示日志,它在这3个节点上运行

我们发现有些消息没有进入灰色日志。通过调查,我们发现nginx是问题所在。如果我们直接发送到graylog,或仅使用一个上游节点,则它就像一种魅力。 这些消息具有3-5 K个字符的JSON格式。

通过更多的调查和尝试,我注意到将 least_conn; 置于上游配置中是可行的,这意味着在发送的10条消息中,有3至6条确实会到达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/*;
}

这是启用了流的conf文件,每个端口也是

server {
  listen                *:14080 udp;

  proxy_timeout         1;
  proxy_connect_timeout 1;
  proxy_pass            graylog_hosts_14080;

  }

0 个答案:

没有答案