****************************前端
*********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的調用,提升應用程序效率