Nginx負(fù)載均衡中的Memcached緩存模塊
Nginx 的 ngx_http_memcached_module 模塊本身并沒(méi)有提供緩存功能,它只是一個(gè)將用戶請(qǐng)求轉(zhuǎn)發(fā)到 Memcached 服務(wù)器的代理模塊。
在以 Memcached 服務(wù)器為緩存應(yīng)用的方案中,Memcached 作為內(nèi)容緩存的存儲(chǔ)服務(wù)器,用戶通過(guò) URL 為 Memcached 的 key 將 Web 請(qǐng)求數(shù)據(jù)緩存到 Memcached 服務(wù)器中,在客戶端發(fā)起請(qǐng)求時(shí),Nginx 通過(guò)一致的 URL 為 key,快速地從 Memcached 服務(wù)器中將緩存的內(nèi)容作為用戶的請(qǐng)求響應(yīng)數(shù)據(jù)返回給客戶端。
Memcached 是一個(gè)開(kāi)源、高性能的內(nèi)存對(duì)象緩存系統(tǒng),使用 Memcached 服務(wù)器作為緩存存儲(chǔ)服務(wù)器,充分利用了 Memcached 的高效緩存功能,減少了 Nginx 服務(wù)器磁盤 I/O 的操作,也可以通過(guò) upstream 指令對(duì)多臺(tái) Memcached 做分布式集群負(fù)載,以便整體提升 Nginx 緩存服務(wù)器的性能。
Memcached 緩存模塊配置指令如下表所示:
| 指令名稱 | 指令值格式 | 默認(rèn)值 | 指令說(shuō)明 |
|---|---|---|---|
| memcached_bind | address[transparent] 或 off | -- | 設(shè)置從指定的本地 IP 地址及端口與 Memcached 服務(wù)器建立連接,指令值可以是變量。指令值參數(shù)為 transparent 時(shí),允許將客戶端的真實(shí) IP 透?jìng)鹘o被代理服務(wù)器,并以客戶端真實(shí) IP 為訪問(wèn)被代理服務(wù)器的源 IP,指令值為 off 時(shí),則取消上一層指令域同名指令的配置 |
| memcached_buffer_size | size | 4k 或 8k | 設(shè)置用于讀取 Memcached 服務(wù)器,讀取響應(yīng)數(shù)據(jù)緩沖區(qū)的大小,當(dāng) Nginx 收到響應(yīng)數(shù)據(jù)后,將同步傳遞給客戶端 |
| memcached_connect_timeout | time | 60s | Nginx 與 Memcached 服務(wù)器建立連接的超時(shí)時(shí)間,通常不應(yīng)超過(guò) 75s |
| memcached_force_ranges | on 或 off | off | 啟用來(lái)自 Memcached 服務(wù)器的緩存和未緩存響應(yīng)的 byte-range 請(qǐng)求支持,而不考慮這些響應(yīng)頭中的 Accept-Ranges 字段 |
| memcached_gzip_flag | flag | -- | 啟用對(duì) Memcached 服務(wù)器緩存數(shù)據(jù) fags 的測(cè)試,flags 為客戶端寫(xiě)入緩存時(shí)的自定義標(biāo)記,此處用以判斷緩存數(shù)據(jù)是否被壓縮存儲(chǔ),如果數(shù)據(jù)被壓縮存儲(chǔ),則將響應(yīng)頭字段 Content-Encoding 設(shè)置為 gzip |
| memcached_next_upstream | error、timeout、 invalid_header、 not found 或 off... | error timeout | 當(dāng)出現(xiàn)指令值中指定的條件時(shí),將未返回響應(yīng)的客戶請(qǐng)求傳遞給 upstream 中的下一個(gè)服務(wù)器 |
| memcached_next_upstream_timeout | time | 0 | 設(shè)置將符合條件的客戶端請(qǐng)求傳遞給 upstream 中下一個(gè)服務(wù)器的超時(shí)時(shí)間。0 為不做超時(shí)限制,遍歷完所有上游服務(wù)器組中的服務(wù)器為止 |
| memcached_next_upstream_tries | number | 0 | 設(shè)置符合條件的客戶端請(qǐng)求傳遞給upstream中下一個(gè)服務(wù)器的嘗試次數(shù),包括第一次失敗的次數(shù)。0為不做嘗試次數(shù)限制,遍歷完所有上游服務(wù)器組中的服務(wù)器為止 |
| memcached_pass | address | -- | 設(shè)置 Memcached 服務(wù)器的地址及端口,地址可以是 IP、域名或 UNIX 套接字 |
| memcached_read_timeout | time | 60s | 在連續(xù)兩個(gè)從 Memcached 服務(wù)器接收數(shù)據(jù)的讀操作之間的間隔時(shí)間超過(guò)設(shè)置的時(shí)間時(shí),將關(guān)閉連接 |
| memcached_send_timeout | time | 60s | 在連續(xù)兩個(gè)發(fā)送到 Memcached 服務(wù)器的寫(xiě)操作之間的間隔時(shí)間超過(guò)設(shè)置的時(shí)間時(shí),將關(guān)閉連接 |
| memcached_socket_keepalive | on 或 off | off | 設(shè)置 Nginx 與 Memcached 服務(wù)器的 TCP keepalive 行為的心跳檢測(cè)機(jī)制,默認(rèn)使用操作系統(tǒng)的 socket 配置,若指令值為 on,則開(kāi)啟 SO_KEEPALIVE 選項(xiàng)進(jìn)行心跳檢測(cè) |
配置樣例如下:
server {
location / {
set $memcached_key "$uri?$args"; # 設(shè)置Memcached緩存key
memcached_pass 127.0.0.1:11211; # 設(shè)置被代理Memcached地址
error_page 404 502 504 = @fallback; # 返回狀態(tài)碼404、502、504時(shí)跳入內(nèi)部請(qǐng)求
}
location @fallback {
proxy_pass http://backend; # 將請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器
}
}為了提高動(dòng)態(tài)網(wǎng)站的響應(yīng)速度,有時(shí)會(huì)采用將動(dòng)態(tài)網(wǎng)站轉(zhuǎn)換成靜態(tài)化文件的方式進(jìn)行優(yōu)化,而相對(duì)于磁盤存儲(chǔ),使用 Memcached 進(jìn)行靜態(tài)文件的存儲(chǔ)則可以進(jìn)一步提升網(wǎng)站的響應(yīng)速度。Memcached 是基于內(nèi)存的高性能對(duì)象緩存系統(tǒng),因?yàn)榇鎯?chǔ)數(shù)據(jù)都是在內(nèi)存中的,所以減少了系統(tǒng)的 I/O 操作,從而避免了因磁盤性能帶來(lái)的影響。
使用 Memcached 作為緩存存儲(chǔ)服務(wù)器,可以直接利用 Memcached 緩存的過(guò)期機(jī)制實(shí)現(xiàn)緩存的自動(dòng)化過(guò)期管理,且利用 Nginx 的負(fù)載機(jī)制和 Memcached 分布式特性,可以非常方便地橫向擴(kuò)展,以提升處理性能。Memcached 緩存應(yīng)用場(chǎng)景如下圖所示。

Web 服務(wù)器將動(dòng)態(tài)文件以請(qǐng)求 URI 作為 Memcached 的 key 初始化到 Memcached 服務(wù)器中;Nginx 將用戶請(qǐng)求轉(zhuǎn)發(fā)到 Memcached 服務(wù)器中,并將以請(qǐng)求 URI 作為 Memcached key 的數(shù)據(jù)返回給用戶;當(dāng) Memcached 的請(qǐng)求失敗后,則將請(qǐng)求轉(zhuǎn)發(fā)給后端 Web 服務(wù)器的接口動(dòng)態(tài)生成對(duì)應(yīng)的靜態(tài)文件,返回響應(yīng)數(shù)據(jù)并更新 Memcached。
Memcached 的安裝非常簡(jiǎn)單,在 CentOS 7 系統(tǒng)下使用 yum 安裝即可,安裝方法如下:
yum -y install memcached cat /etc/sysconfig/memcached PORT="11211" # 端口 USER="memcached" MAXCONN="1024" # 最大連接數(shù) CACHESIZE="64" # 使用內(nèi)存大小為64M OPTIONS="" systemctl start memcached
Nginx 服務(wù)器配置樣例如下:
upstream backend {
server 192.168.2.145:8190; # 后端PHP服務(wù)器IP
}
upstream memcached {
hash $host$request_uri consistent; # 一致性hash
server 192.168.2.145:11211; # Memcached服務(wù)器IP
server 192.168.2.109:11211; # Memcached服務(wù)器IP
}
server {
listen 8181;
access_log logs/mem_access.log;
set $memcached_key $host$request_uri; # 設(shè)置Memcached的key
location / {
memcached_connect_timeout 5s; # 與Memcached建立連接超時(shí)時(shí)間為5s
memcached_read_timeout 2s; # 連續(xù)兩次讀的超時(shí)時(shí)間為2s
memcached_send_timeout 2s; # 連續(xù)兩次寫(xiě)的超時(shí)時(shí)間為2s
memcached_pass memcached; # 代理到Memcached集群
add_header X-Cache-Satus HIT; # 顯示緩存命中狀態(tài)
add_header Content-Type 'text/html; charset=utf-8'; # 強(qiáng)制響應(yīng)數(shù)據(jù)格式為html
}
error_page 404 502 504 = @fallback;
location @fallback {
proxy_set_header X-Memcached-Key $memcached_key; # 將memecached key傳遞
# 給PHP服務(wù)器
proxy_pass http://backend; # PHP服務(wù)器
}
}到此這篇關(guān)于Nginx負(fù)載均衡之Memcached緩存模塊的文章就介紹到這了,更多相關(guān)Nginx Memcached緩存模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx 負(fù)載均衡實(shí)現(xiàn)上游服務(wù)健康檢查功能
- Nginx實(shí)現(xiàn)負(fù)載均衡的配置步驟
- nginx tcp負(fù)載均衡的具體實(shí)現(xiàn)
- Nginx七層負(fù)載均衡的實(shí)現(xiàn)示例
- Nginx四層負(fù)載均衡的實(shí)現(xiàn)示例
- Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的教程詳解
- Nginx 反向代理與負(fù)載均衡運(yùn)行小結(jié)
- Nginx實(shí)現(xiàn)負(fù)載均衡和反向代理的方法
- nacos集群搭建Nginx負(fù)載均衡的操作詳解
- nginx+lua+redis實(shí)現(xiàn)降級(jí)的示例代碼
相關(guān)文章
詳解nginx 代理多個(gè)服務(wù)器(多個(gè)server方式)
本篇文章主要介紹了詳解nginx 代理多個(gè)服務(wù)器(多個(gè)server方式),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
prometheus監(jiān)控nginx的實(shí)現(xiàn)
這篇文章主要介紹了prometheus監(jiān)控nginx的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Nginx中定義404頁(yè)面并且返回404狀態(tài)碼的正確方法
這篇文章主要介紹了Nginx中定義404頁(yè)面并且返回404狀態(tài)碼的正確方法,本文在一次AJAX調(diào)用時(shí)發(fā)現(xiàn)了這個(gè)問(wèn)題,服務(wù)器返回了一個(gè)404頁(yè)頁(yè)但沒(méi)有返回404狀態(tài)碼,需要的朋友可以參考下2014-08-08
Nginx作為反向代理時(shí)傳遞客戶端IP的設(shè)置方法
因?yàn)閚ginx的優(yōu)越性,現(xiàn)在越來(lái)越多的用戶在生產(chǎn)環(huán)境中使用nginx作為前端,不管nginx在前端是做負(fù)載均衡還是只做簡(jiǎn)單的反向代理,都需要把日志轉(zhuǎn)發(fā)到后端real server,以方便我們檢查程序的各種故障2014-08-08
nginx反向代理下的長(zhǎng)連接實(shí)現(xiàn)
本文主要介紹了Nginx反向代理下的長(zhǎng)連接實(shí)現(xiàn),包括客戶端到Nginx和Nginx到后端服務(wù)器之間的長(zhǎng)連接設(shè)置,具有一定的參考價(jià)值,感興趣的可以了解一下2024-11-11
Nginx HTTP 配置指令的實(shí)現(xiàn)示例
本文主要介紹了Nginx的配置文件結(jié)構(gòu)和HTTP配置指令,涵蓋了從請(qǐng)求處理到安全、日志、負(fù)載均衡、緩存等各個(gè)方面,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解
這篇文章主要為大家介紹了nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Nginx 訪問(wèn) /root/下 403 Forbidden問(wèn)題解決
在使用Nginx作為Web服務(wù)器時(shí),可能會(huì)遇到403 Forbidden錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05

