一緻性哈希:
首先用伺服器的某個特征,比如主機名或者IP哈希後除以2的32次方,會落到環上的某個點。
然後把客服請求的特征比如ip,hash後的值除以2的32次方,必定會落到環上,順時針第一個伺服器
就為其提供服務。一個伺服器挂掉,自動順時針找下個伺服器提供服務。
偏斜:啟用虛拟節點,一個伺服器虛拟多個伺服器到環上面。
LB:
tcp
lvs,haproxy,nginx
application layer:
http:haproxy,nginx,ats,apache
mysql:mysql-proxy
nginx:
proxy_pass
upstream
haproxy:
frontend
use_backend
default_backend
backend
balancer
server
listen:
default
配置檔案:haproxy.cfg
基本配置
#---------------------------------------------------------------------
# main frontend which proxys to the backends
frontend main *:80
default_backend websrvs
# static backend for serving up images, stylesheets and such
backend websrvs
balance roundrobin
server web1 172.16.6.15:80 check
server web2 172.16.6.16:80 check
server web3 172.16.6.17:80 check
其他全局重要的參數:
nbproc:啟動多個程序
ulimit-n:每個程序能打開最大檔案描述符數目
maxconn:每個程序的最大并發連接配接數
spread-checks:時間間隔檢查後端伺服器
參數:
balance:指明排程算法:
動态:權重可動态調整
靜态:調整權重不會實時生效,需要重新開機
roundrobin:輪詢,可以動态調整,每個後端伺服器最多4128個并發連接配接。
static-rr:基于權重進行輪詢。屬于靜态方法,某個後端伺服器支援的連接配接數量無限制
leastconn:最小連接配接數。僅适用于長連接配接的會話,動态方法
source:源位址哈希。
hash-type:map-based:取模法:靜态
consistent:一緻性哈希;動态
uri:對URI的請求左半部分或者整個URI進行hash運算。同一個URI的請求發送到同一台 伺服器,常用于緩存伺服器。
url_param:根據url指定的參數的值進行排程,把值做hash計算(如:同一個使用者名稱
排程到同一台,做到使用者綁定),并除以總權重;
hdr(name):根據請求封包中指定的header(如:user_agent,referer,hostname)進行
排程,把指定的内容hash後排程
bind:指定端口
frontend main
bind *:80
bind *:8080
mode:haproxy的工作模式
預設為TCP
tcp,http,health
log;定義日志
vim /etc/rsyslog.cfg
1.啟用UDP 514端口
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
2.添加:
local2.* /var/log/haproxy.log
3.service rsyslog restart
maxconn:設定一個前段最大連接配接數,各個前段之和不能超過global段值
default_backend:
default_backend:指定預設後端
use_backend:
server:
server <name><address>[:port][param*]
check:健康狀态檢查
inter:檢查間隔時間,預設為2000ms
fall:檢查幾次up--down,預設3次
rise:down-->up
cooke:為指定的server設定cookie
maxconn:此伺服器的最大并發連接配接數
maxqueue:請求隊列最大長度
observe:根據流量判斷後端server的健康狀态
weight:權重,預設1,最大256,0不被排程
redir:啟用重定向功能
基于浏覽器cookie實作session sticky
balance roundrobin
cookie SERVERID insert nocache indirect
server web1 172.16.6.15:80 check cookie websrv1
server web2 172.16.6.16:80 check cookie websrv2
server web3 172.16.6.17:80 check cookie websrv3
要點:每個server有自己唯一的cookie辨別;
在backend中定義為使用者請求調用完成後操作其cookie
stats enable
listen statistics
bind *:8888
stats enable
stats hide-version #隐藏版本
stats uri /haproxyadmin?stats #通路路徑
stats realm "HAPorxy\ Statistics"
stats auth admin:admin #登入使用者名和密碼
stats admin if TRUE #添加管理伺服器功能
stats refresh 30s #頁面自動重新整理時間
option httplog:記錄更詳細的日志
option forwardfor:允許在發完伺服器的請求首部中插入X-Forwarded-For首部
在後端httpd服務配置檔案中修改為
LogFormat "%{X-Forwarded-For}i %l %u %t 。。。。。。。
errorfile:錯誤頁
errorfile 400 /etc/haproxy/errorpages/400.http
errorfile 403 /etc/haproxy/errorpages/403.http
errorfile 503 /etc/haproxy/errorpages/503.http
ACL
定義,及調用,實作動靜分離。
本文轉自阿倫艾弗森 51CTO部落格,原文連結:http://blog.51cto.com/perper/1981365,如需轉載請自行聯系原作者