用nginx做負載均衡時,同一個IP訪問同一個頁面會被分配到不同的服務器上,如果session不同步的話,就會出現很多問題,比如說最常見的登錄狀態。
再者Nginx連接Memcached集群時,Nignx的請求從memcached服務器中根據key獲得了value則直接返回value,如果沒有獲得到value則去MySQL中查詢再返回。
location / {
set $memcached_key "$request_uri"; #設置請求memcached服務器的key
memcached_pass 127.0.0.1:11211;
error_page 404 502 504 /callback.do; #設置回調函數查詢數據庫
}
多台memcached服務器,如何保持Nginx和Java與memcached同步?
session是存放在服務器上的,session共享問題怎么解決?
解決方案
1、參閱:http://blog.csdn.net/xluren/article/details/16951247
2、使用第三方模塊ngx_http_consistent_hash通過一致性哈希算法來選擇合適的后端節點。
Nginx的ngx_http_consistent_hash模塊的官網使用文檔:https://www.nginx.com/resources/wiki/modules/consistent_hash/
下載地址 https://github.com/replay/ngx_http_consistent_hash
下載:
解壓縮:
編譯安裝到Nginx:
關掉Nginx
Nginx.conf配置:
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream servers {
consistent_hash $request_uri;
server 192.168.1.86:80;
server 192.168.1.88:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://servers;
}
}
}