HAProxy Nginx LVS Apache總結篇

今天也許是最後一次探討關於HAProxy Nginx LVS Apache的文章,之後將不再贅述,博主之後將要把重心放在Java和Python上,大家如果有什麼疑問可以通過博客首頁QQ聯繫、或者留言。

一、今天花點時間總結分享一下HAProxy、Nginx、LVS、Apache:

比較

HAProxy

Nginx

LVS

Apache

 

 

簡介

高可用、負載均衡且基於TCP和HTTP應用的代理,支持高併發,多集羣反代。

高性能http和反向代理服務器、郵件代理服務器,支持高併發,輕量級Web,低系統資源消耗。

Linux虛擬服務器,常用VS/NAT、VS/TUN和VS/DR,三種模式負載均衡。

高性能Web服務器,支持代理,市場份額很高。

 

 


優點缺點

1、抗負載能力強,負載均衡速度高。

2、支持session保持,Cookie引導,可通過url檢測後端服務器健康狀態。

3、也可做MySQL、Email等負載均衡。

4、一般不做Web服務器的Cache。


1、抗負載能力強。

2、http、https、Emai協議功能較好,處理相應請求快。

3、Web能力強,配置簡單,支持緩存功能、適用動靜分離,低內存消耗。

4、不支持session直接保持,但可通過ip_hash解決,通過端口對後端服務器健康檢查。

1、抗負載能力強。

2、通過vrrp轉發(僅分發)效率高,流量通過內核處理,沒有流量產生。(理論)

3、相當穩定可靠。

4、不支持正則,不能做動靜分離,配置略複雜,需要IP略多。

1、Web處理能力強,市場份額很高。(不過後期Nginx在Web方面越來越好,份額也在增長)

2、Rewrite強大,並支持很多模塊,擴展很方便。

3、Bug少,歷史久,比較穩定。

4、處理動態請求比Nginx好。

 

 

支持算法

1、輪循

Round-robin

2、帶權輪循

Weight-round-robin

3、原地址保持)

Source

4、RI請求URL

rdp-cookie(根據cookie)

1、輪循

Round-robin

2、帶權輪循

Weight-round-robn

3、Ip哈希

Ip-hash

1、rr(輪循)

2、wrr(帶權輪循)

3、lc(最小連接)、

4、wlc(權重最小連接)

 

通過相關模塊實現代理

官網

www.haproxy.com

nginx.org

www.linuxvirtualserver.org

 

http://www.apache.org/

是否免費

免費

免費

免費

免費

虛擬主機

支持

支持

不支持 

支持

七層(常用)

七層(常用)

四層(常用)

不常用

七層重量級,四層輕量級

七層重量級,四層輕量級

四層重量級

功能略差

熱備

Keepalived+其它

Keepalived+其它

Keepalived+其它

Keepalived+其它

負載均衡參考標準

1、效率,併發處理能力、處理數據能力。

2、成本、需求、平臺。

 

 二、Nginx、HAProxy,Apache虛擬主機、負載均衡管理方式。

1、Nginx虛擬主機:

1.1)nginx.conf配置文件定義Server(不推薦)

1.2)單nginx.conf加載配置其它config文件

eg:include vhost/*.conf;

1.3)Nginx負載均衡:

#upstream www.qutouwang.org {   
#zone myapp1 64k; 
#server x.x.x.x:80 weight=1 max_fails=2 fail_timeout=30s slow_start=30s; 
#server x.x.x.x:80 weight=1 max_fails=2 fail_timeout=30s;   
#}  
#proxy_pass http://127.0.0.1:8080;

2、HAProxy虛擬主機、配置文件、負載均衡:

2.1)eg:

frontend main :80
acl url_cms  hdr_beg(host) -i cms
acl url_bbs hdr_beg(host) -i bbs
acl url_blog hdr_beg(host) -i blog
use_backend cms if url_cms
use_backend bbs if url_bbs
use_backend blog if url_blog
default_backend cms
backend cms
balance source
server web1 x.x.x.x check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
backend bbs
balance source
server web1 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
backend blog
balance source
server web1 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3
server web2 x.x.x.x:80 check maxconn 2000 weight 3 inter 2000  rise 2 fall 3

解釋說明:

frontend中關於ACL配置部分的內容這個是實現虛擬主機的核心配置部分,另外這個配置文件定義了server_www,servr_bbs,server_blogbackend。

2.2)配置文件以及案例:

 haproxy的配置文件分爲四個部分:

     全局配置:

        global:  全局配置段

     代理配置:

        default: 默認配置----->所有在backend、frontend、linsten中相同內容可以在此定義;

        frontend:前段配置----->定義前端套接字,接受客戶端請求;

        backend: 後端配置----->定義後端分配規則,與後端服務器交互;

        listen:  綁定配置----->直接將指定的客戶端與後端特定服務器綁定到一起;

eg:

global
    log    127.0.0.1 local2  #通過syslog服務的local2輸出日誌信息
chroot      /var/lib/haproxy  #指定工作目錄
#性能相關
    maxconn 4096  #單個進程的最大連接數
#maxpipes      #haproxy使用pipe完成基於內核的tcp報文重組,默認爲maxconn/4
#noepoll:在Linux系統上禁用epoll機制;
    #nokqueue:在BSD系統上禁用kqueue機制;
    #nopoll:禁用poll機制;
    #nosepoll:在Linux禁用啓發式epoll機制;
    #nosplice:禁止在Linux套接字上使用內核tcp重組
#...
    uid 99        #所屬運行的用戶uid,默認nobod
    gid 99        #所屬運行的用戶組,默認nobody
    daemon        #後臺運行
    nbproc 2      #工作進程數量
#user        haproxy   #同uid
    #group       haproxy   #同gid 
    pidfile /var/run/haproxy.pid
#description     #當前實例描述信息
defaults
    log global
    log 127.0.0.1 local2 err #使用本機上的syslog服務的local2 設備記錄錯誤信息[err warning info debug]
    mode http          #工作模式在7層,tcp是4層
    option httplog     #使用http日誌類別,默認是不記錄http請求的
    option httpclose   #每次請求完畢後主動關閉http通道式
    option forwardfor  #如果後端服務器需要獲得客戶端的真實IP需要配置次參數,將可以從Http Header中獲得客戶端IP
    option redispatch  #當serverId對應的服務器掛掉後,強制定向到其他健康的服務器
    retries 3          #設置嘗試次數,3次連接失敗則認爲服務器不可用
    maxconn 2048       #最大連接數
    contimeout 500    #連接超時
    clitimeout 5000   #客戶端超時
    srvtimeout 5000   #服務器超時
    timeout check 2000         #心跳檢測超時
listen status 0.0.0.0:8080     #定義狀態名字和監聽端口
    stats uri /haproxy-status  #查看haproxy服務器狀態地址
    stats auth admin:renzhiyuan#查看狀態頁面的用戶名和密碼
    stats hide-version         #隱藏haproxy版本信息
    stats refresh 30s          #每5秒刷新一次狀態頁面
listen web_server 0.0.0.0:80   #定義後端名字和監聽端口
    mode http                  #採用7層模式
    balance roundrobin         #負載均衡算法,這裏是輪叫
    cookie SERVERID  #允許插入serverid到cookie中,serverid後面可以定義
    option httpchk GET /index.html #健康檢測
    server web1 x.x.x.x:80 weight 3 check inter 500 fall 3  
    server web2 x.x.x.x:80 weight 2 check inter 500 fall 3
server web3 x.x.x.x:80 weight 2 check inter 500 fall 3
#server:    #server來設置後端服務器
#webx:      #HAProxy名稱,將在日誌中顯示
#x.x.x.x:80 #後端IP和端口
#weight     #權重值,權重值越大,分配的任務機率越高
#check      #健康檢測,inter 500健康檢測間隔是500毫秒
#fall       #檢測多少次,認爲服務器是不可用.

3、Apache虛擬主機和代理案例:

vim /usr/local/apache2/conf/httpd.conf 
#加載模塊
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#反代
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName www.xxx.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://x.x.x.x
ProxyPa***everse / http://x.x.x.x/  #反代服務器
#負載均衡
</VirtualHost>
ProxyPass / balancer://proxy/       

<Proxy balancer://proxy>

        BalancerMember http://x.x.x.x:80/  loadfactor=3

        BalancerMember http://x.x.x.x:80/  loadfactor=2

</Proxy>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章