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ù)器磁盤(pán) 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ì)于磁盤(pán)存儲(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 操作,從而避免了因磁盤(pán)性能帶來(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)文章
SpringBoot項(xiàng)目整合FastDFS+Nginx實(shí)現(xiàn)圖片上傳功能
FastDFS是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng),它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件訪問(wèn)(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問(wèn)題,對(duì)SpringBoot整合FastDFS實(shí)現(xiàn)圖片上傳功能,感興趣的朋友一起看看吧2022-05-05Nginx如何為靜態(tài)文件添加訪問(wèn)權(quán)限
這篇文章主要介紹了Nginx如何為靜態(tài)文件添加訪問(wèn)權(quán)限問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Nginx?Gunicorn?flask項(xiàng)目部署思路分析詳解
這篇文章主要為大家介紹了Nginx?Gunicorn?flask項(xiàng)目部署思路分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點(diǎn)相像,都能實(shí)現(xiàn)跳轉(zhuǎn),本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08nginx版本號(hào)隱藏(附405 not allowed解決辦法)
版本號(hào)泄露時(shí)攻擊者會(huì)利用相應(yīng)軟件版本的當(dāng)前漏洞,進(jìn)行有效的相應(yīng)攻擊,本文主要介紹了nginx版本號(hào)隱藏,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10Nginx worker_connections配置太低導(dǎo)致500錯(cuò)誤案例
這篇文章主要介紹了Nginx worker_connections配置太低導(dǎo)致500錯(cuò)誤案例,需要的朋友可以參考下2015-04-04通過(guò)Nginx+Tomcat+Redis實(shí)現(xiàn)持久會(huì)話
這篇文章主要介紹了通過(guò)Nginx+Tomcat+Redis實(shí)現(xiàn)持久會(huì)話的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11