HAproxy安装

Haproxy 介绍

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。

但要明确一点的,Haproxy并不是Http服务器。以上提到所有带反向代理均衡负载的产品,都清一色是WEB服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。

HAProxy的算法有如下8种:

roundrobin,表示简单的轮询
static-rr,表示根据权重,
leastconn,表示最少连接者先处理,
source,表示根据请求源IP,
uri,表示根据请求的URI;
url_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name
hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

Haproxy 编译安装

编译安装

tar zxf haproxy-1.4.22.tar.gz

tar zxf keepalived-1.2.7.tar.gz

uname -r

make TARGET=linux26 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

cp模板文件

cp -ar examples /usr/local/haproxy/

rsync -arvz /usr/local/haproxy/share/man /usr/share/

cp -ar tests /usr/local/haproxy/

cp doc/configuration.txt /usr/local/haproxy/

rsync -arvz soft/haproxy-1.4.22/examples/errorfiles /usr/local/haproxy/

cp examples/haproxy.cfg /usr/local/haproxy/etc/

cp examples/haproxy.init /etc/init.d/haproxy

日志支持,接口和你自己定义的有关系

vim /etc/syslog.conf

local3.* /var/log/haproxy.log

local0.* /var/log/haproxy.log

vim /etc/sysconfig/syslog

SYSLOGD_OPTIONS=”-r -m 0″

service syslog restart

Haproxy的相关启动参数

/usr/local/haproxy/sbin/haproxy –help

haproxy -f < 配置文件>

[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p ] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m < 内存限制M>] [{-sf|-st} pidlist…]

-d 前台,debug模式

-D daemon模式启动

-q 安静模式,不输出信息

-V 详细模式

-c 对配置文件进行语法检查

-s 显示统计数据

-l 显示详细统计数据

-dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用后台模式,程序跑在前台

-sf 程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后

/usr/local/haproxy/sbin/haproxy -c -f /usr/local/haproxy/etc/haproxy.cfg # 对haproxy 语法做检查

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg -sf cat /var/run/haproxy.pid # reload

killall haproxy 或者 kill -9 pidof haproxy

Haproxy 配置文件解说

cat /usr/local/haproxy/etc/haproxy.cfg

全局配置信息#############参数是进程级的,通常和操作系统(OS)相关

global

maxconn 20480 #默认最大连接数

log 127.0.0.1 local3 #[err warning info debug]

chroot /usr/local/haproxy #chroot运行的路径

uid 99 #所属运行的用户uid

gid 99 #所属运行的用户组

daemon #以后台形式运行haproxy

nbproc 1 #进程数量(可以设置多个进程提高性能)

pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件

ulimit-n 65535 #ulimit的数量限制

默认的全局设置

defaults

log global

mode http #所处理的类别 (#7层 http;4层tcp )

maxconn 20480 #最大连接数

option httplog #日志类别http日志格式

option httpclose #每次请求完毕后主动关闭http通道

option dontlognull #不记录健康检查的日志信息

option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器

option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接

stats refresh 30 #统计页面刷新间隔

retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置

balance roundrobin #默认的负载均衡的方式,轮询方式

balance source #默认的负载均衡的方式,类似nginx的ip_hash,可以固定session

balance leastconn #默认的负载均衡的方式,最小连接

contimeout 5000 #连接超时5s , 单位是ms

clitimeout 50000 #客户端超时

srvtimeout 50000 #服务器超时

timeout check 2000 #心跳检测超时

注: 时间的设置,单位为毫秒ms

1ms = 1/1000 second

1m = 60s = 60000 ms

1h = 60m = 3600s

1d = 24h = 1440m = 86400s = 864000000ms

监控页面的设置

listen admin_status #Frontend和Backend的组合体,监控组的名称,按需自定义名称

bind :65532 #监听端口

mode http #http的7层模式

log 127.0.0.1 local3 err #错误日志记录

stats refresh 5s #每隔5秒自动刷新监控页面

stats uri /admin?stats #监控页面的url

stats realm Haproxy\ Statistics #监控页面的提示信息

stats auth yangcan:yangcan #监控页面的用户和密码yangcan,可以设置多个用户名

stats auth admin:admin #监控页面的用户和密码admin

stats hide-version #隐藏统计页面上的HAproxy版本信息

stats admin if TRUE #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)

网站监测listen配置
此用法主要是监控haproxy后端服务器的监控状态

listen site_status

bind :1081 #监听端口

mode http #http的7层模式

log 127.0.0.1 local3 err #[err warning info debug]

monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503

acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于2台时返回true

acl site_dead nbsrv(server_blog) lt 2

acl site_dead nbsrv(server_bbs) lt 2

monitor fail if site_dead #当满足策略的时候返回503,网上文档说的是500,实际测试为503

monitor-net 10.0.0.103/24 #来自10.0.0.103的日志信息不会被记录和转发

monitor-net 10.0.0.25/24

frontend配置
注意,frontend配置里面可以定义多个acl进行匹配操作

frontend http_80_in

bind :80 #监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似

mode http #http的7层模式

log global #应用全局的日志配置

option httplog #启用http的log

option httpclose #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式

option forwardfor #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP

errorfile 403 /etc/haproxy/errorfiles/403.http

errorfile 500 /etc/haproxy/errorfiles/500.http

errorfile 502 /etc/haproxy/errorfiles/502.http

errorfile 503 /etc/haproxy/errorfiles/503.http

errorfile 504 /etc/haproxy/errorfiles/504.http

HAProxy的日志记录内容设置

capture request header Host len 40

capture request header Content-Length len 10

capture request header Referer len 200

capture response header Server len 40

capture response header Content-Length len 10

capture response header Cache-Control len 8

acl策略配置

acl baby_web hdr_reg(host) -i ^(blog80.baby.local |station80.baby.local)$

如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写,主要用于redirect到www80.baby.local上;

acl baby_blog hdr_dom(host) -i www80.baby.local

如果请求的域名满足www80.baby.local 返回true -i是忽略大小写

acl baby hdr(host) -i baby.local

如果请求的域名满足baby.local 返回true -i是忽略大小写

acl file_req url_sub -i killall=

在请求url中包含killall=,则此控制策略返回true,否则为false

acl dir_req url_dir -i allow

在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false

acl missing_cl hdr_cnt(Content-length) eq 0

当请求的header中Content-length等于0时返回true

acl策略匹配相应

block if missing_cl

当请求中header中Content-length等于0阻止请求返回403

block if !file_req || dir_req

block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求

redirect prefix http://www80.baby.local code 301 if baby

当访问itnihao.cn的时候,用http的301挑转到http://10.0.0.103

reqisetbe ^[^]*/(img|css)/ server_web
reqisetbe ^[^]*/bbs/ server_blog

reqisetbe 关键字定义,根据定义的关键字选择backend

use_backend server_web if baby_web

当满足baby_web的策略时使用server_web的backend

use_backend server_blog if baby_log

当满足baby_log的策略时使用server_blog的backend

default_backend server_bbs

以上都不满足的时候使用默认server_bbs的backend

注: redirect 和 reqisetbe 需要放置在 use_backend 之前

配置文件实例
global

maxconn     50000
chroot      /var/lib/haproxy
user        haproxy
group       haproxy
daemon

defaults

log                     global
option            tcplog
log                 127.0.0.1 local3 debug
option            redispatch 
option             abortonclose
option                  dontlognull
maxconn             5000000
timeout connect         2000000
timeout client          2000000
timeout server          2000000

listen lot_10002

bind 0.0.0.0:10002
mode tcp
balance roundrobin
server lot_14_10002 172.16.1.14:10002 check
server lot_15_10002 172.16.1.15:10002 check

listen lot_9002

bind 0.0.0.0:9002
mode tcp
balance roundrobin
server lot_15 172.16.1.15:9002 check

listen lot_10004

bind 0.0.0.0:10004
mode tcp
balance  roundrobin
server lot_14 172.16.1.14:10004 check

listen lot_11201

bind 0.0.0.0:11201
mode tcp
balance roundrobin
server lot_14 172.16.1.14:11201 check

listen lot_10401

bind 0.0.0.0:10401
mode tcp
balance source
server lot_22 172.16.1.22:10401 check

listen admin_stats #定义HAProxy监控页面

bind 0.0.0.0:9188
mode http
#log 127.0.0.1 local3 err
stats refresh 30s #HAProxy监控页面统计自动刷新时间。
stats uri /haproxy-status #设置监控页面URL路径。 http//IP:9188/haproxy-status可查看
stats realm welcome login\ Haproxy #统计页面密码框提示信息
stats auth admin:123456 #登录统计页面用户和密码
stats hide-version #隐藏HAProxy版本信息
stats admin if TRUE #设置TURE后可在监控页面手工启动关闭后端真实服务器 

添加新评论