haproxy 介绍
1 工作在ISO 七层 根据http协议(或者工作在ISO四层 根据tcp协议) 提供web服务的负载均衡调度器
01.
负载均衡调度器分类
02.
工作在四层:
03.
# lvs
04.
工作在七层:
05.
# nginx (web,http reverse proxy,cache)
06.
# haproxy (http reverse proxy,tcp proxy)
07.
# tcp: 实现<a href="http://www.it165.net/database/dbmy/" target="_blank" class="keylink">MySQL</a>的读写中读的负载均衡
08.
# ats (apache traffic server)
09.
# perlbal
10.
# pound
11.
# squid
12.
# varnish
13.
以上程序都可以实现服务的向外拓展;
haproxy特性
haproxy 当前版本为1.3 1.4,下面我们介绍1.4版本的特性
01.
# 客户端侧的长连接(client-side keep-alive)
02.
# TCP加速(TCP speedups)
03.
# 响应池(response buffering)
04.
# RDP协议
05.
# 基于源的粘性(source-based stickiness)
06.
# 更好的统计数据接口(a much better stats interfaces)
07.
# 更详细的健康状态检测机制(more verbose health checks)
08.
# 基于流量的健康评估机制(traffic-based health)
09.
# 支持HTTP认证
10.
# 服务器管理命令行接口(server management from the CLI)
11.
# 基于ACL的持久性(ACL-based persistence)
12.
# 日志分析器
官网站点:haproxy.1wt.eu
haproxy 架构图
haproxy.cfg 配置文件详解
安装
#yum -y inistall haproxy
配置文件路径
/etc/haproxy/haproxy.cfg
01.
(1)配置由两部分组成
02.
#global settings: 对haproxy进程自身属性的设定----------全局设定段
03.
#proxies: 对代理的设定 -----------------代理设定段
04.
defaults
05.
frontend
06.
backend
07.
listen
08.
其中defaults为proxies提供默认属性,frontend接受客户端的请求,backend连接后端的上游服务器(类似于nginx的upstream),listen是特定的frontend与backend的组合
09.
(2)定义一个完整的代理的方式:
10.
frontend
11.
backend
12.
listen
13.
(3)defaults段分析
14.
15.
# option httpclose:使用短连接
16.
# option redispath:使用cookie保持会话,如果后端的server宕机,则使用redispath 重定向另一个路径继续保持会话;
17.
# option http-server-close :当keep-alive超时时,使用该选项在服务器上关闭会话
18.
# timeout connect :haproxy转发到后边upstream server 时等待的时长
19.
# timeout client :客户端非活动状态的超时时长
20.
# timeout server : haproxy和后边的服务器段保持一个会话,当后台服务器down掉后,haproxy等待的超时时间
21.
# timeout-keep-alive:定义保持连接模式的超时时长
22.
# timeout-check : 建立状态检测时间的超时时间
23.
# maxconn :每一个server最大并发连接数
负载均衡调度方法
1.
格式:balance roundrobin| static-rr| leastconn |
source
| uri | uri_param | hdr(&
lt
;name&
gt
;) | rdp-cookie(name)
01.
调度方法解析
02.
#roundrobin :属于加权轮询 (动态) 支持服务器活动时修改其权重,服务器下线后重新上线时支持慢启动
03.
#static-rr : 属于加权轮询(静态)不支持服务器活动时修改,需要重启服务才能生效
04.
# 老服务器重新上线上时,立刻会收到大批量的请求
05.
#leastconn :支持动态修改权重,慢启动
06.
#source :默认为(静态)方法,hash/ 源ip 取模算法,支持hash-type调整为动态
07.
#uri :默认为(静态)方法,hash/weight 取模算法,支持hash-type来调整
08.
#url-params:默认为(静态)方法,hash/wgith 算法,支持hash-type调整
09.
#hdr (<name>):默认为静态方法, 先对<name>做hash计算然后 hash/weight 计算,支持hash-type调整
01.
调度方法的使用总结
02.
#1、调度众多的<a href="http://www.it165.net/database/dbmy/" target="_blank" class="keylink">MySQL</a>从服务器,用什么调度方法?
03.
leastconn
04.
#2、调度web图片服务器组,用什么调度方法?
05.
roundrobin
06.
#3、调度web图片服务器组,用什么调度方法?
07.
source
或者 cookie
08.
#4、调度web缓存服务器组,用什么调度方法?
09.
uri
10.
hash
-
type
:
11.
map-based (默认的静态的
hash
表)
12.
consistent(动态的一致性
hash
) ---------在后端的cache服务器上使用,否则会导致服务器的加入或者退出时 服务器群瘫痪
haproxy 的工作模式 (使用mode参数)
1.
http :http协议 --------haproxy的价值体现于此
2.
# 对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制;
3.
4.
tcp :haproxy在客户端和upstream server之间建立一个全双工的连接
5.
# 不会对应用层协议做任何检查
6.
# SSL 、MySQL、SSL等都应该使用此模式;
7.
# 默认模式!
指定haproxy日志
01.
# log global : 使用全局配置中定义的日志服务器;
02.
# log <address> <facility> [<level> [<minlevel>]]
03.
# capture request header <HEADER> len <LENGTH>
04.
# capture resopense header <HEADER> len <LENGTH>
05.
实例:在frontend中定义一个日志
06.
(1)编辑rsyslog.conf
07.
#vim /etc/rsyslog.conf 在日志服务器上先定义一个日志
08.
local3.* /var/log/hawebsrv.log
09.
#service rsyslog restart
10.
(2)编辑haproxy.cfg
11.
#vim /etc/haproxy/haproxy.cfg
12.
frontend websrv
13.
log 127.0.0.1 local3
14.
bind *:80
15.
default_backend webservers
16.
#serivce haproxy reload
17.
(3)haproxy服务器测试
18.
#tail /var/log/hawebsrv.log
haproxy中的ACL
1.
格式:acl &
lt
;aclname&
gt
; &
lt
;criterion&
gt
; [flags] [oprator] &
lt
;value&
gt
;
2.
3.
value: 支持整数或者整数范围
4.
支持字符串
5.
支持正则表达式
6.
支持ip地址和网络地址
1.
ACL例子
2.
# acl url_static path_beg /static /images /img /css
3.
# acl url_static path_end .gif .png .jpg .css .js
4.
# acl host_www hdr_beg(host) -i www
5.
# acl host_static hdr_beg(host) -i img. video. download. ftp.
6.
# use_backend static if host_static or host_www or url_static
7.
# use_backend www if host_www
1.
实现访问控制
2.
http-request:7层过滤 (借助于定义好的acl实现)
3.
tcp-request: 4层过滤 (借助于定义好的acl实现)
haproxy 动静分离的实现
架构图
1、 环境配置
01.
haproxy服务器配置
02.
外网网卡
03.
#ifconfig eth0 172.16.13.2/16 up
04.
#route add default gw 172.16.0.1
05.
内网网卡
06.
#ifconfig eth1 192.168.20.1/24 up
07.
两台上游服务器配置
08.
server1 配置
09.
#ifconfig eth0 192.168.20.11/24
10.
#route add default gw 192.168.20.1
11.
提供页面
12.
#vim /var/www/html/index.html
13.
&
lt
;h1&
gt
;node1.linux.com&
lt
;/h1&
gt
;
14.
#service httpd start
15.
server2配置
16.
#ifconfig eth0 192.168.20.12/24 up
17.
#route add default gw 192.168.20.1
18.
提供页面
19.
#vim /var/www/html/index.html
20.
&
lt
;h1&
gt
;node2.linux.com&
lt
;h1&
gt
;
21.
#service httpd start
2、 安装配置haproxy
1.
# yum -y install haproxy 安装haproxy
2.
#vim /etc/haproxy/haproxy.cfg 编辑配置文件自定义一个backend和frontend,注释原有的内容
3.
frontend websrv *:80
4.
default_backend webservers
5.
backend webservers
6.
balance roundrobin
7.
server node1 192.168.20.11:80 check
8.
server node2 192.168.20.12:80 check
3、 客户端测试
此时说明 haproxy服务器将客户的请求以roundrobin算法 反向代理给后端的服务器!
4、启用全局日志功能
01.
(一)编辑rsyslog.conf
02.
#vim /etc/rsyslog.conf 开启如下行
03.
# Provides UDP syslog reception
04.
$ModLoad imudp
05.
$UDPServerRun 514
06.
# Provides TCP syslog reception
07.
$ModLoad imtcp
08.
$InputTCPServerRun 514
09.
添加日志
10.
local2.* /var/log/haproxy.log
11.
12.
#service rsyslog restart 重启服务
13.
(二)编辑haproxy.cfg
14.
# vim /etc/haproxy/haproxy.cfg 开启如下行
15.
log 127.0.0.1 local2
16.
# service haproxy restart 重启服务
17.
(三)日志查看
18.
#tail -f /var/log/haproxy.log
接下来让我们来拓展haproxy的功能
5 、调度算法 uri的实现
01.
1)后端服务器 server1 与 server2 同时创建多个页面
02.
server1
03.
#cd /var/www/html/
04.
# for i in {1..10}; do echo "<h1>node1.test$i</h1>" > test$i.html; done
05.
server2 方法同server1
06.
2)更改haproxy.cfg的配置文件中的调度算法
07.
balance uri
08.
3)客户端测试
基于172.16.13.2/test1.html 该uri,haproxy服务器反向代理至后台服务器至同一台服务器server2
6、基于cookie实现会话绑定
01.
1)编辑haproxy.cfg配置文件
02.
#vim /etc/haproxy/haproxy.cfg 内容如下
03.
frontend websrv
04.
bind *:80
05.
default_backend webservers
06.
backend webservers
07.
cookie node insert nocache
08.
balance roundrobin
09.
server node1 192.168.20.11:80 check cookie node1
10.
server node2 192.168.20.12:80 check cookie node2
11.
2)客户端测试
上图可见,基于cookie实现了客户端的请求与后端服务器server2的会话绑定
7、haproxy管理界面---stats enable
1.
#vim /etc/haproxy/haproxy.cfg 增加一个listen段,如下所示
2.
listen statspage
3.
bind *:8009 -------侦听端口
4.
stats
enable
-------开启stats
5.
stats hide-version -----隐藏版本
6.
stats auth admin:admin ----登录验证信息
7.
stats admin
if
TRUE ----实现在管理界面上对所有backend服务器管理
8.
stats uri /admin?stats ----登录的uri路径
8、haproxy动静分离的实现
01.
1)server2 服务器安装php
02.
#yum -y install php php-mysql
03.
提供php动态页面
04.
#vim /var/www/html/index.php
05.
&
lt
;h1&
gt
;node2.linux.com&
lt
;/h1&
gt
;
06.
&
lt
;?php
07.
phpinfo();
08.
?&
gt
;
09.
10.
2)重新配置haproxy配置文件
11.
#vim /etc/haproxy/haproxy.cfg 定义frontend 和 backend
12.
frontend websrvs
13.
bind *:80
14.
acl url_static path_beg -i /static /images /javascript /stylesheets
15.
acl url_static path_end -i .jpg .gif .png .css .js .html
16.
acl host_static hdr_beg(host) -i img. video. download.
ftp
. imags. videos.
17.
acl url_php path_end -i .php
18.
use_backend static
if
url_static or host_static
19.
use_backend dynamic
if
url_php
20.
default_backend dynamic
21.
backend static
22.
balance roundrobin
23.
server node1 192.168.20.11:80 check maxconn 30000
24.
25.
backend dynamic
26.
balance roundrobin
27.
server node2 192.168.20.12:80 check maxconn 1000
28.
# service haproxy restart
29.
3) 客户端测试 动静分离
如图所示:静态页面代理至server1服务器,动态页面代理至server2 服务器,实现
PS: 个人水平有限,不足之处请指出。关于更多信息请参考haproxy官方网站。
[转载自 http://www.it165.net/admin/html/201405/3013.html]
相关推荐
负载均衡 haproxy学习 配置
【HAProxy】是一款高效、免费的负载均衡器,专注于提供高可用性和TCP及HTTP层的负载均衡服务。它支持虚拟主机和会话保持,适用于处理大量并发连接的大型Web站点。HAProxy以其事件驱动的单一进程模型而著名,这种模型...
例如,可以通过ACL实现动静分离,将静态资源请求转发到专门的静态服务器,而动态请求则转发到应用服务器。 HAProxy配置文件的灵活性和强大功能使得它成为许多大型网站和应用程序的首选负载均衡解决方案。正确理解和...
HAProxy用法详解 全网最详细中文文档 包括架构、安装、配置详解
一、Haproxy概述; 二、Haproxy原理实现; 三、Nginx、LVS、Haproxy对比; 四、Haproxy配置文件讲解; 五、案例:Haproxy+Nginx+Tomcat搭建高可用集群;
【标题】:“第三十四章:Haproxy+Nginx+Tomcat实现动静页面分离1” 【描述】:“本文主要介绍了如何使用Haproxy、Nginx和Tomcat来实现动静页面分离,强调了Haproxy作为七层应用代理的特性,如HTTP代理,配置简单,...
haproxy配置文件属性详解
【HAProxy详解与Ubuntu安装配置】 HAProxy是一款高效、免费且可靠的负载均衡器,它专为高可用性和负载均衡TCP及HTTP应用而设计。这款工具能够处理极高的并发连接,官方数据显示最高可达10Gbps的并发量。HAProxy特别...
HAProxy——动静分离1. 在HAProxy端配置动静分离策略2. 在HAProxy端配置http3. 配置server2和server34. 测试 1. 在HAProxy端配置动静分离策略 server1: cd /etc/haproxy/ vim haproxy.cfg 注释 93 #listen westos ...
用haproxy实现RDP会话负载均衡 HAProxy是一款免费、快速、可靠的解决方案,提供高可用性、负载均衡和基于TCP和HTTP应用的代理。它支持虚拟主机,运行在当前的硬件上,可以支持数以万计的并发连接。HAProxy特别适用...
haproxy是一个传统的负载均衡软件,但是他可以实现通过协议判断来实现数据包转发的功能 比如80端口 http的数据流就转给8080端口 rdp数据流转给 3389 ssh数据流就转给22端口 实现对外端口的复用。 本附件里面的例子就...
在本篇文章中,我们将深入探讨HAProxy的实战应用,包括其在web架构中的角色、负载均衡的基本概念、HAProxy的安装与基础配置、调度算法以及高级配置选项。 首先,让我们来理解一下web架构。Web架构通常由多个组件...
本文将详细介绍如何使用Mysql、Haproxy、Mycat、PXC、Zookeeper实现高可用集群,涵盖了整个架构图、应用程序的访问流程、数据的读写分离、负载均衡、数据库节点的搭建、Zookeeper的应用等多个方面。 整体架构图 在...
Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux、配置防火墙 1、vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq...
### HAProxy与Nginx实现负载均衡的关键知识点 #### 一、HAProxy简介与特性 HAProxy是一款开源的、高效且可靠的负载均衡器,专为处理大规模Web流量设计。其核心功能包括: - **高可用性**:HAProxy能够确保在主...
HAProxy是一款广泛使用的开源软件,可以实现高性能、高可用性的负载均衡解决方案。它支持多种协议,包括TCP和HTTP,同时支持虚拟主机,允许用户通过单一IP地址处理多个网站。本文将详细介绍如何在Linux环境下安装和...
HaProxy + Keepalived实现高可用负载均衡
Mycat本身可以实现读写分离和分库分表,但是为了实现高可用性,需要额外的技术支持,HAProxy和Keepalived就扮演了这样的角色。 HAProxy是一个高效的TCP/HTTP负载均衡器,它可以将请求分发到后端的多个服务器上,...