HAproxy企業應用,TCP/HTTP動靜分離

HAProxy的是一個免費的、開源的的tcp/http反向代理工具、負載均衡器,是一個企業非常快速和可靠的安全的解決方案,提供高可用性、高併發性,負載均衡和代理對TCP和基於HTTP的應用程序。它特別適用於流量非常高的網站。它已成爲事實上的標準開源負載均衡器,現在隨大多數主流Linux發行版一起提供,在互聯網領域應用也是非常廣泛,受歡迎的第三方工具。

在企業實際應用環境中,往往會根據業務請求將相關不同請求跳轉到指定的後端服務器,比如客戶靜態資源請求交給後端靜態資源服務器處理,php請求交給後端動態資源Apache服務進行處理,jsp請求交給後端動態資源tomcat服務進行處理,即業務上的應用請求分離,我們這裏可以通過haproxy完全可以利用acl匹配規則實現這一目的,以實現動靜分離效果;除了haproxy外,其實還可以通過nginx的acl規則也可以完全實現,不過這些強大的工具往往是在Linux服務器上面跑才能發揮最佳性能,其實這些東西安裝和配置非常簡單,只需要有Linux基礎,懂得一些Linux基礎的命令就完全可以實現強大的功能,我也是在《Linux就該這麼學》這本樹入門Linux,非常適合於初學者。

現在好多企業購買負載均衡器硬件設備,其實這些硬件設備都是通過潛入軟件來實現的,可能性能還沒有那麼好,haproxy實現tcp和http負載均衡非常靠譜的,我們企業現在入口幾十萬的併發,在前端部署幾天Linux服務器安裝haproxy完全毫無壓力的,而且效果非常明顯,開始沒有用到haproxy的時候用戶一直反饋訪問非常卡,因爲開始是直接訪問Windows服務器,這樣不安全並且給業務服務器壓力也非常大,還有可能導致業務直接奔潰。Haproxy用戶負載均衡在Linux服務器上面跑還是非常好的,會話速率快、會話併發高、數據轉化率快這些都是haproxy的一些性能上面的優勢。

 

下面我們通過一個簡單的案例來實現HAproxy動靜分離效果,需求如下:

1、靜態頁面的請求發送到 web1;

2、動態頁面的請求發送到 web2。

 

一. haproxy實現應用動靜分離

Haproxy動靜分離案例拓撲圖

haproxy部署前注意事項:

(1)操作系統版本: centos 7.4(64位)

(2)功能角色及服務器ip相關信息:

角色名稱

ip信息

haproxy server

eth0:172.51.96.233/24  &&  eth1:192.168.3.22/24

static server

eth1:192.168.3.24/24

php server

eth1:192.168.3.9/24

tomcat server

eth1:192.168.3.9/24

二、操作部署

1、官網下載haproxy-1.8.9.tar.gz安裝包(需要翻牆);

# wgethttp://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.gz

2、創建haproxy運行用戶

# groupadd -r haproxy

# useradd -g haproxy -M -s /sbin/nologinhaproxy

3、源碼編譯安裝haproxy:

# tar zxvf haproxy-1.8.9.tar.gz

# cd haproxy-1.8.9/

# make TARGET=linux2628  PREFIX=/usr/local/haproxy

# make install PREFIX=/usr/local/haproxy

注意:TARGET=Linux31 是通過uname -a 來查看Linux內核版本的,kernel 大於2.6.28的用:TARGET=linux2628

# cd /usr/local/haproxy/

[root@web-3-22 haproxy]#ll

total 0

drwxr-xr-x 3 root root 21 May 23 15:56 doc

drwxr-xr-x 2 root root 21 May 23 15:56 sbin

drwxr-xr-x 3 root root 17 May 23 15:56 share

 

4、yum安裝:

[root@web-3-22 haproxy]# yum install haproxy.x86_64

[root@web-3-22 haproxy]#mkdiretc

[root@web-3-22 haproxy]# cd etc/

5、haproxy配置

[root@web-3-22 etc]# vim haproxy.cfg

global

maxconn 500000        # Max simultaneous connections from an upstream server

    spread-checks 5   # Distribute health checks with some randomness

    chroot /usr/local/haproxy

    daemon

nbproc 2

    user haproxy

    group haproxy

    log 127.0.0.1 local0

    log 127.0.0.1 local1 notice

    description haproxy server

defaults

        log     global

        mode    http

maxconn 10000

option  httplog

option  httpclose

option  dontlognull

option  forwardfor      except 127.0.0.0/8

        retries 3

        option redispatch

  balance roundrobin

        timeout http-request    10s

        timeout queue           1m

        timeout client          1m

        timeout server          1m

listen adimin_stats

      bind-process 1

      mode http

      stats enable

      stats hide-version

      bind :8888

      stats uri /admin?stats

      stats realm Haproxy\ Statistics

      stats auth hadmin:yhXV2WAbybXd1euzEXbEADAe

      stats refresh 30s

      stats admin if TRUE

listen  www

        bind *:80

maxconn 50000

        mode http

        log global

        option httplog

        option httpclose

        option forwardfor

        log global

default_backend default   #設置默認訪問資源頁面

        #定義當請求的內容是靜態內容時(圖片、視頻、js、css、html),將請求轉交給靜態資源服務器的acl規則      

aclurl_staticpath_beg  -i /static /images /img /javascript /stylesheets

aclurl_staticpath_end  -i .jpg .gif .png .css .js .html

aclhost_statichdr_beg(host)  -iimg. video. download. ftp. imags. videos.

        #定義當請求的內容是php內容時,將請求轉交給php動態資源服務器的acl規則   

aclurl_phppath_end     -i .php

        #定義當請求的內容是.jsp或.do內容時,將請求轉交給tomcat動態資源服務器的acl規則   

aclurl_jsppath_end     -i .jsp .do

        #引用haproxy的acl匹配規則

use_backendstatic_poolif  url_static or host_static

use_backendphp_poolif  url_php

use_backendtomcat_poolif  url_jsp

        #定義後端backend server

backend static_pool

option  httpchk GET /index.html

        server static1 192.168.3.24:80 cookie id1  check inter 2000 rise 2 fall 3

backend php_pool

option  httpchk GET /index.php

        server php1 192.168.3.9:80 cookie id1 check inter 2000 rise 2 fall 3

backend tomcat_pool

option  httpchk GET /index.jsp

        server tomcat1 192.168.3.9:8080 cookie id2 check inter 2000 rise 2 fall 3

#<----------------------default site for listen and frontend------------------------------------>

backend default

        mode http

option  httpchk GET /index.html

        server default 192.168.3.24:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000

 

# chown -R haproxy:haproxy /usr/local/haproxy/

# service haproxy start 

#啓動haproxy報錯,可能是端口衝突導致的,檢查haproxy listen配置,我這配置文件監聽的是80端口,此主機的80端口被httpd佔用了,停止httpd服務,再次啓動haproxy就正常了;

# netstat -ntlp|grephaproxy

 

6、服務狀態

service haproxy start             //啓動服務

service haproxy stop              //停止服務

service haproxystatus             //服務狀態

chkconfighaproxyon                //開機啓動

 

三、測試haproxy效果如下:

1、默認頁面:

http://192.168.3.22

2、測試html靜態資源

http://192.168.3.22/index.html

3、測試php動態資源

http://192.168.3.22/index.php

4、測試jsp動態資源

http://192.168.3.22/index.jsp

5、haproxy後臺監控頁面

http://192.168.3.22:8888/admin?stats

hadmin/yhXV2WAbybXd1euzEXbEADAe

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