1. 程式人生 > >Haproxy+Nginx實現web負載均衡群集

Haproxy+Nginx實現web負載均衡群集

10.10 syslog ble 沒有 rsyslog服務 AR 模擬 system rest

Haproxy是目前比較流行的一種群集調度工具,同類群集調度工具有很多,如LVS和Nginx,相比較而言,LVS性能最好,但是搭建相對復雜,Nginx的upstream模塊支持群集功能,但是對群集節點的健康檢查功能不強,性能沒有Hapr oxy好。Haproxy的官方網站是http://haproxy.1wt.eu/。
本案例介紹使用Haproxy及Nginx搭建一套web群集。

一、案例環境

使用三臺服務器模擬搭建一套web群集,具體的拓補圖如下:
技術分享圖片

主機 系統 IP地址 主要軟件
Haproxy服務器 CentOS7.4 X86_64 172.16.10.30 haproxy-1.5.19.tar.gz
Nginx服務器1 CentOS7.4 X86_64 172.16.10.10 nginx-1.12.0.tar.gz
Nginx服務器2 CentOS7.4 X86_64 172.16.10.20 nginx-1.12.0.tar.gz
客戶端 Windows7 172.16.10.8 IE瀏覽器

二.編譯安裝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, 瀏覽器顯示信息如圖所示:
技術分享圖片
刷新一下,顯示信息如圖所示:
技術分享圖片
可以看到群集的負載均衡調度生效,滿足群集的高性能要求。

2.測試高可用

將172.16.10.10的Nginx服務器停用,在客戶端使用瀏覽器打開http://172.16.10.30/test。html ,瀏覽器顯示信息如圖所示:
技術分享圖片
從中可以看出,當一臺節點出現故障時,不會影響群集的使用,這樣滿足了群集的高可用性。

七、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 webcluster/inst2 0/0/4/1/5 200 249 - - ---- 1/1/0/1/0 0/0 "GET /test.html HTTP/1.1"

Haproxy+Nginx實現web負載均衡群集