天天看點

haproxy

一緻性哈希:

首先用伺服器的某個特征,比如主機名或者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,如需轉載請自行聯系原作者