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
#負載均衡的方式,source爲 IP經過hash計算後 指定到固定的真實服務器上
balance source
#允許插入serverid到cookie中,serverid後面可以定義
cookie SERVERID
#日誌設置
log 127.0.0.1 local0 err
# 要負載的後臺服務器
#服務器定義,cookie 1表示serverid爲1,
# 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