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服務的負載均衡
環境
192.168.253.129 haproxy
192.168.253.139 web1
192.168.253.140 web2
web安裝http環境,提供網頁
web2安裝http環境,提供網頁
配置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服務,結果以下
附:也可使用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服務
web2提供http服務
配置nginx,nginx使用upstream模塊,實現後端的負載均衡
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。
使用瀏覽器訪問
刷新頁面