windows+nginx+iis+redis+Task.MainForm構建分散式架構 之 (nginx+iis構建服務集群)

来源:http://www.cnblogs.com/wangrudong003/archive/2016/09/23/5901326.html
-Advertisement-
Play Games

本次要分享的是利用windows+nginx+iis+redis+Task.MainForm組建分散式架構,由標題就能看出此內容不是一篇分享文章能說完的,所以我打算分幾篇分享文章來講解,一步一步實現分散式架構;下麵將先給出整個架構的核心節點簡介,希望各位多多點贊: . 架構設計圖展示 . nginx ...


本次要分享的是利用windows+nginx+iis+redis+Task.MainForm組建分散式架構,由標題就能看出此內容不是一篇分享文章能說完的,所以我打算分幾篇分享文章來講解,一步一步實現分散式架構;下麵將先給出整個架構的核心節點簡介,希望各位多多點贊:

 

. 架構設計圖展示

. nginx+iis構建服務集群

. redis存儲分散式共用的session及共用session運作流程

. redis主從配置及Sentinel管理多個Redis集群

. 定時框架Task.MainForm提供數據給redis集群儲存

 

以上是整個架構的我認為核心的部分,其中沒有包含有資料庫方面的設計(請忽略),下麵先發張架構設計圖:

以上是個人的看法,下麵來正式分享今天的文章吧(nginx+iis構建服務集群):

. nginx常用基礎配置總結

. 用nginx搭建靜態文件緩存服務

. nginx+iis構建服務集群

 

下麵一步一個腳印的來分享:

. nginx常用基礎配置總結

首先,我們需要從網上下載nginx服務文件,具體windows系統下用何版本請網上搜索,我這裡用的版本是nginx-1.10.1;下載下來後目錄結構是這樣的:

我們需要瞭解並且操作的配置文件是conf文件夾下麵的nginx.conf文件,該目錄下的其他文件一般採用預設的就行;打開文件不看#號註釋的行;events節點:

events節點:

worker_connections:預設值1024,代表nginx服務地址的最大連接數1024;

http節點

include:mime.types其實對應的是nginx.conf同級目錄下的mime.types文件,裡面是能訪問的mime類型

default_type:application/octet-stream預設類型

keepalive_timeout:連接超時時間,單位秒

server節點:

listen:nginx監聽的埠號

server_name:服務名稱

location:路由設置(支持正則表達式);其中常用到的節點有

  proxy_connect_timeout:nginx跟後端伺服器連接超時時間(代理連接超時)

  proxy_pass:代理地址名稱

  proxy_set_header:設置讓服務端獲取真實的Ip,埠等;對應的值有(Host,X-Real-IP,X-Forwarded-For)

upstream節點:

設定負載均衡的伺服器列表

設置代理地址名稱(和上面的proxy_pass對應)

設置負載均衡分配規則,常用規則有:

  輪詢:挨個輪詢訪問(預設)

  ip_hash:訪問一次後固定訪問一個後端伺服器,可以解決session的問題

  fair:後端伺服器的響應時間來分配請求,響應時間短的優先分配

  weight:權重,值越大訪問量越多

proxy_temp_path節點:代理臨時文件夾路徑

proxy_cache_path節點:代理緩存文件夾路徑(緩存文件都在這裡)

以上介紹的信息基本能完成一個負載均衡常用搭建了,其他的更詳細的節點請參考官網

 

. 用nginx搭建靜態文件緩存服務

通常分散式架構的一些css,js,圖片文件都是被緩存起來的,這樣提供高效的載入速度;由文章開頭時發佈的一張架構圖可以看到,用戶A要真實訪問到服務集群需要經過nginx這道伺服器轉發,這樣需要跳轉一次才能獲取到css靜態文件明顯比直接在nginx伺服器就返回這些文件的速度慢;所以這種情況下就有了把靜態資源緩存到nginx服務上的需求了;下麵先來看下nginx配置文件需要的配置信息:

       #負載均衡的伺服器列表
    upstream shenniu.test.com{
    
        server 127.0.0.1:4041;
    }
    
    ##cache##
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path D:/E/nginx-1.10.1/home/temp_dir;
    proxy_cache_path D:/E/nginx-1.10.1/home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
    ##end##

註意這裡upstream節點後面的shenniu.test.com功能變數名稱在後面會使用,節點裡面的server對應ip:埠如:server 127.0.0.1:4041(這個是真實的站點項目的ip+埠),然後需要設置保存緩存文件的路徑:proxy_cache_path和proxy_temp_path

然後server節點裡面listen監聽3031埠,server_name:shenniu.test.com,增加靜態資源路由配置

location ~ .*\.(gif|jpg|png|css|js|flv|ico|swf)(.*) {
             #proxy_pass http://shenniu.file.com;
             proxy_pass http://shenniu.test.com;   
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache cache_one;
             proxy_cache_valid 200 302 1h;
             proxy_cache_valid 301 1d;
             proxy_cache_valid any 1m;
             expires 30d;    #緩存時長,這裡是30天
       }

註意裡面反向代理的proxy_pass 對應的值http://+上面upstream節點的shenniu.test.com,所以就是proxy_pass http://shenniu.test.com這個地址就是訪問代理的地址;直接shenniu.test.com功能變數名稱,我們需要在本機的這個目錄結構C:\Windows\System32\drivers\etc中找到host文件,然後裡面增加如:127.0.0.1 shenniu.test.com一樣代碼,這樣我們的功能變數名稱就可以在本機的瀏覽器中訪問了;增加頁面的路由配置:

location ~ .*(\/|\.(html|htm))(.*) {
            proxy_connect_timeout 90;  #nginx跟後端伺服器連接超時時間(代理連接超時)
            proxy_pass http://shenniu.test.com;
            proxy_redirect default;
            
            #服務端獲取真實的Ip,埠等
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
        }

然後,我們還需要用iis發佈一個項目,名稱為ShenNiu.Stage01,對應的ip和埠是上面upstream節點裡面的數據:

然後,在瀏覽器訪問分別用ip和功能變數名稱訪問效果:

好這個是本地host配置功能變數名稱訪問,但是這還沒有用到nginx,因為咋們配置的nginx反向代理的埠是server節點裡面listen監聽3031埠,所以應該訪問的是http://shenniu.test.com:3031/user/login地址,此時在瀏覽器是訪問不了該埠的,還需要咋們來啟動nginx服務:

好,現在使用nginx配置反向代理並第一次訪問代理對應的站點程式,由於咋們配置的緩存文件地址在D:/E/nginx-1.10.1/home/cache目錄,所以查看文件夾:

這裡面的就是緩存文件所在的位置,此處問生成的緩存文件夾;再來咋們第二次在瀏覽器中訪問網站,並F12查看對應的js,css等文件:

此時文件的來源Server對應的是nginx服務,沒錯現在訪問的就是nginx緩存的文件了

 

. nginx+iis構建服務集群

上面的搭建靜態緩存服務其實大致都涉及到了nginx用來做分發的功能,下麵我們來快速在剛纔的基礎增加一些節點信息,搭建站點服務集群;首先,我們修改upstream節點,內容信息增加如:

#負載均衡的伺服器列表
    upstream shenniu.test.com{
    
        server 127.0.0.1:4041;
        server 127.0.0.1:4040;
    }

只需要增加這段代碼,因為上面靜態文件服務的時候已經增加了頁面的路由設置(可以往上看);為了演示分散式架構,我們還需要在iis中在配置個和ShenNiu.Stage01(對應的ip+埠:127.0.0.1:4041)站點一樣程式的站點ShenNiu.Stage02(對應的ip+埠:127.0.0.1:4040),但是把登陸頁的title分別標註為"系統01","系統02"這樣來區分訪問到的是那個站點,配置好後下麵我們來再重新載入nginx配置:

然後,訪問反向代理地址http://shenniu.test.com:3031/user/login訪問下頁面看到的效果如:

此時訪問同樣的功能變數名稱,得出的第一個頁面title是"系統01",第二個是"系統02",可以看出訪問的站點分別對應的是127.0.0.1:4041和127.0.0.1:4040,也就是咋們配置的iis中的ShenNiu.Stage01和ShenNiu.Stage02,這樣nginx做分發站點就成功了,站點服務集群就這樣創建成功了。

本篇分享的內容只是nginx+iis做一個簡單的集群,後面一篇的分享文章將講解redis存儲分散式共用的session及共用session運作流程,敬請期待也謝謝多多支持點贊。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 腳本原子化設計理念 運維的目標:運維當中重覆著大量相同相似的工作,機器規模數量一上來,則需要考慮自動化運維,儘量做到第一次人工處理,後面都依賴腳本或者工具和WEB化來完成。這樣編寫shell、python腳本變得非常重要,不僅可以替代很多重覆工作,而且提高效率和減少人工失誤率,我建議即使公司只有10 ...
  • win7下安裝個linux虛擬機,學習下非常好。 但是每次使用linux的時候,都是打開virtualBox-->啟動安裝的linux系統-->再用遠程桌面(SSH等)連接 每次手動打開比較麻煩,而且linux虛擬機也有視窗,比較冗雜。如果能開機自啟,並且後臺運行linux虛擬機(沒有可見視窗),那 ...
  • How To Install Zabbix Server On CentOS 7 By SK How To Install Zabbix Server On CentOS 7 By SK By SK Share on Facebook Tweet on Twitter Share on Facebo ...
  • 需求及環境 學校的教務管理系統需要內網才能登錄,當我不在學校的時候使用外網無法訪問。於是打算把樹莓派部署在寢室並搭建一個VPN伺服器以便我連接以訪問教務管理系統。 樹莓派通過有線連接到一個路由器,路由器撥號訪問網路。 必要軟體安裝 我們需要用到 `pptpd`這2個軟體 配置pptpd 設置ip 編 ...
  • 說說序列化 【博主】反骨仔 【原文地址】http://www.cnblogs.com/liqingwen/p/5902005.html 序 目錄 序列化 保存對象數據 序列化 保存對象數據 一、序列化 序列化是將對象處理為位元組流以存儲對象或傳輸到記憶體、資料庫或文件。其主要目的是保存對象的狀態,以便可 ...
  • 最近由於項目部署時需要更靈活的控製程序安裝的流程以及自定義安裝行為,特意研究了一下VS程式打包,把解決辦法和大家分享一下。 以VS2010為例: 這是一個已經設置好最基本的Visual Studio Installer解決方案界面,以此生成的安裝包,將會是一個最基本的安裝功能。程式打包的詳細教程網上 ...
  • 一、測試倉儲層、業務層是否能實現對資料庫表的操作 1、創建IsysUserInfoRepository介面來繼承IBaseRepository父介面 1 namespace Wchl.WMBlog.IRepository 2 { 3 public partial interface IsysUser ...
  • 內置對象: Response對象:響應請求,Response對象用於動態響應客戶端請示,控制發送給用戶的信息,並將動態生成響應。 Response.Write("<script>alert('添加成功!')</script>"); 彈出提示窗,顯示添加成功 Response.Redirect("De ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...