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

Web 服務器將動態(tài)文件以請求 URI 作為 Memcached 的 key 初始化到 Memcached 服務器中;Nginx 將用戶請求轉(zhuǎn)發(fā)到 Memcached 服務器中,并將以請求 URI 作為 Memcached key 的數(shù)據(jù)返回給用戶;當 Memcached 的請求失敗后,則將請求轉(zhuǎn)發(fā)給后端 Web 服務器的接口動態(tài)生成對應的靜態(tài)文件,返回響應數(shù)據(jù)并更新 Memcached。
Memcached 的安裝非常簡單,在 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 服務器配置樣例如下:
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; # 設(shè)置Memcached的key
location / {
memcached_connect_timeout 5s; # 與Memcached建立連接超時時間為5s
memcached_read_timeout 2s; # 連續(xù)兩次讀的超時時間為2s
memcached_send_timeout 2s; # 連續(xù)兩次寫的超時時間為2s
memcached_pass memcached; # 代理到Memcached集群
add_header X-Cache-Satus HIT; # 顯示緩存命中狀態(tài)
add_header Content-Type 'text/html; charset=utf-8'; # 強制響應數(shù)據(jù)格式為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服務器
}
}到此這篇關(guān)于Nginx負載均衡之Memcached緩存模塊的文章就介紹到這了,更多相關(guān)Nginx Memcached緩存模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項目整合FastDFS+Nginx實現(xiàn)圖片上傳功能
FastDFS是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題,對SpringBoot整合FastDFS實現(xiàn)圖片上傳功能,感興趣的朋友一起看看吧2022-05-05
Nginx?Gunicorn?flask項目部署思路分析詳解
這篇文章主要為大家介紹了Nginx?Gunicorn?flask項目部署思路分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點相像,都能實現(xiàn)跳轉(zhuǎn),本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-08-08
nginx版本號隱藏(附405 not allowed解決辦法)
版本號泄露時攻擊者會利用相應軟件版本的當前漏洞,進行有效的相應攻擊,本文主要介紹了nginx版本號隱藏,具有一定的參考價值,感興趣的可以了解一下2023-10-10
Nginx worker_connections配置太低導致500錯誤案例
這篇文章主要介紹了Nginx worker_connections配置太低導致500錯誤案例,需要的朋友可以參考下2015-04-04
通過Nginx+Tomcat+Redis實現(xiàn)持久會話
這篇文章主要介紹了通過Nginx+Tomcat+Redis實現(xiàn)持久會話的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11

