高可用的負載均衡配置方法(Haproxy+KeepAlived)

1.什麼是HAProxy

HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代 理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。

 

2.什麼是keepalived

keepalived是一個類似於layer3,4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器.

3.Haproxy+KeepAlived

用Haproxy+KeepAlived實現高可用的負載均衡方案,用Haproxy做負載勻衡,用KeepAlived做高可用性Health Check,在Master與Slave上面分別配置相同的虛擬路由vrrp(192.168.187.61),當Master宕機後,虛擬路由負載自動由Master轉到Slave,負載由Slave完成,當Master恢復以後,自動又恢復到Master。服務器的佈署結構如下:Master(192.168.187.129);Slave(192.168.187.132);VRRP(192.168.187.61);SERVER1(192.168.2.68);SERVER2(192.168.2.60)


4.Haproxy的安裝配置過程

4.1 Haproxy安裝方法

在Master(192.168.187.129)操作

下載

 [root@localhost /]:wget  http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.23.tar.gz

 解壓縮

[root@localhost/]:tar xzvf haproxy-1.4.23.tar.gz                                      

編譯haproxy,進入解壓後的haproxy的目錄,用下列命令進行編譯:

[[email protected]] make TARGET=linux26               

[[email protected]] make PREFX=/usr/local/haproxy install                 

安裝完成後會在安裝目錄下生成doc ,sbin ,share三個文件夾。解壓的源碼文件也可以刪除掉。

創建pid文件,日誌文件,配置文件,在安裝目錄下建立配置文件目錄

[root@localhost sbin]mkdir conf

[root@localhost sbin]mkdir logs

[root@localhost logs]vihaproxy.log

[root@localhost logs]vihaproxy.pid

在新創建的目錄下創建配置文件

[root@localhostconf]vi haproxy.cfg

4.2 Haproxy的配置

在創建的haproxy.cfg文件中填入

#全局配置

global

#日誌設置

log 127.0.0.1 local0 info #[err warning info debug]

#最大連接數

maxconn 4096

#用戶

user root

#用戶組

group root

#使HAProxy進程進入後臺運行。這是推薦的運行模式

Daemon

#創建1個進程進入deamon模式運行

nbproc 1

#將所有進程的pid寫入文件<pidfile>啓動進程的用戶必須有權限訪問此文件

pidfile /usr/local/haproxy/sbin/logs/haproxy.pid

#默認配置

defaults 

#默認的最大連接數

maxconn2000

#連接超時

contimeout5000

#客戶端超時

clitimeout30000

#服務器超時

srvtimeout30000

#統計頁面配置

listenadmin_stats

    #監聽端口

bind 0.0.0.0:1080

#http七層模式

modehttp

#日誌設置

log127.0.0.1 local0 err

#統計頁面url

stats uri /admin_stats

#監聽配置

listen http_in

   #監聽端口

bind *:1081

#http七層模式

mode http

#負載均衡的方式,sourceIP經過hash計算後 指定到固定的真實服務器上

balance source

#允許插入serverid到cookie中,serverid後面可以定義

cookie SERVERID

#日誌設置

log 127.0.0.1 local0 err

# 要負載的後臺服務器
#服務器定義,cookie 1表示serverid1
# weight  -- 調節服務器的負重
# check -- 允許對該服務器進行健康檢查
# inter  -- 設置連續的兩次健康檢查之間的時間,單位爲毫秒(ms),默認值 2000(ms)
# rise  -- 指定多少次連續成功的健康檢查後,即可認定該服務器處於可操作狀態,默認值 2
# fall  -- 指定多少次不成功的健康檢查後,認爲服務器爲當掉狀態,默認值 3

# maxconn  -- 指定可被髮送到該服務器的最大併發連接數

server localhost *  cookie 1 weight 3 check inter 2000 rise 2 fall 3

#用來做測試的兩臺實體機器的IP

    server 192.168.2.68 192.168.2.68:8081cookie 2 weight 3 check inter 2000 rise 2 fall 3

server 192.168.2.60 192.168.2.60:80  cookie 3 weight 3 check inter 2000 rise 2 fall3

 

4.3.啓動haproxy測試

如下是啓動haproxy的方式.

[root@localhost sbin]./haproxy –f./conf/haproxy.cfg              

啓動以後用以下命令進行查看,如下:


可以看到haproxy已經以進程的方式啓動了.

在IE瀏覽器中輸入http://ip:1080/admin_stats.這是Haproxy的運行狀態,如下圖:


4.4.修改日誌配置

使用root賬戶首先修改/etc/sysconfig/syslog文件,將SYSLOGD_OPTIONS="-m0”修改爲SYSLOGD_OPTIONS="-m 0 -r -x",支持收集遠程服務器日誌。然後修改/etc/syslog.conf,增加如下語句:

local0.* /usr/local/haproxy/sbin/logs/haproxy.log  // haproxy.log地址代表了需要存儲日誌的地址,其中local0這個級別要和haproxy.cfg配置的log級別一樣

執行service syslog restart,重新啓動系統日誌器

 

另外一臺Slave(192.168.187.132)做爲備用服務器的機器按照同樣的配置

 

5.KeepAlived安裝配置

5.1 KeepAlived的安裝方法

下載keepalived

[root@localhost /]:wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

解壓縮

[root@localhost /]:tar xzvf keepalived-1.2.7.tar.gz                                

安裝

[root@localhost /]cd keepalived-1.2.7                                               

[root@localhost keepalived-1.2.7]./configure                                       

[root@localhost keepalived-1.2.7]make                                             

[root@localhost keepalived-1.2.7]make install                                     

5.2 將keepalived加入服務

按照上述安裝方法,keepalived安裝完成後,自動安裝在/usr/local/sbin目錄下面,配置文件

位置在/usr/local/etc/keepalived目錄下面,具體操作如下:

/*在配置文件夾/etc下面建立keepalived文件夾*/

Mkdir /etc/keepalived 

/*將配置文件複製過去*/

Cp /usr/local/etc/keepalived/keepalived.conf  /etc/keepalived/   

/*將keepalived文件複製到/etc/init.d文件夾,這個文件夾存放可執行的服務程序*/

Cp /usr/local/etc/rc.d/init.d/keepalived   /etc/init.d  

/*將安裝目錄下面的系統配置文件複製到/etc/sysconfig,這是一個存放系統配文件的目錄*/

Cp /usr/local/etc/sysconfig/keepalived  /etc/sysconfig/

/*開啓服務*/

Service keepalived start

/*停止服務*/

Service keepalived stop

/*重啓服務*/

Service keepalived restart

5.3  KeepAlived的配置

安裝好以後,對其進行配置如下:

有兩臺機器(MASTER)所在的192.168.187.129與(SLAVE)192.168.187.132,用(VRRP)192.168.187.61做虛擬IP,在兩臺服務器中飄動,如下圖:


在兩臺服各器中的/etc/keepalived文件夾中的keepalived.conf下進行配置:

Master的設置  

192.168.187.129

global_defs {

   router_id Haproxy  #當前節點名

}

vrrp_instance VI_1{

    state MASTER       #指定Haproxy節點爲主節點 備用節點上設置爲BACKUP即可

interface eth0       #綁定虛擬IP的網絡接口

virtual_router_id 51 #VRRP組名,兩個節點的設置必須一樣,以指明各個節點屬於同一VRRP

priority 150         #主節點的優先級(1-254之間),備用節點必須比主節點優先級低

acvert_int 1         #組播信息發送間隔,兩個節點設置必須一樣

authentication{      #設置驗證信息,兩個節點必須一致

    auth_type  PASS

    auth_pass  1111

}

Virtual_ipaddress{   #指定虛擬IP, 兩個節點設置必須一樣

192.168.187.61

     }

   }

 

Slave的設置 

192.168.187.132

global_defs {

   router_id Haproxy  #當前節點名

}

vrrp_instance VI_1{

    state BACKUP       #指定Haproxy節點爲備用節點 備用節點上設置爲Master即可

interface eth0       #綁定虛擬IP的網絡接口

virtual_router_id 51 #VRRP組名,兩個節點的設置必須一樣,以指明各個節點屬於同一VRRP

priority 100         #主節點的優先級(1-254之間),備用節點必須比主節點優先級低

acvert_int 1         #組播信息發送間隔,兩個節點設置必須一樣

authentication{      #設置驗證信息,兩個節點必須一致

    auth_type  PASS

    auth_pass  1111

}

Virtual_ipaddress{   #指定虛擬IP, 兩個節點設置必須一樣

192.168.187.61

     }

   }

5.4 KeepAlived測試

No1:第一種情況,雙機都正常的情況

在(Master)192.168.187.129服務器上面查看IP,可以看到一個192.168.187.61的虛擬IP


而這時用IP addr在備機192.168.187.132上面查看,可以發現不存在192.168.187.61的虛擬IP


No2:第二種情況,Master已經宕機的情況

,再用 IP addr 查看,發現虛擬IP已經漂移到192.168.187.132這臺機子上面來了,響應速度非常快,

實現了高可用性,如下圖:

 

No3:第三種情況,Master已經恢復的情況

當Master恢復的情況下,用IP addr 再進行查看,發現虛擬IP再次漂移到192.168.187.129上面來了,

如下圖:


6.Haproxy+KeepAlived的測試

兩臺被負載的服務器都已經裝好了Web的運行環境,運行情況如下:

.192.168.2.63的運行環境


.192.168.2.68的運行環境


開兩個瀏覽器頁面,用Haproxy中配置的虛擬IP(192.168.187.61)進行測試,可以看到一臺負載到了

192.168.2.68,而另外一臺被負載到了192.168.2.63。


當關掉做爲主機的192.168.187.129做爲宕機處理,同樣也不會出問題,虛擬IP由192.168.187.129漂移

到192.168.187.132上面。

 

 

7.安裝時出現的問題及處理方法

No1:第一種錯誤情況

錯誤:haproxy啓動報錯Startingproxy : cannot bind socket

原因:其監聽80已被佔用

解決辦法:查看netstat–ntpl,如果有80端口,說明80被佔用了,只需要找到程序關閉就可以了!

No2:第二種錯誤情況

錯誤:安裝Keepalived時出現這種錯誤

1.      configure: error:  

2.        !!! OpenSSL is not properly installed on your system. !!!  

3.        !!! Can not include OpenSSL headers files.            !!!  

原因:沒有安裝 OpenSSL

解決辦法:CentOS下安裝 Yum –y installopenssl-devel 

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