haproxy+keepalived實現高可用性集羣
一、HAProxy簡介
HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在時下的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動、單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
二、Keepalived簡介
Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web 服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人 工做的只是修復故障的web服務器。
三、安裝及配置
1、架構圖
2、環境
OS:CentOS 6.5
HAProxy:1.5.4
Keepalived:1.2.13
VIP:192.168.31.200
Master:192.168.31.148
Backup:192.168.31.170
Web1:192.168.31.105
Web2:192.168.31.212
3、安裝haproxy
1、可以使用源碼包安裝 2、可以使用RPM包安裝,這裏我使用RPM包的方式安裝haproxy [root@haproxy-1 ~]# yum -y install haproxy 3、haproxy的配置文件如下 global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.1/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 stats uri /haproxy-stats frontend static *:80 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backendapp backend static balance roundrobin server static 192.168.31.105:80 check backend app balance roundrobin server app1 192.168.31.212:80 check #兩個haproxy節點的配置一樣
4、測試haproxy
4、安裝keepalived
1、源碼包安裝 2、RPM包安裝,我選擇RPM包安裝 [root@haproxy-1 haproxy]# yum install keepalived -y 3、主節點的keepalived的配置文件如下,備節點的只需修改 \ MASTER改爲BACKUP,priority 100改爲priority 99。 global_defs { notification_email { root@localhostt } notification_email_from haproxy@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "lsof -i:80 &>/dev/null" interval 1 weight -2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.31.200 } track_script { chk_haproxy } }
4、測試keepalived
#把haproxy服務停止後