一、關於CentOS系統介紹
CentOS(Community Enterprise Operating System,中文意思是:社群企業作業系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放原始碼規定釋出的原始碼所編譯而成。基於Red Hat持續升級,和對已知BUG修復,所以CentOS更多用於搭建大型企業級伺服器。目前較新版本為7.0,本文使用CentOS7 64bit進行搭建系統負載均衡。
二、安裝VMWare
VMWare (Virtual Machine ware)是一個“虛擬PC”軟體公司.它的產品可以使你在一臺機器上同時執行二個或更多Windows、DOS、LINUX系統。與“多啟動”系統相比,VMWare採用了完全不同的概念。多啟動系統在一個時刻只能執行一個系統,在系統切換時需要重新啟動機器。本文使用VMWare WorkStation12安裝CentOS作業系統。詳細安裝步驟參考:檢視, 百度軟體下載點選。
三、安裝CentOS系統
首先需要下載CentOS安裝包,下載IOS格式,本文使用CentOS7 64bit 版本,下載
詳細安裝步驟請點選檢視
注意事項:
1、分割槽的時候,選擇EXT4格式,boot分割槽為400m,/分割槽為8G,/home分割槽為7G,var分割槽為6G,swap分割槽為2G
2、使用者和組ID,都設為 1000
3、安裝完成重啟後提示License的,輸入:1、2、r、yes 完成進入成功進入系統
4、ctrl+alt 滑鼠切回本機電腦,不在虛擬機器裡
四、安裝Nginx和配置
1、Nginx介紹
Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。由俄羅斯的工程師Igor Sysoev研發,供俄國大型的入口網站Rambler使用。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同型別的網頁伺服器中表現較好。
2、安裝部署
(1)新增Nginx倉儲,新增 epel repository
1 |
sudo yum install epel-release |
(2)檢查是否已安裝過nginx
1 |
find -name nginx |
(3)如果有安裝則刪除
1 |
yum remove nginx |
(4)安裝nginx
1 |
sudo yum install nginx |
(5)啟動nginx
1 2 |
sudo systemctl start nginx sudo systemctl enable nginx #可用 |
(6)將nginx 設定為啟動系統自動啟動nginx
1 |
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local |
(7)檢視本機IP,為了後續配置nginx.conf所用
1 |
ifconfig |
(8)修改nginx.conf配置檔案
1 2 |
cd /etc/nginx/ #定位到nginx安裝目錄 vim nginx.conf #通過vim開啟nginx.conf配置檔案進行配置 |
(9)主要配置節點,192.168.119.1:8081 和 192.168.119.1:8082 分別部署在 IIS7的兩個ASP.NET MVC 開發的站點(在另一臺電腦),設計軟體架構解決方案後續介紹。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
upstream 192.168.119.128{ server 192.168.119.1:8081; server 192.168.119.1:8082; } server{ listen 80; server_name 192.168.119.128; location /{ proxy_pass http://192.168.119.128; } } |
(10)重啟nginx服務
1 |
service nginx restart |
以上記錄在CentOS7作業系統搭建Nginx負載均衡解決方案記錄。後續簡介通過Keepalived搭建Nginx負載高可用解決方案。
接下來介紹通過Nginx將請求分發到各web應用處理服務。
一、Web應用開發
1、asp.net mvc5開發
(1)新建一個MVC5工程,新建一個Controller,在Index方法實現將當前時間儲存到Session[“mysession”],並寫Cookies[“mycookies”]儲存主機名和當前時間。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public ActionResult Index() { if (this.HttpContext.Session["mysession"] == null) { this.HttpContext.Session["mysession"] = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } this.HttpContext.Response.Cookies.Add(new HttpCookie("mycookies") { Expires = DateTime.Now.AddDays(1), Value = HttpContext.Server.MachineName + "||" + DateTime.Now.ToString() }); return View(); } |
(2)在Controller中新增第二個方法GetSession,顯示Session和Cookies的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public ActionResult GetSession() { if (this.HttpContext.Session["mysession"] != null) { ViewBag.DD = this.HttpContext.Session["mysession"].ToString(); ViewBag.SCode = this.HttpContext.Session["mysession"].GetHashCode().ToString(); ViewBag.SID = this.HttpContext.Session.SessionID; } ViewBag.CVAL = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Value; ViewBag.CID = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Name; ViewBag.CDO = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Domain; return View(); } |
(3)將session和cookies資訊在頁面顯示,GetSession檢視程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@{ ViewBag.Title = "GetSession"; } 站點:A -- GetSession 站點:A Session Value: @ViewBag.DD Session SCode: @ViewBag.SCode Session ID: @ViewBag.SID Cookies ID: @ViewBag.CID Cookies Values: @ViewBag.CVAL Cookies Values: @ViewBag.CDO |
以上實現session和cookies讀寫,為了驗證負載均衡下,每次請求處理是否保持一致,接下來重要內容,做負載均衡如何如何保持session一致,對於asp.net技術session原理此處不做介紹,網上搜尋下大把。
2、Session共享技術
.Net平臺對支援幾種session儲存模式:
(1)InProc 模式
session儲存於當前站點在同一個程式內,修改web.config或者bin中檔案更新,會導致session丟失。此模式為預設模式。
(2)aspnet state 模式
aspnet state是將session儲存在狀態服務中,需要啟動ASP.NET State Service,能看到程式aspnet_state.exe。還需要在web.config配置此模式。
(3)SQLServer 模式
此模式需要SQL Server配置相關資訊,啟動代理服務、資料庫賬號及表,並將web.config指向資料庫。
(4)第三方擴充套件 模式
本框架採用此模式,將session儲存到其他儲存,比如:Memcached、redis快取中,達到共享session的目的。可以通過實現ASP.NET中的SessionStateStoreProviderBase這個抽象類擴充套件。本系統採用將session儲存在redis快取中,通過引入 RedisSessionStateProvider元件。
1 |
Install-Package Microsoft.Web.RedisSessionStateProvider |
3、Nginx服務狀態情況
在centos終端輸入命令service nginx status 檢視情況,確保服務正常執行。
4、Web站點部署
部署兩個站點分別為:
站點A:埠為8081,
站點B:埠為8082,
二、功能效果展現
(1)瀏覽器訪問Index方法,http://192.168.119.128/demo,顯示如下:
(2)瀏覽器訪問GetSession方法,http://192.168.119.128/demo/getsession,顯示如下:
通過以上驗證,獲取到的session和cookies都是一致。