CentOS7 haproxy+keepalived實現高可用叢集搭建
一、搭建環境
CentOS7 64位
Keepalived 1.3.5
Haproxy 1.5.18
後端負載主機:192.168.166.21 192.168.166.22 兩臺節點上安裝rabbitmq服務
Haproxy 也是安裝在 192.168.166.21 和 192.168.166.22 上,用於對外提供 RabbitMQ 均衡
Keepalived實現haproxy的主備,高可用(避免單點問題),192.168.166.21(主)192.168.166.22(備),虛擬地址VIP 192.168.166.29
rabbitmq配置可以參看
http://blog.csdn.net/sj349781478/article/details/78845852
二、HAproxy簡介
1)HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。
2)HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。
3)HAProxy執行在當前的硬體上,完全可以支援數以萬計的併發連線。並且它的執行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。
4)HAProxy實現了一種事件驅動, 單一程序模型,此模型支援非常大的併發連線數。多程序或多執行緒模型受記憶體限制 、系統排程器限制以及無處不在的鎖限制,很少能處理數千併發連線。事件驅動模型因為在有更好的資源和時間管理的使用者空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程式通常擴充套件性較差。這就是為什麼他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。
三、HAproxy配置
1、安裝haproxy
# yum install haproxy -y
2、編輯配置檔案
vi /etc/haproxy/haproxy.cfg 之後新增:
listen rabbitmq_local_cluster 0.0.0.0:56722 #配置TCP模式 mode tcp option tcplog #簡單的輪詢 balance roundrobin #rabbitmq叢集節點配置 server mq01 192.168.166.21:5672 check inter 5000 rise 2 fall 2 server mq02 192.168.166.22:5672 check inter 5000 rise 2 fall 2
因為我是在同一臺伺服器上,如果haproxy與後端伺服器分開,建議埠一致。
3、啟動# haproxy -f /etc/haproxy/haproxy.cfg
4、重啟動
# service haproxy restart
5、檢視haproxy是否已經啟動
6、haproxy啟用監控頁面
編輯haproxy.cfg 加上下面引數listen admin_stats stats enable bind *:9090 //監聽的ip埠號 mode http //開關 option httplog log global maxconn 10 stats refresh 30s //統計頁面自動重新整理時間 stats uri /admin //訪問的uri ip:8080/admin stats realm haproxy stats auth admin:Redhat //認證使用者名稱和密碼 stats hide-version //隱藏HAProxy的版本號 stats admin if TRUE //管理介面,如果認證成功了,可通過webui管理節點 儲存退出後 重起service haproxy restart
---------------------------------------------------------------------------------------------
引數舉例說明:【/usr/local/haproxy/haproxy.cfg】
###########全域性配置######### global log 127.0.0.1 local0 #[日誌輸出配置,所有日誌都記錄在本機,通過local0輸出] log 127.0.0.1 local1 notice #定義haproxy 日誌級別[error warringinfo debug] daemon #以後臺形式執行harpoxy nbproc 1 #設定程序數量 maxconn 4096 #預設最大連線數,需考慮ulimit-n限制 #user haproxy #執行haproxy的使用者 #group haproxy #執行haproxy的使用者所在的組 #pidfile /var/run/haproxy.pid #haproxy 程序PID檔案 #ulimit-n 819200 #ulimit 的數量限制 #chroot /usr/share/haproxy #chroot執行路徑 #debug #haproxy 除錯級別,建議只在開啟單程序的時候除錯 #quiet ########預設配置############ defaults log global mode http #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK option httplog #日誌類別,採用httplog option dontlognull #不記錄健康檢查日誌資訊 retries 2 #兩次連線失敗就認為是伺服器不可用,也可以通過後面設定 #option forwardfor #如果後端伺服器需要獲得客戶端真實ip需要配置的引數,可以從Http Header中獲得客戶端ip option httpclose #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,只能模擬這種模式的實現 #option redispatch #當serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器,以後將不支援 option abortonclose #當伺服器負載很高的時候,自動結束掉當前佇列處理比較久的連結 maxconn 4096 #預設的最大連線數 timeout connect 5000ms #連線超時 timeout client 30000ms #客戶端超時 timeout server 30000ms #伺服器超時 #timeout check 2000 #心跳檢測超時 #timeout http-keep-alive10s #預設持久連線超時時間 #timeout http-request 10s #預設http請求超時時間 #timeout queue 1m #預設佇列超時時間 balance roundrobin #設定預設負載均衡方式,輪詢方式 #balance source #設定預設負載均衡方式,類似於nginx的ip_hash #balnace leastconn #設定預設負載均衡方式,最小連線數 ########統計頁面配置######## listen stats bind 0.0.0.0:1080 #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱 mode http #http的7層模式 option httplog #採用http日誌格式 #log 127.0.0.1 local0 err #錯誤日誌記錄 maxconn 10 #預設的最大連線數 stats refresh 30s #統計頁面自動重新整理時間 stats uri /stats #統計頁面url stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文字 stats auth admin:admin #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名稱 stats auth Frank:Frank #設定監控頁面的使用者和密碼:Frank stats hide-version #隱藏統計頁面上HAProxy的版本資訊 stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本) ########設定haproxy 錯誤頁面##### #errorfile 403 /home/haproxy/haproxy/errorfiles/403.http #errorfile 500 /home/haproxy/haproxy/errorfiles/500.http #errorfile 502 /home/haproxy/haproxy/errorfiles/502.http #errorfile 503 /home/haproxy/haproxy/errorfiles/503.http #errorfile 504 /home/haproxy/haproxy/errorfiles/504.http ########frontend前端配置############## frontend main bind *:80 #這裡建議使用bind *:80的方式,要不然做叢集高可用的時候有問題,vip切換到其他機器就不能訪問了。 acl web hdr(host) -i www.abc.com #acl後面是規則名稱,-i為忽略大小寫,後面跟的是要訪問的域名,如果訪問www.abc.com這個域名,就觸發web規則,。 acl img hdr(host) -i img.abc.com #如果訪問img.abc.com這個域名,就觸發img規則。 use_backend webserver if web #如果上面定義的web規則被觸發,即訪問www.abc.com,就將請求分發到webserver這個作用域。 use_backend imgserver if img #如果上面定義的img規則被觸發,即訪問img.abc.com,就將請求分發到imgserver這個作用域。 default_backend dynamic #不滿足則響應backend的預設頁面 ########backend後端配置############## backend webserver #webserver作用域 mode http balance roundrobin #balance roundrobin 負載輪詢,balance source 儲存session值,支援static-rr,leastconn,first,uri等引數 option httpchk /index.html HTTP/1.0 #健康檢查, 檢測檔案,如果分發到後臺index.html訪問不到就不再分發給它 server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3 server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3 #cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率 #rise 2是2次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重 backend imgserver mode http option httpchk /index.php balance roundrobin server img01 192.168.137.101:80 check inter 2000 fall 3 server img02 192.168.137.102:80 check inter 2000 fall 3 backend dynamic balance roundrobin server test1 192.168.1.23:80 check maxconn 2000 server test2 192.168.1.24:80 check maxconn 2000 listen tcptest bind 0.0.0.0:5222 mode tcp option tcplog #採用tcp日誌格式 balance source #log 127.0.0.1 local0 debug server s1 192.168.100.204:7222 weight 1 server s2 192.168.100.208:7222 weight 1---------------------------------------------------------------------------------------------
四、Keepalived介紹
keepalived是一個免費開源的,用C編寫的類似於layer3, 4 & 7交換機制軟體,具備我們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務核心模組(ipvs),而高可用是通過VRRP協議實現多臺機器之間的故障轉移服務。
五、Keepalived配置
1、安裝haproxy
# yum install keepalived -y
2、配置檔案
利用keepalived做主備,避免單點問題,實現高可用,在192.168.166.21和192.168.166.22節點上安裝最新版keepalived
192.168.166.21(主)修改keepalived.conf為:Primary配置:
global_defs {router_id mq01
}
vrrp_script chk_haproxy
{
script "/etc/keepalived/scripts/haproxy_check.sh"
interval 2
timeout 2
fall 3
}
vrrp_instance haproxy {
state MASTER
interface eth1
virtual_router_id 29
priority 150 authentication { auth_type PASS auth_pass 29 }
virtual_ipaddress {
192.168.166.29
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh"}
192.168.166.22(備)修改keepalived.conf為:Secondary配置:
router_id mq02}
vrrp_script chk_haproxy
{
script "/etc/keepalived/scripts/haproxy_check.sh"
interval 2
timeout 2
fall 3
}
vrrp_instance haproxy {
state BACKUP
interface eth1
virtual_router_id 29
priority 100 authentication { auth_type PASS auth_pass 29 }
virtual_ipaddress {
192.168.166.29
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh"} 【haproxy_check.sh檔案內容】 #!/bin/bash LOGFILE="/var/log/keepalived-haproxy-state.log" date >> $LOGFILE if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then echo "fail: check_haproxy status" >> $LOGFILE exit 1 else echo "success: check_haproxy status" >> $LOGFILE exit 0 fi 【haproxy_master.sh檔案內容】 #!/bin/bash LOGFILE="/var/log/keepalived-haproxy-state.log" echo "Being Master ..." >> $LOGFILE
賦許可權 chmod 777 haproxy_check.sh haproxy_master.sh
啟動keepalived即可,192.168.166.29是對外提供的統一地址。通過192.168.166.29:56722就可以訪問rabbitmq服務。
3、啟動keepalived
#keepalived -D
4、檢視keepalived是否啟動
六、切換測試
1)關閉主keepalived,VIP是否切換至備機,業務是否正常,恢復原狀;(驗證keepalived高可用)
2)關閉主HAproxy,VIP是否切換至備機,業務是否正常,恢復原狀;(驗證HAproxy高可用)
3)關閉後臺伺服器mq01,業務是否正常。(驗證HAproxy狀態檢查)
keepalived參考:http://blog.51cto.com/lanlian/1303195
haproxy監控頁面配置參考:http://blog.csdn.net/dylan_csdn/article/details/51261421