1. 程式人生 > >Nginx + Memcached 實現Session共享的負載均衡

Nginx + Memcached 實現Session共享的負載均衡

new 解決 class read 庫存 sta 簡單 登錄 dma

session共享

  我們在做站點的試試,通常需要保存用戶的一些基本信息,比如登錄就會用到Session;當使用Nginx做負載均衡的時候,用戶瀏覽站點的時候會被分配到不同的服務器上,此時如果登錄後Session就在不同發服務器上,A記住了用戶的登錄狀態,可是下一次用戶請求被分配到B去了怎麽辦?不可能讓用戶再登陸一次。所以要實現session共享。

方法

  1.ip_hash,這是Nginx的輪詢方法,用戶登錄站點時,就會一直在這臺服務器上就不存在Session的問題

    優點:不需要采用任何處理;

    缺點:當某臺服務器訪問的量大時,負載均衡就相當於沒用了

  2.用Memcached或者redis緩存的方式

  3.使用數據庫存儲,當某臺服務器訪問的量大時這個會對數據壓力大

  4.用Memcached或者redis + DB異步存儲;

  Nginx + Memcached 實現Session共享的負載均衡,我采用的第二種方法;

  自己搞一臺服務器,Nginx和Memcached 在一臺服務器;

  在服務器我部署了相同的兩個站點,代碼相同,一個端口為8080;另一個為8090;

 1    private static readonly IMemcachedManager _memcachedManager = new MemcachedManager();
 2 
 3
public ActionResult Index() 4 { 5 Random rd = new Random(); 6 Session["Session"] = rd.Next(1, 100000); 7 8 if (!_memcachedManager.IsExit("Session")) 9 { 10 _memcachedManager.SetValue("Session", Session["Session"
]); 11 } 12 13 ViewBag.Message = "當前站點為:8080;Session為:" + _memcachedManager.GetValue<string>("Session") + ""; 14 15 return View(); 16 }

運行結果:

技術分享

技術分享

  實現了我的目的,達到了均衡負載同時session共享的目的。

  Nginx除了Session共享的問題,還有一個共享資源的問題,比如上傳文件,這需要負載均衡需要解決的一個問題;

總結

  不管是安裝Nginx還是Memcached,在這個過程中,並沒有遇到比較深的坑,當然Memcached在網上也有很多的例子,一些基本的安裝都能夠很快的實現,部署起來相對於簡單畢竟只是一個Demo,不知道在實際的項目中將會是如何的,也會會有很大的不同;

  這只是自己學習的一個地方,當然這裏面還有更多東西需要去研究;

  共勉

 

Nginx + Memcached 實現Session共享的負載均衡