haproxy高可用

Haproxy是目前比較流行的一種羣集調度工具,同類羣集調度工具有很多,如LVS和Nginx,相比較而言,LVS性能最好,但是搭建相對複雜,Nginx的upstream模塊支持羣集功能,但是對羣集節點的健康檢查功能不強,性能沒有Hapr oxy好。Haproxy的官方網站是http://haproxy.1wt.eu/。
本案例介紹使用Haproxy及Nginx搭建一套web羣集。
一、案例環境
使用三臺服務器模擬搭建一套web羣集,具體的拓補圖如下:
haproxy高可用
haproxy高可用
二.編譯安裝Nginx服務器
1.搭建Nginx1
使用nginx-1.12.0.tar.gz安裝包進行編譯安裝
[root@localhost ~]# yum install gcc gcc-c++ pcre-devel zlib-devel make-y
[root@localhost ~]# useradd -M -s /sbin/nologin nginx #創建運行用戶
[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@localhost ~]# cd /opt/nginx-1.12.0/
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx #配置相關參數
[root@localhost nginx-1.12.0]# make && make install #安裝
安裝完後的默認信息如下
• 默認安裝目錄:/usr/local/nginx
• 默認日誌:/usr/local/nginx/logs
• 默認監聽端口:80
• 默認web目錄:/usr/local/nginx
接下來設置測試頁面並啓動Nginx服務。
[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# echo "Server 172.16.10.10" > test.html
[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost ~]# nginx #啓動
[root@localhost ~]# systemctl stop firewalld.service #關閉防火牆
[root@localhost ~]# setenforce 0
在客戶端訪問http://172.16.10.10/test.html,網頁正常顯示。
2.搭建Nginx2
編譯安裝的步驟與Nginx1相同,不同之處在於建立測試頁面。
[root@localhost ~]# cd /usr/local/nginx/html
[root@localhost html]# echo "Server 172.16.10.20" > test.html
三、編譯安裝Haproxy
使用haproxy-1.5.19.tar.gz安裝包進行編譯安裝
[root@localhost ~]# yum install gcc gcc-c++ pcre-devel bzip2-devel make -y #用yum安裝一系列d的環境支持
[root@localhost ~]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/ #解壓haproxy軟件包至/opt目錄下
[root@localhost ~]# cd /opt/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26 #64位系統
[root@localhost haproxy-1.5.19]# make install #安裝
四.創建Haproxy的配置文件
Haproxy默認不創建配置文件,需要複製軟件包的模板配置文件,並進行編輯
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy #創建配置文件目錄
[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/ #將haproxy.cfg文件複製到配置文件目錄下
[root@localhost haproxy-1.5.19]# cd /etc/haproxy/
[root@localhost haproxy]# vim haproxy.cfg
#刪除以下語句
chroot /usr/share/haproxy #禁錮到haproxy的根目錄下
redispatch #強制將請求發送到已經down掉的機器

#添加
listen webcluster 0.0.0.0:80 #定義一個webcluster的應用
option httpchk GET /test.html #訪問服務器的test.html文件
balance roundrobin
server inst1 172.16.10.10:80 check inter 2000 fall 3 #定義nginx節點服務器
server inst2 172.16.10.20:80 check inter 2000 fall 3
五.創建Haproxy自啓動腳本
[root@localhost haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@localhost haproxy]# chmod +x haproxy
[root@localhost haproxy]# chkconfig --add /etc/init.d/haproxy #添加系統服務
[root@localhost haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy]# service haproxy start #啓動Haproxy服務
[root@localhost haproxy]# systemctl stop firewalld.service #關閉防火牆
六、測試web羣集
通過上面的步驟,已經搭建完成Haproxy的web羣集,接下來驗證羣集是否正常工作。一個羣集一般需要具備兩個特性,第一個是高性能,第二個是高可用。
1.測試高性能
在客戶端使用瀏覽器打開http://172.16.10.30/test.html, 瀏覽器顯示信息如圖所示:
haproxy高可用
刷新一下,顯示信息如圖所示:
haproxy高可用
可以看到羣集的負載均衡調度生效,滿足羣集的高性能要求。
2.測試高可用
將172.16.10.10的Nginx服務器停用,在客戶端使用瀏覽器打開http://172.16.10.30/test。html ,瀏覽器顯示信息如圖所示:
haproxy高可用
從中可以看出,當一臺節點出現故障時,不會影響羣集的使用,這樣滿足了羣集的高可用性。
七、Haproxy的日誌
Haproxy的日誌默認輸出系統的syslog中,查看不方便,在生產環境中可以單獨定義出來。
1.修改haproxy配置文件中(/etc/haproxy/haproxy.cfg)關於日誌配置的選項,加入下面的配置:
log /dev/log local0 info
log /dev/log local0 notice
將這兩行配置放到global配置項目中,主要是將info及notice日誌分別記錄到不同的日誌文件中。
2.然後重啓Haproxy的服務
[root@localhost ~]# service haproxy restart #重新啓動Haproxy服務
3.修改rsyslog配置
爲了便於管理,將Haproxy的配置獨立定義到haproxy.conf,並放到/etc/rsyslog.d/下,rsyslog啓動時會自動加載此目錄下的所有配置文件。
[root@localhost ~]# touch /etc/rsyslog.d/haproxy.conf
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
加入下面的內容:
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log #info日誌記錄到/var/log/haproxy/haproxy-info.log下

&~ #表示日誌寫入到日誌文件後,rsyslog停止處理這個信息

if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log #notice日誌記錄到/var/log/haproxy/haproxy-notice.log下

&~
4.保存配置文件並重啓rsyslog服務
[root@localhost ~]# systemctl restart rsyslog.service
5.測試日誌信息
在客戶端訪問http://172.16.10.30/test.html後,可以使用 tail -f /var/log/haproxy/haproxy-info.log 即時查看haproxy的訪問請求日誌。
[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log
Jun 30 21:20:48 localhost haproxy[4202]: 172.16.10.8:50352 [30/Jun/2018:21:20:48.466] webcluster webcluster/inst1 1/0/0/1/2 200 279 - - ---- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1"
Jun 30 21:21:58 localhost haproxy[4202]: 172.16.10.8:50353 [30/Jun/2018:21:21:58.114] webcluster

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