- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 haproxy 前端和 nginx 来跨 jetty 应用程序服务器进行负载平衡,所有服务器都运行 ubuntu-14-04-x64。
Nginx 和 haproxy 共享一个 0.5G 1CPU 虚拟机。每个jetty服务器都运行在一个4G 2CPU虚拟机上。
Nginx 前端 haproxy,配置如下:
user myc;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 65536;
multi_accept on;
use epoll;
}
http {
include mime.types;
types_hash_max_size 2048;
default_type application/octet-stream;
proxy_cache_path /home/myc/cache levels=1:2 keys_zone=one:10m inactive=7d;
proxy_http_version 1.1;
proxy_set_header Connection "";
upstream loadbalancer {
server unix:/tmp/haproxy.sock;
keepalive 8192;
}
server {
listen 80 backlog=16384;
server_name example.org;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;
gzip_vary on;
gzip_min_length 10240;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
sendfile on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 502 /502.html;
location /502.html {
root /home/myc/html;
}
proxy_cache one;
location / {
proxy_pass http://loadbalancer/;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
add_header Cache-Control private; # Don't cache any of this publicly, because JSESSIONID will be cached, too
add_header X-Proxy-Cache $upstream_cache_status;
}
location /api {
proxy_pass http://loadbalancer/api;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_ignore_headers Set-Cookie; # Make sure JSESSIONID is not cached with static content
proxy_hide_header Set-Cookie;
proxy_cache_valid 200 10s;
add_header X-Proxy-Cache $upstream_cache_status;
}
location ~* ^.*\.(css|js|gif|jpe?g|png|ico)$ {
proxy_pass http://loadbalancer$uri;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
expires 1h;
access_log off;
log_not_found off;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_ignore_headers Set-Cookie; # Make sure JSESSIONID is not cached with static content
proxy_hide_header Set-Cookie;
add_header Cache-Control public;
proxy_cache_valid 200 404 10s;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
HAProxy 配置如下:
global
daemon
maxconn 262144
maxconnrate 128
chroot /home/jail/
defaults
mode http
timeout connect 10s
timeout client 120s
timeout server 120s
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
compression algo identity
option http-keep-alive
frontend http-in
bind /tmp/haproxy.sock user myc
default_backend makeyourcase
backend makeyourcase
option httpchk GET /
appsession JSESSIONID len 52 timeout 1h
server ny2-b-app01 <redacted>:8080 maxconn 1024 check inter 60000 fall 1 rise 1
server ny2-b-app02 <redacted>:8080 maxconn 1024 check inter 60000 fall 1 rise 1
TCP 堆栈使用 nginx/haproxy 盒和两个 jetty 盒上的这些参数进行调整:
net.core.netdev_max_backlog = 65535
net.core.somaxconn = 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_window_scaling = 1
我正在使用 The Grinder 来创建负载。一旦负载达到某个点,SYN_SENT 就会在 haproxy 端堆积。如果我将 maconnrate 降低到 96,连接速率就会降低到足以使 SYN_SENT 永远不会堆积的程度。后端的 CPU 负载永远不会超过 20%,平均负载也不会超过 1。我在 nginx、haproxy 和 tcp 堆栈中尝试了各种调整选项。
似乎可能有一些 tcp parm 可以让更多的连接/秒进入 jetty 服务器,从而让 haproxy 完全加载 jetty 服务器。
OTOH,根据 http://cbonte.github.io/haproxy-dconv/configuration-1.5.html ,“默认情况下,HAProxy 在持久性方面以保持事件模式运行然而,haproxy 和应用程序服务器之间的连接并未保持打开状态。我是否指定了某些 haproxy 选项来阻止这种情况发生?或者是否有某些选项可以实现这一点?
最佳答案
虽然我花了一些时间调整设置(如下所示),但最终给出更合理结果(大约 14K 同时连接)的更改是将托管 nginx 和 haproxy 的虚拟机大小从 0.5G 1CPU 增加到 2G 2CPU。
这是当前的 nginx 配置:
user myc;
worker_processes 1;
pid /run/nginx.pid;
worker_rlimit_nofile 131072;
events {
worker_connections 65536;
multi_accept on;
use epoll;
}
http {
include mime.types;
types_hash_max_size 2048;
default_type application/octet-stream;
proxy_cache_path /home/myc/cache levels=1:2 keys_zone=one:10m inactive=7d;
upstream loadbalancer {
server unix:/tmp/haproxy.sock;
keepalive 32768;
}
upstream haproxy_admin {
server 127.0.0.1:8081;
}
server {
listen 80 backlog=16384;
server_name makeyourcase.org;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;
gzip_vary on;
gzip_min_length 10240;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
sendfile on;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
error_page 502 /502.html;
location /502.html {
root /home/myc/html;
}
proxy_cache one;
location ~ ^/api/auth/local/.*$ {
proxy_pass http://loadbalancer$uri;
}
location /admin {
proxy_pass http://loadbalancer/admin;
}
location /stats {
proxy_pass http://haproxy_admin/;
}
location / {
proxy_pass http://loadbalancer/;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
add_header Cache-Control private; # Don't cache any of this publicly, because JSESSIONID will be cached, too
add_header X-Proxy-Cache $upstream_cache_status;
}
location /api {
proxy_pass http://loadbalancer/api;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_ignore_headers Set-Cookie; # Make sure JSESSIONID is not cached with static content
proxy_hide_header Set-Cookie;
proxy_cache_valid 200 10s;
add_header X-Proxy-Cache $upstream_cache_status;
}
location ~* ^.*\.(css|js|gif|jpe?g|png|ico)$ {
proxy_pass http://loadbalancer$uri;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
expires 1h;
access_log off;
log_not_found off;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_ignore_headers Set-Cookie; # Make sure JSESSIONID is not cached with static content
proxy_hide_header Set-Cookie;
add_header Cache-Control public;
proxy_cache_valid 200 404 10s;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
}
和 HAProxy:
global
daemon
maxconn 32768
maxconnrate 256
chroot /home/jail/
defaults
mode http
timeout connect 10s
timeout client 120s
timeout server 120s
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
compression algo identity
frontend http-in
bind /tmp/haproxy.sock user myc
default_backend makeyourcase
backend makeyourcase
option httpchk GET /
option http-server-close
appsession JSESSIONID len 52 timeout 1h
server ny2-b-app01 <redacted>:8080 maxconn 1024 check inter 60000 fall 1 rise 1
server ny2-b-app02 <redacted>:8080 maxconn 1024 check inter 60000 fall 1 rise 1
listen stats localhost:8081
mode http
stats enable
stats hide-version
stats realm MYC
stats uri /
和 sysctl:
fs.file-max = 1048576
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 262144
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_low_latency = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_window_scaling = 1
vm.swappiness = 0
关于linux - 最大化从haproxy到jetty应用服务器的tcp连接速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911444/
我只是看了一下HAproxy的源码来了解它是如何实现的,我看到了一个有趣的数据结构,叫做Elastic Binary Search tree .它似乎与二叉搜索树非常相似。但我想知道为负载均衡器选择这
我正在 AWS 上部署 NodeJS 应用程序。目前的结构是 ELB 1 个 HAProxy 实例 2+ 个运行 NodeJS 应用程序的 EC2 实例 Single HA Proxy 实例确保
更改配置文件时,我使用以下命令重启 HAProxy: /usr/local/sbin/haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $
我有两个 HAProxy 实例。两个实例都启用了统计信息并且工作正常。 我正在尝试将两个实例的统计信息合并为一个,以便我可以使用单个 HAProxy 来查看前端/后端统计信息。我试图让两个 hapro
在重新启动 HAProxy 服务之前,有什么方法可以验证 HAProxy haproxy.cfg 文件吗?例如:较大的 haproxy.cfg 文件中可能存在小的拼写/语法错误。我搜索了多个论坛,但找
我希望在 HAProxy 中有一个限制规则,限制用户加载任何特定路径的速率,但我不知道在 HAProxy 中连接字符串的方法(至少在生成棍子 table 的 key )。所以我想要的是 tcp-req
我正在构建一个具有多个前端和后端的 haproxy 配置文件。它将有数百行长,我宁愿将其分成单独的文件,用于我想要负载平衡的每个不同网站。 HAProxy 是否提供从主 haproxy.cfg 文件链
我正在使用以下命令启动 HA 代理: sudo etc/init.d/haproxy start 我使用以下方法停止 HA 代理: sudo etc/init.d/haproxy stop 我如何为
我使用 haproxy 和 stunnel 处理 SSL(并使用代理模式来保留 haproxy 的原始 IP)。 我有几个 acl 测试,根据域、 header 或路径重定向到不同的后端。 问题是,无
我看到系统日志中弹出这些消息: Mar 10 12:51:35 db1 kernel: [5851729.958138] type=1400 audit(1457614295.823:2925931)
我在 haproxy.cfg 的默认部分有这个选项: option dontlog-normal option dontlognull 但是在日志文件中仍然有这种类型的日志行: localhost
我们使用以下方法将 URL 映射文件加载到 HAProxy 中: http-request redirect location %[capture.req.uri,map(/etc/haproxy/r
我目前正在重构我们在生产服务器上使用的 haproxy 配置,以从中央服务器转发 TCP 流量。目标是让一切都与 docker 容器一起工作,以帮助提高部署可靠性。 到目前为止一切都进展顺利,但现在我
我在我的 HAProxy 统计报告中看到 Sessions Curr、Max、Limit 均为 2000。 如何将最大和限制增加到 2000 以上? 最佳答案 使用maxconn Sets the m
我环顾四周,试图找到一个 HAProxy 匹配 SNI 通配符的示例,我的搜索提出了类似标题但与证书无关的问题。 具体来说,我需要使用 acme/letsencyrpt 为 dvsni 路由 nonc
我们有一个 haproxy 实例,我们的一个应用程序仅支持 TLSv1.0。当它尝试通过此 haproxy 连接时,它会因握手失败而失败。 如何在此 haproxy 实例上启用 TLSv1.0 支持。
如何构建HAPROXY配置文件来阻止特定HTTP方法的请求? 我们开始发现许多攻击使用我们的应用程序不支持的方法。我们宁愿拒绝负载均衡器的流量,也不愿让我们的应用程序陷入困境。 最佳答案 尝试将其放入
我使用 haproxy 1.6.4 作为 TCP(不是 HTTP)代理。我的客户正在发出 TCP 请求。他们不等待任何响应,他们只是发送数据并关闭连接。 当所有后端节点都关闭时,haproxy 的行为
我需要使用先前配置的 HAproxy v1.8 来管理服务器。更新到 v2.4 后,我注意到有关不再使用 regrep 的错误: [ALERT] (1574) : parsing [/etc/h
我们使用 HAProxy 将传入的 TCP 连接转发到使用原始 TCP 的单独服务器。我们看到的问题是客户端连接被接受然后关闭而不是立即被拒绝。由于我们启用了健康检查,HAProxy 有什么方法可以解
我是一名优秀的程序员,十分优秀!