centos 7 + haproxy +keepalived

原文鏈接 :https://blog.csdn.net/sj349781478/article/details/78862315 感謝博主

一、搭建環境
  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/78841382

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
然後訪問 http://ip:9090/admin 用戶名:admin 密碼:Redhat


參數舉例說明:【/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配置:

global_defs {
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

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