Nginx负载均衡之Memcached缓存模块

news2024/11/25 19:35:05

        Nginx 的 ngx_http_memcached_module 模块本身并没有提供缓存功能,它只是一个将用户请求转发到 Memcached 服务器的代理模块。
        在以 Memcached 服务器为缓存应用的方案中,Memcached 作为内容缓存的存储服务器,用户通过 URL 为 Memcached 的 key 将 Web 请求数据缓存到 Memcached 服务器中,在客户端发起请求时,Nginx 通过一致的 URL 为 key,快速地从 Memcached 服务器中将缓存的内容作为用户的请求响应数据返回给客户端。
        Memcached 是一个开源、高性能的内存对象缓存系统,使用 Memcached 服务器作为缓存存储服务器,充分利用了 Memcached 的高效缓存功能,减少了 Nginx 服务器磁盘 I/O 的操作,也可以通过 upstream 指令对多台 Memcached 做分布式集群负载,以便整体提升 Nginx 缓存服务器的性能。
        Memcached 缓存模块配置指令如下表所示:

指令名称指令值格式默认值指令说明
memcached_bindaddress[transparent]
或 off
--设置从指定的本地 IP 地址及端口与 Memcached 服务器建立连接,指令值可以是变量。指令值参数为 transparent 时,允许将客户端的真实 IP 透传给被代理服务器,并以客户端真实 IP 为访问被代理服务器的源 IP,指令值为 off 时,则取消上一层指令域同名指令的配置
memcached_buffer_sizesize4k 或 8k设置用于读取 Memcached 服务器,读取响应数据缓冲区的大小,当 Nginx 收到响应数据后,将同步传递给客户端
memcached_connect_timeouttime60sNginx 与 Memcached 服务器建立连接的超时时间,通常不应超过 75s
memcached_force_rangeson 或 offoff启用来自 Memcached 服务器的缓存和未缓存响应的 byte-range 请求支持,而不考虑这些响应头中的 Accept-Ranges 字段
memcached_gzip_flagflag--启用对 Memcached 服务器缓存数据 fags 的测试,flags 为客户端写入缓存时的自定义标记,此处用以判断缓存数据是否被压缩存储,如果数据被压缩存储,则将响应头字段 Content-Encoding 设置为 gzip
memcached_next_upstreamerror、timeout、
invalid_header、
not found 或 off...
error timeout当出现指令值中指定的条件时,将未返回响应的客户请求传递给 upstream 中的下一个服务器
memcached_next_upstream_timeouttime0设置将符合条件的客户端请求传递给 upstream 中下一个服务器的超时时间。0 为不做超时限制,遍历完所有上游服务器组中的服务器为止
memcached_next_upstream_triesnumber0设置符合条件的客户端请求传递给upstream中下一个服务器的尝试次数,包括第一次失败的次数。0为不做尝试次数限制,遍历完所有上游服务器组中的服务器为止
memcached_passaddress--设置 Memcached 服务器的地址及端口,地址可以是 IP、域名或 UNIX 套接字
memcached_read_timeouttime60s在连续两个从 Memcached 服务器接收数据的读操作之间的间隔时间超过设置的时间时,将关闭连接
memcached_send_timeouttime60s在连续两个发送到 Memcached 服务器的写操作之间的间隔时间超过设置的时间时,将关闭连接
memcached_socket_keepaliveon 或 offoff设置 Nginx 与 Memcached 服务器的 TCP keepalive 行为的心跳检测机制,默认使用操作系统的 socket 配置,若指令值为 on,则开启 SO_KEEPALIVE 选项进行心跳检测

配置样例如下:

server {
    location / {
        set            $memcached_key "$uri?$args";  # 设置Memcached缓存key
        memcached_pass 127.0.0.1:11211;              # 设置被代理Memcached地址
        error_page     404 502 504 = @fallback;      # 返回状态码404、502、504时跳入内部请求
    }

    location @fallback {
        proxy_pass     http://backend;               # 将请求转发给后端服务器
    }
}

        为了提高动态网站的响应速度,有时会采用将动态网站转换成静态化文件的方式进行优化,而相对于磁盘存储,使用 Memcached 进行静态文件的存储则可以进一步提升网站的响应速度。Memcached 是基于内存的高性能对象缓存系统,因为存储数据都是在内存中的,所以减少了系统的 I/O 操作,从而避免了因磁盘性能带来的影响。
        使用 Memcached 作为缓存存储服务器,可以直接利用 Memcached 缓存的过期机制实现缓存的自动化过期管理,且利用 Nginx 的负载机制和 Memcached 分布式特性,可以非常方便地横向扩展,以提升处理性能。Memcached 缓存应用场景如下图所示。

        Web 服务器将动态文件以请求 URI 作为 Memcached 的 key 初始化到 Memcached 服务器中;Nginx 将用户请求转发到 Memcached 服务器中,并将以请求 URI 作为 Memcached key 的数据返回给用户;当 Memcached 的请求失败后,则将请求转发给后端 Web 服务器的接口动态生成对应的静态文件,返回响应数据并更新 Memcached。
        Memcached 的安装非常简单,在 CentOS 7 系统下使用 yum 安装即可,安装方法如下:

yum -y install memcached

cat /etc/sysconfig/memcached
PORT="11211"                  # 端口
USER="memcached"
MAXCONN="1024"          # 最大连接数
CACHESIZE="64"              # 使用内存大小为64M
OPTIONS=""

systemctl start memcached

         Nginx 服务器配置样例如下:

upstream backend {
    server 192.168.2.145:8190;                              # 后端PHP服务器IP
}

upstream memcached {
    hash $host$request_uri consistent;                      # 一致性hash
    server 192.168.2.145:11211;                             # Memcached服务器IP
    server 192.168.2.109:11211;                             # Memcached服务器IP
}

server {
    listen       8181;
    access_log logs/mem_access.log;
    set $memcached_key $host$request_uri;                   # 设置Memcached的key
    location / {
        memcached_connect_timeout 5s;             # 与Memcached建立连接超时时间为5s
        memcached_read_timeout 2s;                # 连续两次读的超时时间为2s
        memcached_send_timeout 2s;                # 连续两次写的超时时间为2s
        memcached_pass memcached;                 # 代理到Memcached集群
        add_header X-Cache-Satus HIT;             # 显示缓存命中状态
        add_header Content-Type 'text/html; charset=utf-8'; # 强制响应数据格式为html
    }

    error_page     404 502 504 = @fallback;

    location @fallback {
        proxy_set_header   X-Memcached-Key $memcached_key;  # 将memecached key传递
                                                            # 给PHP服务器
        proxy_pass     http://backend;                      # PHP服务器
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android面试题精选——再聊Android-Handler机制

​ static final ThreadLocal sThreadLocal new ThreadLocal(); //创建当前线程的Looper对象 private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() ! null) { throw new RuntimeException(“Only one Looper may be created per thread”); } sThre…

【课程总结】Day10:卷积网络的基本组件

前言 由于接下来的课程内容将围绕计算机视觉展开,其中接触最多的内容是卷积、卷积神经网络等…因此,本篇内容将从卷积入手,梳理理解:卷积的意义、卷积在图像处理中的作用以及卷积神经网络的概念,最后利用pytorch搭建一…

详解互联网基石之HTTPS

一、HTTPS简介 HTTPS(HyperText Transfer Protocol Secure)是一种用于安全通信的网络传输协议。它是HTTP的加密版本,通过使用TLS(Transport Layer Security)或其前身SSL(Secure Sockets Layer)来…

Leetcode3185. 构成整天的下标对数目 II

Every day a Leetcode 题目来源&#xff1a;3185. 构成整天的下标对数目 II 解法1&#xff1a;哈希 本质思路类同经典的“两数之和”。枚举右&#xff0c;用哈希表维护左。 枚举 j&#xff0c;并维护 cnt[x] 表示所有满足 i < j 的下标 i 中&#xff0c;有几个 hours[i]…

服务器硬件的基础知识

引言 服务器是现代数据中心和企业IT基础设施的核心组成部分。了解服务器硬件的基本知识不仅有助于选择和维护服务器&#xff0c;还能提高系统性能和可靠性。本文将详细介绍服务器硬件的各个方面&#xff0c;包括处理器、内存、存储、网络、散热和电源等&#xff0c;帮助读者全…

数据库系统概论、数据管理的三种方式

一、数据库系统概论 数据库系统管理数据的的方式是用数据库来组织和存储数据&#xff0c;利用数据库管理系统&#xff0c;在操作系统的支持下&#xff0c;统一管理和控制存储在磁盘上的数据库&#xff0c;各类用户通过不同的方式&#xff0c;借助于数据库管理系统&#xff08;…

Android简单登录界面布局设计

<ImageView android:id“id/yxlg” android:layout_marginTop“12dp” android:layout_marginLeft“80dp” android:layout_width“30dp” android:layout_height“30dp” android:background“drawable/net” /> <TextView android:paddingTop“5dp” andr…

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…

fastapi+vue3+primeflex前后端分离开发项目第一个程序

安装axios axios是用来请求后端接口的。 https://www.axios-http.cn/docs/intro pnpm 是一个前端的包管理工具&#xff0c;当我们需要给前端项目添加新的依赖的时候&#xff0c;就可以使用pnpm install 命令进行安装。 pnpm install axios安装 primeflex primeflex是一个cs…

MySQL之复制(十二)

复制 复制的问题和解决方案 未定义的服务器ID 如果没有在my.cnf里面定义服务器ID,可以通过CHANGE MASTER TO 来设置备库&#xff0c;但却无法启动复制。 mysql>START SLAVE; ERROR 1200(HY000):The server is not configured as slave;fix in config file or with CHANG…

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…

2024各省自考报名时间汇总❗所需材料❗

天津&#xff1a;5月27日-5月31日&#xff08;已结束&#xff09; 河北&#xff1a;6月10日~6月15日&#xff08;已结束&#xff09; 贵州&#xff1a;6月17日~26日 山东&#xff1a;6月18日~6月24日 江西&#xff1a;6月26日-7月7日&#xff08;6月下旬&#xff09; 浙江&…

pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件pytest-xdist&#xff0c;主要是提供并行测试、分布式测试、循环测试等功能&#xff0c;可以加快测试速度。 pytest-xdist官方显示没有严格的python和pytest版本限制。 pytest-xdist安装 使用pip命令安装: pip…

如何解决代码中if…else-过多的问题,建议收藏

逻辑表达模式固定的 if…else 实现与示例 if (param.equals(value1)) { doAction1(someParams); } else if (param.equals(value2)) { doAction2(someParams); } else if (param.equals(value3)) { doAction3(someParams); } // … 可重构为 Map<?, Function<?>…

电脑有哪些重复文件删除工具?分享四个一键去重软件!

重复文件删除工具有哪些&#xff0c;哪个重复文件删除工具好用&#xff1f;日常工作生活中&#xff0c;如果需要对重复文件进行查找和删除&#xff0c;我们可以借助专业的金舟重复删除工具、czkawka、Wise Duplicate Finder和DiskBoss四种方法解决&#xff0c;具体操作如下&…

2024年6月大众点评成都餐饮店铺POI分析22万家

2024年6月大众点评成都餐饮店铺POI共有221002家 店铺POI点位示例&#xff1a; 店铺id CACuqlcUQApLA7Ki 店铺名称 峨眉山豆腐脑(百吉街店) 十分制服务评分 7.3 十分制环境评分 7.5 十分制划算评分 7.1 人均价格 18 评价数量 38 店铺地址 百吉街86号1层 大类 美食 中类…

MySOL数据库基础

一、数据库简介 1.数据库的特点 存储大量信息&#xff0c;方便检索和访问。保持数据的完整性&#xff0c;一致性&#xff0c;降低数据冗余。应用共享和安全。 2.数据库的基本概念 数据&#xff1a;描述事物的符号记录&#xff0c;包括数字&#xff0c;文字&#xff0c;图形…

问题-小技巧-python-一键装第三方库

有网但是没第三方环境的地方&#xff0c;能快速装上环境 代码&#xff1a; import osprint(开始安装模块...) #os.system(pip install &#xff08;在这敲上你需要装的库&#xff09; -i https://pypi.tuna.tsinghua.edu.cn/simple) os.system(pip install requests -i https…

密码没有未来

无密码认证的好处 引领无密码未来之路万能钥匙 英国通过具体法律打击可预测密码 强密码是抵御网络威胁的第一道防线 如何破解价值百万美元的加密钱包密码 复制此链接到微信打开阅读全部以发布文章 新 GPU 在不到一小时内打开了网络上 59% 的密码。 现代计算机的能力不断增…