1. 程式人生 > >Haproxy+Nginx負載均衡群集及調度日誌管理

Haproxy+Nginx負載均衡群集及調度日誌管理

isp chkconfig lvs-nat 服務啟動 1.5 搭建配置 centos7 sta ORC

關於負載均衡群集,在本文之前已經發表有關負載均衡群集的文章,如:Nginx+Tomcat負載均衡群集、LVS-NAT模式的負載均衡群集、LVS-DR+Keepalive高可用群集;

  • 就性能而言,Nginx的upstream模塊支持群集功能,但是對群集節點的健康檢查功能不強。
  • LVS的兩種模式性能較好,由於搭建過程較為復雜,後期維護也較為繁瑣。
  • haproxy是一種輕量級調度服務軟件,HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。且搭建配置較為簡單。

常用負載均衡調度算法:

  • RR(Round Robin)較為簡單的一種輪詢算法,即輪詢調度;在輪詢調度中還有一種加權輪詢,即根據每個節點所分配權重輪詢分配訪問請求。
  • LC(Least Connections)即最小連接數算法,這種算法會根據節點服務器已存在鏈接服務數比較,會將訪問請求首先分配到鏈接數較少的節點服務器上,由於實際情況節點服務器的連接數會動態釋放,很難會出現鏈接數一樣的情況,因此LC算法較RR算法有較大改進。
  • SH(Source Hashing)基於來源訪問的調度算法,此算法用於一些有session會話記錄在服務器端的場景,可以基於來源的IP地址Cookie等做群集調度。

實驗模型

技術分享圖片

實驗環境

服務器 系統環境 IP地址 所需軟件
haproxy服務器 centos7.3 192.168.100.101 haproxy
節點web1 centos7.3 192.168.100.201 Nginx
節點web2 centos7.3 192.168.100.202 Nginx

實驗部署

1、haproxy服務器

  • 這裏服務器都是托管在IDC機房中,若是公網訪問需要利用防火墻NAT規則制作映射訪問內網服務器IP。

  • 編譯安裝haproxy調度軟件,使得可以調度節點服務器。

yum install pcre pcre-devel bzip2-devel gcc gcc-c++ make -y //安裝編譯所需環境包

tar zxvf haproxy-1.5.19.tar.gz -C /opt/ //解壓haproxy軟件包

cd /opt/haproxy-1.5.19/
make TARGET=linux26 //編譯64位版本
make install //編譯安裝,默認路徑為/etc下
mkdir /etc/haproxy //創建haproxy工作目錄
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/ //創建haproxy的配置文件

  • 編輯haproxy主配置文件:

cd /etc/haproxy/
vim haproxy.cfg

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
      # chroot /usr/share/haproxy   //當前工作路徑,因為直接make install默認在/etc/haproxy,故此行無需存在
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #redispatch      //註釋掉;調度服務器強會重復發送請求給節點服務器
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
listen  webcluster 0.0.0.0:80   //定義haproxy監聽頁面
        option httpchk GET /test.html   //調度網頁形式
        balance roundrobin   //采用輪詢調度算法
        server inst1 192.168.100.201:80 check inter 2000 fall 3
        server inst2 192.168.100.202:80 check inter 2000 fall 3

(···刪除其他listen區域)
  • 復制服務啟動腳本

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy 復制服務啟動腳本
chmod +x haproxy 增加執行權限
chkconfig --add /etc/init.d/haproxy 加入服務啟動項
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy 加入系統命令隊列,可以不添加,因為都在環境變量

  • 啟動服務

service haproxy start

2、節點服務器

  • 解壓安裝Nginx服務

tar zxvf nginx-1.12 -C /opt
cd /opt/nginx-1.12

  • 創建進程用戶

useradd -M -s /sbin/nologin nginx

  • 配置安裝

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx

  • 編譯安裝

    make && make install

  • 創建測試首頁

此處創建首頁格式為test.html,因為在haproxy配置文件中有註明調度網頁形式。為區分調度節點服務器,測試首頁需要不同。

cd /usr/local/nginx/html
echo "this is first test web" > test.html

  • 建立Nginx啟動命令

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

  • 啟動服務

    systemctl stop firewalld.service
    setenforce 0
    nginx -t 檢查配置文件
    nginx 啟動服務

對於節點服務器二,配置方式同節點服務器一,僅需要在測試頁面區分。

3、調度測試

技術分享圖片

技術分享圖片

4、調度日誌管理

由於haproxy調度軟件的日誌文件默認輸出到和系統日誌syslog中,而在生產環境中,這樣的結果容易導致日誌混亂且不便管理查詢,因此需要將haproxy日誌文件單獨定義出來。

  • 修改haproxy配置文件

vim /etc/haproxy/haproxy.cfg

global
        log /dev/log    local0 info      //調度日誌為info類型及存放位置
        log /dev/log    local0 notice    //調度日誌為notice類型及存放位置
  • 編寫系統日誌管理haproxy日誌的配置文件,方便系統日誌進行管理

touch /etc/rsyslog.d/haproxy.conf

vim haproxy.conf

if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘info‘)
then -/var/log/haproxy/haproxy-info.log    //定義新的haproxy日誌文件位置
&~
if ($programname == ‘haproxy‘ and $syslogseverity-text == ‘notice‘)
then -/var/log/haproxy/haproxy-notice.log
&~
  • 重啟服務

    service haproxy start
    systemctl restart rsyslog.service

  • 日誌訪問測試
    當使用客戶端再次訪問時,可以觀察到/var/log/haproxy/下已經生成相應日誌文件。

技術分享圖片

Haproxy+Nginx負載均衡群集及調度日誌管理