1. 程式人生 > >Linux技術--負載均衡配置

Linux技術--負載均衡配置

# Nginx

## 1. nginx可以做什麼?

1. 可針對靜態資源高速高併發訪問及快取。
2. 可使用反向代理加速,並且可進行資料快取。
3. 具有簡單負載均衡、節點健康檢查和容錯功能。
4. 支援遠端FastCGI服務的快取加速。
5. 支援FastCGI、Uwsgi、SCGI、Memcached Servers的加速和快取。
6. 支援SSL、TLS、SNI。
7. 具有模組化的架構:過濾器包括gzip壓縮、ranges支援、chunked響應、XSLT、SSI及影象縮放等功能。在SSI過濾器中,一個包含多個SSI的頁面,如果經由FastCGI或反向代理處理,可被並行處理。


###1.1 作為WEB服務的話支援 

1. 支援基於名字、埠及IP的多虛擬主機站點。
2. 支援Keep-alive和pipelined連線。
3. 可進行簡單、方便、靈活的配置和管理。
4. 支援修改Nginx配置,並且在程式碼上線時,可平滑重啟,不中斷業務訪問。
5. 可自定義訪問日誌格式,臨時緩衝寫日誌操作,快速日誌輪詢及通過rsyslog處理日誌。
6. 可利用訊號控制Nginx程序。
7. 支援3xx-5xx HTTP狀態碼重定向。
8. 支援rewrite模組,支援URI重寫及正則表示式匹配。
9. 支援基於客戶端IP地址和HTTP基本認證的訪問控制。
10. 支援PUT、DELETE、MKCOL、COPY及MOVE等較特殊的HTTP請求方法。
11. 支援FLV流和MP4流技術產品應用。
12. 支援HTTP響應速率限制。
13. 支援同一IP地址的併發連線或請求數限制。
14. 支援郵件服務代理。

###1.2 應用場景

(1)作為Web服務軟體

(2)反向代理或負載均衡服務

(3)前端業務資料快取服務

```
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }
                              
```

###1.3  優點

1. 支援高併發:能支援幾萬併發連線(特別是靜態小檔案業務環境)。
2. 資源消耗少:在3萬併發連線下,開啟10個Nginx執行緒消耗的記憶體不到200MB。
3. 可以做HTTP反向代理及加速快取,即負載均衡功能,內建對RS節點伺服器健康檢查功能,這相當於專業的Haproxy軟體或LVS的功能。
4. 具備Squid等專業快取軟體等的快取功能。
5. 支援非同步網路I/O事件模型epoll(Linux 2.6+)。

## 2. apache的特點

1. Apache 2.2版本非常穩定強大,據官方說,Apache 2.4版本效能更強。
2. Prefork模式取消了程序建立開銷,效能很高。
3. 處理動態業務資料時,因關聯到後端的引擎和資料庫,瓶頸不在Apache上。
4. 高併發時消耗系統資源相對多一些。
5. 基於傳統的select模型,高併發能力有限。select 模型 也就是 同步 epoll  非同步       
6. 支援擴充套件庫,可通過DSO、apxs方法編譯安裝額外的外掛功能,不需要重新編譯Apache。
7. 功能多,更穩定,更安全,外掛也多。
8. 市場份額在逐年遞減。

### 2.1. 網路模式 

同步網路模式   select  

每個請求的狀態始終在維護著 (消耗好多資源)

非同步網路模式   epoll  處理伺服器端的併發   請求人數越多 伺服器肯定吃緊 系統資源也會緊張  I/O效率也會很慢   

不定期將你的請求 篩選出來  直接告訴你    不用挨個select   

epoll  

每個請求  我不再維護你的狀態 如果有請求  就找我  找到了 給你服務 找不到拉倒    

## 3. lighttpd的特點

1. 基於非同步網路I/O模型,效能、併發都與Nginx相近。
2. 擴充套件庫是SO模式,比Nginx靈活。
3. 目前國內的使用率比較低,安全性沒有Apache和Nginx好。
4. 通過外掛(mod_secdownload)可實現檔案URL地址加密(優點)。
5. 社群不活躍,市場份額較低。


**圖說三個伺服器的效能對比**

![對比](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=5dd71ac83defc33aec5890bf2a3391d6.jpg)

## 4. 為什麼nginx處理併發能力更強?

![併發對比](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=04aef6ab446c3a8206bdb42bfa270dd8.jpg)

 ## 5. 如何選擇web伺服器?

1. 靜態業務:若是高併發場景,儘量採用Nginx或Lighttpd,二者首選Nginx。
2. 動態業務:理論上採用Nginx和Apache均可,建議選擇Nginx,為了避免相同業務的服務軟體多樣化,增加額外維護成本。動態業務可以由Nginx兼做前端代理,再根據頁面元素的型別或目錄,轉發到後端相應的伺服器進行處理。
3. 既有靜態業務又有動態業務:採用Nginx。

此外,如果併發不是很大,又對Apache很熟悉,採用Apache也是可以的,Apache 2.4版本也很強大,併發連線數也有所增加。總的來說,在滿足需求的前提下,首先選擇自己最擅長的軟體,若發現了更好的軟體,可在掌握新軟體之後逐步替換。雖然動態和靜態業務都傾向於選擇Nginx,但是大前提是自己要熟練掌握Nginx。切記,在工作中不要盲目選擇軟體,這可能最終會導致自己無法控制局面,從而給企業帶來災難性的損失。

## 6. nginx功能模組說明

Nginx核心功能模組(Core functionality)

![conf](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=a8e3f54faec4cc381bd860c74c8abef9.jpg)

![con](http://wenku.baidu.com/content/38b81d255fbfc77da369b13c?m=677eb0dc3e26a59492c4441651619924&type=pic&src=7e6d94ecab96b43e7d9660894c035cc2.jpg)

## 7. nginx虛擬站點配置方式

如果在Ubuntu16.04下使用apt安裝nginx,安裝完畢後其工作目錄設定如下:

- nginx站點配置目錄:/etc/nginx/
  - 其中主配置為nginx.conf
  - sites-available子目錄存放站點配置檔案,其中有一個default檔案為虛擬站點的配置模板,自己的虛擬站點可以以此為模板進行配置。
  - sites-enabled子目錄存放一個對應站點配置檔案的軟連線。必須在sites-availabel生成站點的配置檔案,然後到sites-enabled新增對應的軟連線。
- 預設站點根目錄 :  /var/www/html/
- 日誌檔案目錄:/var/log/nginx/
  - error.log記錄站點的錯誤,如果要檢視詳細的錯誤資訊,可以開啟該檔案檢視

以www.blog.com站點為例說明多個虛擬站點配置的方法:

~~~
#1.首先切換目錄到sites-available目錄
cd /etc/nginx/sites-available

#2.複製虛擬站點配置模板,生成自己虛擬站點的配置檔案
sudo cp default www.blog.com.conf  

#3 編輯模板
#---------------------以下為配置內容-------------------
server {
        listen 80; #監聽埠

       #站點的根目錄
        root /var/www/html/www.blog.com;

        # Add index.php to the list if you are using PHP
        #網站預設首頁開啟順序
        index index.html index.htm; 
        
        #站點名稱,可以有多個名稱,中間用空格隔開
        server_name www.blog.com blog.com; 
}

#------------------到此結束------------------------------
#這個模板比較簡單,如果有複雜的要求,請以此為基礎進行改進

#4 儲存退出
:wq

#5 切換到sites-enabled目錄下,建立軟連線
cd ../sites-enabled
sudo ln -s /etc/nginx/sites-available/www.blog.com.con   www.blog.com.conf

#6 重啟nginx服務
sudo service nginx restart  (start/stop)
或者
sudo /etc/init.d/nginx restart

#7 切換到站點根目錄(根據你自己的設定進行),我假定站點根目錄是/var/www/html
cd /var/www/html
sudo chmod -R 755 www.blog.com
#編輯index.html

<html>
<head>
<meta charset='utf-8'>
<title>瘋狂程式設計師的部落格</title>
</head>
<body>

<h1>瘋狂的程式設計師</h1>

</body>
</html>