我正在寻找一种优雅地重新加载 haproxy 的解决方案。我有一个正在运行的 nginx 服务器,它将请求传递给 Haproxy,有时我会重新加载 Haproxy 配置。但我观察到在重新加载时所有现有连接都被切断,haproxy 后端队列显示 0 个请求(从 haproxy 的套接字统计数据中获取)。
我正在使用有关该问题的几篇博客文章和 haproxy 文档中提到的方法:
重新加载:
haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf (</var/run/haproxy.pid)
Run Code Online (Sandbox Code Playgroud)
开始 :
haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
Run Code Online (Sandbox Code Playgroud)
如果有人可以提出任何解决方案,我们将不胜感激。下面是我的 haproxy 配置文件
global
maxconn 64000
ulimit-n 200000
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
spread-checks 5
stats socket /etc/haproxy/stats
defaults
log global
mode http
balance roundrobin
maxconn 64000
option abortonclose
option httpclose
retries 3
option redispatch
timeout client 30000
timeout connect 30000
timeout server 30000
stats …
Run Code Online (Sandbox Code Playgroud) 我想问一下 Nginx 请求重试的问题。我在后端运行一个 Nginx,然后将请求发送到 HaProxy,然后 HaProxy 将其传递到 Web 服务器并处理请求。我正在动态重新加载我的 Haproxy 配置以提供弹性。问题是当我重新加载 Haproxy 时请求被丢弃。所以我想要一个可以从 Nginx 重试的解决方案。我查看了http模块中的proxy_connect_timeout、proxy_next_upstream以及服务器模块中的max_fails和fail_timeout。我最初在上游连接中只有 1 个服务器,所以我现在只增加了两次,并且更少的请求被丢弃(仅当)在上游中说同一个服务器两次,如果我有相同的服务器 3-4 倍,则丢弃增加)。
所以,首先我现在想要的是,当请求无法建立从 Nginx 到 Haproxy 的连接时,因此在重新加载时,连接似乎被视为错误,并且请求会立即被丢弃。
那么我怎样才能指定失败后我想重试从 Nginx 到上游的请求的时间,或者指定 Nginx 将其视为失败请求之前的时间。
(我尝试增加 proxy_connect_timeout - 没有帮助,mail_retires,fail_timeout 并且还放置了相同的上游服务器两次(到目前为止给出了最好的结果)
Nginx 配置文件
上游 gae_sleep {
server 128.111.55.219:10000;
Run Code Online (Sandbox Code Playgroud)
}
服务器 {
listen 8080;
server_name 128.111.55.219;
root /var/apps/sleep/app;
# Uncomment these lines to enable logging, and comment out the following two
#access_log /var/log/nginx/sleep.access.log upstream;
error_log /var/log/nginx/sleep.error.log;
access_log off;
#error_log /dev/null crit;
rewrite_log off;
error_page 404 = …
Run Code Online (Sandbox Code Playgroud)