實現web負載均衡的方式

web負載均衡的集中實現方式python

任何的如在均衡技術都要想辦法創建某種一對多的映射機制,一個請求入口映射到多個處理請求的節點,從而實現分而治之
mysql

   這種映射機制使得多個物理存在對外體現一個虛擬的總體,對服務的請求者屏蔽了內部的結構nginx

採用不一樣的機制創建映射關係,能夠造成不一樣的負載均衡技術web

   dns輪詢
算法

   CDN
sql

   ip負載均衡
vim



   dns輪詢後端

   DNS輪詢是最簡單的負載均衡方式。以域名做爲訪問入口,經過配置多條DNS A記錄使得請求能夠分配到不一樣的服務器。瀏覽器

   DNS輪詢沒有快速的健康檢查機制,並且只支持WRR的調度策略致使負載很難「均衡」,一般用於要求不高的場景。 而且DNS輪詢方式直接將服務器的真實地址暴露給用戶,不利於服務器安全。
緩存


   CDN

   經過發佈機制將內容同步到大量的緩存節點,並在DNS服務器上進行擴展,找到用戶最近的緩存節點做爲服務提供節點


   ip負載均衡  

   IP負載均衡是基於特定的TCP/IP技術實現的負載均衡。好比NAT、DR、Turning等。是最常常使用的方式。 關於其原理,能夠參考另外一篇文章:lvs中的負載均衡方式。

   IP負載均衡可使用硬件設備,也可使用軟件實現。硬件設備的主要產品是F5-BIG-IP-GTM(簡稱F5), 軟件產品主要有LVS、HAProxy、NginX。其中LVS、HAProxy能夠工做在4-7層,NginX工做在7層。關於三者的簡單對比,能夠參考這裏。

   硬件負載均衡設備能夠將核心部分作成芯片,性能和穩定性更好,並且商用產品的可管理性、文檔和服務都比較好。惟一的問題就是價格。


軟件負載均衡一般是開源軟件。自由度較高,但學習成本和管理成本會比較大。



   F5

   F5是最流行的硬件負載均衡設備,其併發能力能達到百萬級,主要特性爲:

   1.多鏈路的負載均衡與冗餘

   2.防火牆負載均衡

   3.服務器負載均衡

   4.高可用

   5.安全性

   6.易於管理

   7.還提供SSL加速、軟件升級、IP地址過濾、貸款控制等輔助功能

1、利用haproxy實現web服務的負載均衡

         基於httpd和tcp等多種協議的應用提供高速、高可用的負載負擔解決方案

     環境

           192.168.253.129  haproxy

           192.168.253.139  web1

           192.168.253.140  web2

   web安裝http環境,提供網頁

wKiom1Mv_SXxlxEMAAGk8BFdpBk146.jpg

wKiom1Mv_UiT7fI8AAD-tFzgAI0629.jpg

   web2安裝http環境,提供網頁

wKioL1Mv_S2z-RKOAAINKMmxems727.jpg

wKiom1Mv_VXiDGHhAADyKozU4kU709.jpg

   配置haproxy

   使用yum進行安裝  

yum -y install haproxy

   修改haproxy的配置文件


[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
listen stats
    mode http
listen stats
    mode http
    bind 0.0.0.0:1080
    stats enable
    stats hide-version
    stats uri     /haproxyadmin?stats
    stats realm   Haproxy\ Statistics
    stats auth    admin:admin
    stats admin if TRUE
frontend http-in
    bind *:80
    mode http
    log global
    option httpclose
    option logasap
    option dontlognull
    capture request  header Host len 20
    capture request  header Referer len 60
    default_backend servers
frontend healthcheck
    bind :1099
    mode http
    option httpclose
    option forwardfor
    default_backend servers
backend servers
        balance roundrobin
    server websrv1 192.168.253.139:80 check maxconn 2000
    server websrv2 192.168.253.140:80 check maxconn 2000

   能夠直接定義一個listen,也能夠listen和frontend、backend一塊兒使用

   啓動haproxy服務,結果以下

wKiom1Mv_vzz3vcQAABf8HUKv80188.jpg

wKioL1Mv_tXSe9scAABdIqrsWvY216.jpg


   附:也可使用haproxy負載均衡mysql服務

      只須要修改配置文件以下

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg
listen stats
    mode http
    bind 0.0.0.0:1080
    stats enable
    stats hide-version
    stats uri     /haproxyadmin?stats
    stats realm   Haproxy\ Statistics
    stats auth    admin:admin
    stats admin if TRUE
frontend mysql
    bind *:3306
    mode tcp
    log global
    default_backend mysqlservers
backend mysqlservers
    balance leastconn
    server dbsrv1 192.168.10.11:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300
    server dbsrv2 192.168.10.12:3306 check port 3306 intval 2 rise 1 fall 2 maxconn 300

   附二:能夠查看狀態信息,配置文件中listen段定義,訪問地址

http://192.168.253.129:1080/haproxyadmin?stats




   2、使用nginx代理web服務

       192.168.253.139   web1

       192.168.253.140   web2

       192.168.253.129   代理

       web1提供http服務

wKiom1MxJsLBFdpsAACEnAjMRlM343.jpg

       web2提供http服務

wKioL1MxJpuDXn1UAACHQischLo387.jpg

       配置nginx,nginx使用upstream模塊,實現後端的負載均衡

wKiom1MxJsKi7j_CAAHqQqosiH0852.jpg

       upstream模塊配置詳解


Nginx的負載均衡模塊目前支持4種調度算法,下面進行分別介紹,其中後兩項屬於第三方調度算法。  

輪詢(默認)。每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。Weight 指定輪詢權值,Weight值越大,分配到的訪問機率越高,主要用於後端每一個服務器性能不均的狀況下。

ip_hash。每一個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端服務器,有效解決了動態網頁存在的session共享問題。

fair。這是比上面兩個更加智能的負載均衡算法。此種算法能夠依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx自己是不支持fair的,若是須要使用這種調度算法,必須下載Nginx的upstream_fair模塊。

url_hash。此方法按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,能夠進一步提升後端緩存服務器的效率。Nginx自己是不支持url_hash的,若是須要使用這種調度算法,必須安裝Nginx 的hash軟件包。

3.upstream 支持的狀態參數

在HTTP Upstream模塊中,能夠經過server指令指定後端服務器的IP地址和端口,同時還能夠設定每一個後端服務器在負載均衡調度中的狀態。經常使用的狀態有:

down,表示當前的server暫時不參與負載均衡。

backup,預留的備份機器。當其餘全部的非backup機器出現故障或者忙的時候,纔會請求backup機器,所以這臺機器的壓力最輕。

max_fails,容許請求失敗的次數,默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。

fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails能夠和fail_timeout一塊兒使用。

注,當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。

       使用瀏覽器訪問

wKioL1MxJ0yzHQ7wAABdpsQo6OQ016.jpg

        刷新頁面

wKiom1MxJ0vT1JisAABbDmfv2j4424.jpg

相關文章
相關標籤/搜索