1. 程式人生 > >CentOS7 haproxy+keepalived實現高可用叢集搭建

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