实际应用环境中,往往需要根据业务请求将相关不同请求跳转到指定的后端server,比如客户静态资源请求交给静态资源server处理,php请求交给php server处理,jsp请求交给tomcat处理,即业务上的应用请求分离,而haproxy完全可以利用acl匹配规则实现这一目的 。
一. haproxy实现应用动静分离
如图所示为整体的拓扑图:
一.部署前说明: (1)系统版本: centos 6.6(64位) (2)角色及ip相关信息: 角色名称 | ip信息 | haproxy server | eth0:172.51.96.233/24 && eth1:192.168.0.233/24 | static server | eth1:192.168.0.247/24 | php server | eth1:192.168.0.235/24 | tomcat server | eth1:192.168.0.238/24 |
二. 部署操作 haproxy server上操作 编译安装haproxy
1.1 到haproxy官网下载haproxy源码包如下 cd ~
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.15.tar.gz
1.2 创建haproxy运行用户
groupadd -r haproxy
useradd -g haproxy -M -s /sbin/nologin haproxy
1.3 编译安装haproxy:
cd ~
tar zxvf haproxy-1.5.15.tar.gz -C /usr/local/src
cd /usr/local/src/haproxy-1.5.15
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
注意:TARGET=Linux26 是通过uname -a 来查看Linux内核版本的
1.4 创建haproxy主配置文件:
mkdir /etc/haproxy/
touch /etc/haproxy/haproxy.cfg
后端web server上操作
分别在img server,php server,tomcat server安装相应的web环境并创建测试页,其中:
(1)static server的访问url为:
,页面内容如下:
(2)php server的访问url为:http://192.168.0.235/info.php,页面内容如下:
(3)tomcat server的访问url为:http://192.168.238:8086/index.jsp,页面内容如下:
1.5 编辑haproxy主配置文件: 代码内容如下 global
log 127.0.0.1 local3
maxconn 204800
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
nbproc 1
pidfile /var/run/haproxy.pid
stats socket /usr/local/haproxy/stats
description haproxy server
defaults
log global
mode http
maxconn 10000
option httplog
option httpclose
option dontlognull
option forwardfor except 127.0.0.0/8
retries 3
option redispatch
option abortonclose
balance roundrobin
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen admin_status #设置haproxy监控状态
bind *:3030
mode http
log 127.0.0.1 local3 err
stats refresh 5s
stats uri /status #监控状态页面访问url
stats realm itnihaowelcome
stats auth admin:admin
stats hide-version
stats admin if TRUE
frontend http
bind *:88
maxconn 5000
mode http
log global
option httplog
option httpclose
option forwardfor
log global
default_backend default
acl img path_beg -i /image
use_backend jdhw if img
backend jdhw
option httpchk GET /index.html
server jdhw 192.168.0.246:80 cookie id01 check inter 2000 rise 2 fall 3 maxconn 5000
listen www
bind *:80
maxconn 5000
mode http
log global
option httplog
option httpclose
option forwardfor
log global
default_backend default #设置默认访问页面
#设置当访问的是静态资源的时候,将请求转交给static server上去
acl static path_end -i .jpg .gif .png .css .js .html
#设置当访问的是php页面的时候,将请求转交给php server上去
acl php path_end -i .php$
#设置当访问的是jsp页面的时候,将请求转交给tomcat server上去
#引用acl匹配规则
use_backend static if static
use_backend php if php
use_backend tomcat if tomcat
#定义后端backend server
backend static
option httpchk GET /index.html
server static1 192.168.0.247:80 cookie id1 check inter 2000 rise 2 fall 3
backend php
option httpchk GET /info.php
server php1 192.168.0.235:80 cookie id1 check inter 2000 rise 2 fall 3
backend tomcat
option httpchk GET /index.jsp
s
erver tomcat1 192.168.0.238:8086 cookie id2 check inter 2000 rise 2 fall 3
#<----------------------default site for listen and frontend------------------------------------>
backend default
mode http
option httpchk GET /index.html
server default 192.168.0.127:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000
重启haproxy服务:
server haproxy restart
|