nginx - 负载均衡 nginx 代理中的共享缓存内容

标签 nginx

                       <---> NGX CACHE - NODE A \
REQUESTS <---> LB <-->                           <----> SHARED FS (NAS)
                       <---> NGX CACHE - NODE B /

我正在尝试完成这样的事情,请求在多个节点之间进行负载平衡,这些节点应该在可用时提供共享的缓存内容。 即使内容由其他节点之一存储在缓存文件系统中,我们也会遇到随机 MISS 结果。从日志中我们可以看到,有时节点 A 会识别为节点 B 缓存的 HIT 内容,有时则不然。

根据文档https://www.nginx.com/blog/nginx-caching-guide/ ,强制的keys_zone参数设置一个共享内存区域,用于存储缓存键和元数据,以便快速确定请求是HIT还是MISS,而无需访问磁盘。

这是我们配置的相关部分:

            proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_zone:10m max_size=10g inactive=60m use_temp_path=off;
             :           :            :
            location ~* ^/api/rdPage.aspx {
                    resolver 10.0.0.1;
                    add_header X-Cache-Status $upstream_cache_status;
                    proxy_cache_bypass $http_pragma;
                    proxy_cache_key "$proxy_host$uri$request_body";
                    proxy_cache_valid 200 10m;
                    proxy_ignore_headers Cache-Control Expires Set-Cookie;
                    proxy_cache_methods POST;
                    proxy_cache_min_uses 0;
                    proxy_cache my_zone;

                    # WITH PROXY LB SERVER
                    proxy_pass http://api-server/rdPage.aspx$is_args$args;
                    proxy_headers_hash_bucket_size 128;
                    proxy_connect_timeout   15;
                    proxy_send_timeout        15;
                    proxy_read_timeout        1800;
            }       

keys_zone“共享”内存区域如何在多个节点上工作?如果它在内存中,如何共享?有没有不向 nginx 添加自定义模块(例如 SR Cache)的替代方案( https://www.nginx.com/resources/wiki/modules/sr_cache/ )?

最佳答案

Nginx 无法在节点之间共享基于磁盘的缓存。将缓存放在共享磁盘上也是一个坏主意,这是一个糟糕的设计。共享磁盘的任何网络问题、网络延迟和分配锁累积导致的任何高延迟都会显着降低 nginx 性能。

将缓存保留在本地磁盘上。如果您使用多个节点作为负载平衡 - 您可以使用缓存分片。每个节点都会接收部分请求并缓存。如果您的目标是HA,每个节点都应该保留自己的完整缓存。

有关所有这些案例的更多信息,您可以在 nginx 网站上阅读:https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/关于分片和 https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/关于医管局。

关于nginx - 负载均衡 nginx 代理中的共享缓存内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349240/

相关文章:

python - 连接到上游时,Docker 中的 NGINX 和 Gunicorn 中的权限错误 : connect() to unix:/tmp/gunicorn. sock 失败(13:权限被拒绝)

node.js - Express + Passport + Nginx - 仅在实时环境中 req.user 为空

perl - NGINX 不执行 perl 脚本?

php - 我如何知道 Nginx 上设置的服务器名称或网址

nginx - 在Nginx入口 Controller 中添加重写规则301

php - Apache 不执行 php 文件

django - 为 aws s3 静态和媒体文件配置 Nginx

http - nginx 上传 client_max_body_size 问题

.net - HttpWebRequest 似乎没有发送客户端 SSL 证书

ruby - "Incompatible library version"on nokogiri