今天也許是最後一次探討關於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>