HAproxy+Nginx

****************************前端

*********haproxy************nginx

****************************web

 

1.簡介:haproxy  七層代理:http ,擅長於網站式的負載均衡,nginx也是七層代理。redis

HAProxy實現了一種事件驅動, 單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管理的用戶空間(User-Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。算法

 

 

2.自定義配置vim

   (1)參數解釋:    緩存

        log         127.0.0.1 local2    [日誌信息,local2爲日誌設備] 服務器

        chroot      /var/lib/haproxy    [默認全局家目錄]cookie

maxconn     4000[最大鏈接數(這個每一層也能夠寫,以defaults爲準)]多線程

daemon[打入後臺運行]


mode    http[http 七層,tcp 四層]

option      httpdlog[httpd 日誌格式]

option    dontlognull[禁用空連接日誌]

retries    3[重試3次失敗認爲服務器不可用]

option     redispatch[當client鏈接到掛掉的機器時,從新分配到健康的主機]

 

   2)禁止main,自定義寫入相應配置

listen admin *:8080

        stats enable

        stats uri /status[haproxy監控頁面]

        stats auth admin:redhat

        stats refresh 5s

 

frontend hxl *:80[前端策略設置]

        acl url_static       path_beg       -i  /images

        acl url_static       path_end       -i .jpg .gif .png

 

        use_backend static      if url_static

        default_backend app

 

backend static

        balance roundrobin[負載均衡算法]

        server web1 172.25.254.162:80 cookie applinst1 check inter 2000 rise 2 fall 5  [2000是檢測心跳頻率,2s]

 

backend app

        balance roundrobin

        server web2 172.25.254.163:80 cookie applinst2 check inter 2000 rise 2 fall 5

~       server local 172.25.254.161:8000backup          [1.作本機8000端口的一個備錯信息,若全部機器都down則啓動;2.而且是默認badhost的重定向位置]     


    (3)禁止某IP訪問並重定向地址

acl badhost src 172.25.254.60

block if badhost

      1.errorloc 403 http://172.25.254.161:8000[若是報錯信息爲403,則重定向]

      2.redirect location http://172.25.254.161:8000 if badhost[若是是badhost,則重定向]


    (4)301永久重定向

acl hxl.org hdr_beg(host) -i hxl.org[域名重定向]

        acl 172.25.254.161 hdr(host) -i 172.25.254.161[IP重定向到域名]

 

redirect code 301 location http://www.hxl.org if hxl.org  [對應域名重定向]

        redirect code 301 location http://www.hxl.org if 172.25.254.161   [對應IP重定向到域名]

 

    (5)GET/HEAD PUT/POST 重定向

 acl read method GET

         acl read method HEAD

         acl write method PUT

         acl write method POST

 

 use_backend app         if write[若是是wirte操做,即PUT/POST則定向到app模塊]

         default_backend static[默認是訪問static 模塊]

 

測試:在162和163同時下載PHP上傳頁面,而且創建一個upload目錄,給予它777權限;162在 static模塊,163 app 模塊。

     如今根據PHP頁面信息上傳一個對應類型和對應大小的文件,查看162,163的upload目錄,正確的話,上傳的文件存在於163的upload目錄中

 

3)八種算法

      1.balance roundrobin        [ 輪詢,軟負載均衡基本都具有這種算法 ]

2.balance static-rr     [ 加權輪訓 ]

3.balance leastconn [ 最少鏈接者先處理 ]

4.balance source [ 根據請求源IP ]

5.balance uri   [ 根據請求的URI ]

6.balance url_param [ 根據請求的URL參數 ]

7.balance hdr(name)          [ 根據HTTP請求頭來鎖定每一次HTTP請求 ]

8.balance rdp-cookie(name)   [ 根據據cookie(name)來鎖定並哈希每一次TCP請求]

 

 

 

*****************************

************nginx************

*****************************

 

1.簡介百度個簡介,這個東西嘛,本身也能總結,但就沒百度這樣說的堂而皇之而已嘛

做用於七層

Nginx 是一個高性能的HTTP反向代理服務器,也是一個IMAP/POP3/SMTP服務器。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名

由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東新浪網易騰訊淘寶等。

 

 

2.下載配置

1)在官網上下載穩定版的nginx,目前測試的爲nginx-1.10.3。

        【在編譯以前,要刪除Nginx版本號】vim /nginx-1.10.3/src/core/nginx.h

2)安裝源碼所需的包,並連接位置

    ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module

make && make install

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


 (3)經常使用命令

nginx [開啓]

nginx -s reload[重載]

nginx -s stop[關閉]

 

3.配置 nginx.conf文件


user  nginx nginx;

worker_processes  auto;

#worker_cpu_affinity 01 10;【關於work_cpu配置,>2個能夠配置該項,例如四核 0001 0010 0100 1000】


events {

        use epoll;【多進程非阻塞】

    worker_connections  2048;【每一個worker的最大限制數,通常爲內核的2048倍】

}

 

 

http {

    include       mime.types;

    default_type  application/octet-stream;

 

        upstream hxl{【添加upstream組爲hxl,並指定Real Server】

        server 172.25.254.162;

        server 172.25.254.163;

 

        }

 

...

 

server{

                listen 80;

                server_name www.hxl.org;【添加服務域名,必須是以域名訪問,至關於虛擬的vip是nginx主機的ip】

                location / {

                        proxy_pass http://hxl;【轉發隊列爲上述hxl組中的Real Server】

 

                }

        }

 

 

 

 

 

 

 

【補錄 haproxy 算法,nginx epoll 模式】

        epoll是Linux內核爲處理大批量文件描述符而做了改進的poll,是Linux下多路複用IO接口select/poll的加強版本,它能顯著提升程序在大量併發鏈接中只有少許活躍的狀況下的系統CPU利用率。另外一點緣由就是獲取事件的時候,它無須遍歷整個被偵聽的描述符集,只要遍歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合就好了。epoll除了提供select/poll那種IO事件的水平觸發(Level Triggered)外,還提供了邊緣觸發(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態,減小epoll_wait/epoll_pwait的調用,提升應用程序效率

相關文章
相關標籤/搜索