使用haproxy搭建web羣集

簡述:

   Haproxy是目前比較流行的一種羣集調度工具,同類羣集調度工具還有很多,比如,LVS和Nginx。相比較而言,LVS性能最好,但是搭建相對複雜,Nginx的upstream模塊支持羣集功能,但是對羣集節點健康檢查功能並不強,性能也不及Haproxy好。

前置知識點

1.http請求

   通過URL訪問網站使用協議是http協議,一般稱爲http請求。http的請求分爲CET和post方式,使用瀏覽器訪問某一個URL,會根據請求URL返回狀態碼,通常正常是的狀態碼是:2 X X、3 XX(比如201、301),如果出現異常就會返回4 X X、5 XX(比如401、501)

2.負載均衡常用調度算法

1)RR(Round Robin輪詢):RR算法是最簡單常用的算法,即輪詢調度。(如:有三個節點分別是a,b,c。第一個用戶訪問會指派到a,第二個用戶訪問指派到b,第三個用戶訪問會指派到c,第四個用戶訪問會繼續指派到節點a,這就是輪詢算法。)此算法還有一種加權輪詢,即根據每個節點的權重輪詢分配訪問請求。

2)LC(Least Connections最小連接算法):即最小連接數算法,根據後端的節點連接數大小動態分配前端請求。(如:各節點的連接數爲a:4,b:5,c6,現在有用戶訪問請求連接,會分配到最少連接數的節點上去,也就是a節點,以此類推)每次新的請求分配給連接數最少的客戶端。由於實際情況中,各個節點的連接數對動態釋放,很難出現一樣連接數的情況,因此此算法相比較rr算法有很大的改進,是目前用到最多的一種算法。

3)SH(Source Hashing基於來源訪問調度算法):即基於來源訪問調度算法,此算法用於一些有Session會話記錄在服務器端的場景,可以基於來源的IP、Cookie等做羣集調度。(如:有三個節點分別爲:a,b,c,第一個用戶訪問會指派到a,第二個用戶會指派到b,當第一個用戶第二次訪問還是會指派到a,只要負載均衡服務器不重啓,第一個用戶訪問都回指派到a)此算法的好處就是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量大,影響業務使用。

3.常見的Web羣集調度器

  目前最常見的Web羣集調度器分爲軟件和硬件;軟件通常使用開源的LVS、Haproxy、Nginx;硬件一般使用比較多的是F5,也有很多人使用國內的一些產品。如梭子魚、綠盟等。

案例環境拓補圖

實施過程

1.安裝Nginx服務器

1)搭建Nginx1

[root@localhost ~]# yum -y install pcre-devel zlib-devel   //安裝依賴包
[root@localhost ~]# useradd -s /sbin/nologin nginx
[root@localhost 桌面]# tar zxf nginx-1.12.0.tar.gz 
[root@localhost 桌面]# cd /usr/src/nginx-1.12.0/
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install

[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost ~]# nginx -t
[root@localhost ~]# echo "192.168.1.10" > /usr/local/nginx/html/index.html   //首頁
[root@localhost ~]# nginx  //開啓服務 

默認安裝路徑:/usr/local/nginx

默認日至路徑:/usr/local/nginx/logs

默認web目錄:/usr/local/nginx/html

測試Nginx1:

 

2.搭建Nginx2

參考搭建Nginx1

測試Nginx2

3.編譯安裝haproxy

[root@localhost ~]# yum -y install pcre-devel bzip2-devel
[root@localhost Desktop]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/
[root@localhost Desktop]# cd /usr/src/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26 && make install   //64位系統

3.haproxy服務配置

1)建立haproxy配置文件

[root@localhost ~]# mkdir /etc/haproxy   //創建配置文件目錄
[root@localhost ~]# cd /usr/src/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
//將haproxy.cfg文件複製到配置文件目錄

2)Haproxy配置項介紹

Haproxy配置文件分爲三個部分,global,defaults和,listen 。global爲全局配置,defaults爲默認配置,listen爲應用組件配置

①global配置參數

global
        log 127.0.0.1   local0  //配置日誌記錄,local0爲日誌設備,默認存放到系統日誌
        log 127.0.0.1   local1 notice  //notice爲日誌級別,通常有24個級別
        #log loghost    local0 info
        maxconn 4096             //最大連接數
        #chroot /usr/share/haproxy
        uid 99         //用戶UID
        gid 99        //用戶GID
        daemon        

②defaults一般會被應用組件繼承,如果在應用組件中沒有特別聲明,將安裝默認配置參數設置

defaults
        log     global           //定義日誌爲global配置中的日誌定義
        mode    http              //模式爲http
        option  httplog           //採用http日誌格式記錄日誌
        option  dontlognull
        retries 3         //檢查節點服務器失敗次數,連續達到三次失敗,則認爲節點不可用
        redispatch             //當服務器負載很高時,自動結束當前隊列處理比較久的連接
        maxconn 2000                 //最大連接數
        contimeout      5000          //連接超時時間
        clitimeout      50000          //客戶端超時時間
        srvtimeout      50000           //服務器超時時間

listen一般配置應用模塊參數

listen  appli4-backup 0.0.0.0:10004      //定義一個名爲appli4-backup的應用
                option  httpchk /index.html  //檢查服務器的index.html文件
                #option  persist    //強制將請求發送到已經down掉的服務器,
                balance roundrobin        //負載均衡調度算法使用輪詢算法
            server  inst1 192.168.114.56:80 check inter 2000 fall 3     //定義在線節點
         server  inst2 192.168.114.56:81 check inter 2000 fall 3 backup //定義備份節點

3)根據目前的羣集設計,將haproxy.cfg配置文件內容修改如下:

global
        log /dev/log    local0 info
        log /dev/log    local0 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/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  webserver 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server  inst1   192.168.1.10:80 check inter 2000 fall 3
        server  inst2   192.168.1.20:80 check inter 2000 fall 3

4.創建自啓動腳本

[root@localhost ~]# cd /usr/src/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy
[root@localhost haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@localhost haproxy-1.5.19]# chmod +x /etc/init.d/haproxy 
[root@localhost haproxy-1.5.19]# chkconfig --add /etc/init.d/haproxy 
[root@localhost haproxy-1.5.19]# /etc/init.d/haproxy start
Starting haproxy (via systemctl):                          [  OK  ]
[root@localhost ~]# systemctl stop firewalld

5.測試

刷新幾下

6.haproxy日誌

Haproxy的日誌默認輸出到系統的syslog中,查看起來非常不方便,爲了更好的管理Haproxy的日誌信息,我們在生產環境中一般單獨定義出來

1)修改關於日誌配置的選項修改如下:

log /dev/log    local0 info
log /dev/log    local0 notice

2)添加下面代碼

[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf

if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~


[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# /etc/init.d/haproxy restart

3)查看日誌

[root@localhost ~]# cat /var/log/haproxy/haproxy-info.log
Jan  3 10:43:20 localhost haproxy: /etc/rc.d/init.d/haproxy: line 26: [: =: unary operator expected
Jan  3 10:43:20 localhost haproxy: Shutting down haproxy: [  OK  ]
Jan  3 10:43:20 localhost haproxy: /etc/rc.d/init.d/haproxy: line 26: [: =: unary operator expected
Jan  3 10:43:20 localhost haproxy: Starting haproxy: [WARNING] 002/104320 (42612) : parsing [/etc/haproxy/haproxy.cfg:19]: keyword 'redispatch' is deprecated in favor of 'option redispatch', and will not be supported by future versions.
Jan  3 10:43:20 localhost haproxy: [WARNING] 002/104320 (42612) : parsing [/etc/haproxy/haproxy.cfg:21] : the 'contimeout' directive is now deprecated in favor of 'timeout connect', and will not be supported in future versions.
Jan  3 10:43:20 localhost haproxy: [WARNING] 002/104320 (42612) : parsing [/etc/haproxy/haproxy.cfg:22] : the 'clitimeout' directive is now deprecated in favor of 'timeout client', and will not be supported in future versions.
Jan  3 10:43:20 localhost haproxy: [WARNING] 002/104320 (42612) : parsing [/etc/haproxy/haproxy.cfg:23] : the 'srvtimeout' directive is now deprecated in favor of 'timeout server', and will not be supported in future versions.
Jan  3 10:43:20 localhost haproxy: [  OK  ]

 

發佈了42 篇原創文章 · 獲贊 5 · 訪問量 1368
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章