HAProxy的是一个免费的、开源的的tcp/http反向代理工具、负载均衡器,是一个企业非常快速和可靠的安全的解决方案,提供高可用性、高并发性,负载均衡和代理对TCP和基于HTTP的应用程序。它特别适用于流量非常高的网站。它已成为事实上的标准开源负载均衡器,现在随大多数主流Linux发行版一起提供,在互联网领域应用也是非常广泛,受欢迎的第三方工具。

在企业实际应用环境中,往往会根据业务请求将相关不同请求跳转到指定的后端服务器,比如客户静态资源请求交给后端静态资源服务器处理,php请求交给后端动态资源Apache服务进行处理,jsp请求交给后端动态资源tomcat服务进行处理,即业务上的应用请求分离,我们这里可以通过haproxy完全可以利用acl匹配规则实现这一目的,以实现动静分离效果;除了haproxy外,其实还可以通过nginx的acl规则也可以完全实现,不过这些强大的工具往往是在Linux服务器上面跑才能发挥最佳性能,其实这些东西安装和配置非常简单,只需要有Linux基础,懂得一些Linux基础的命令就完全可以实现强大的功能,我也是在《Linux就该这么学》这本树入门Linux,非常适合于初学者。

现在好多企业购买负载均衡器硬件设备,其实这些硬件设备都是通过潜入软件来实现的,可能性能还没有那么好,haproxy实现tcp和http负载均衡非常靠谱的,我们企业现在入口几十万的并发,在前端部署几天Linux服务器安装haproxy完全毫无压力的,而且效果非常明显,开始没有用到haproxy的时候用户一直反馈访问非常卡,因为开始是直接访问Windows服务器,这样不安全并且给业务服务器压力也非常大,还有可能导致业务直接奔溃。Haproxy用户负载均衡在Linux服务器上面跑还是非常好的,会话速率快、会话并发高、数据转化率快这些都是haproxy的一些性能上面的优势。

下面我们通过一个简单的案例来实现HAproxy动静分离效果,需求如下:

1、静态页面的请求发送到 web1;

2、动态页面的请求发送到 web2。

一. haproxy实现应用动静分离

Haproxy动静分离案例拓扑图

haproxy部署前注意事项:

(1)操作系统版本: centos 7.4(64位)

(2)功能角色及服务器ip相关信息:

角色名称

ip信息

haproxy server

eth0:172.51.96.233/24 && eth1:192.168.3.22/24

static server

eth1:192.168.3.24/24

php server

eth1:192.168.3.9/24

tomcat server

eth1:192.168.3.9/24

二、操作部署

1、官网下载haproxy-1.8.9.tar.gz安装包(需要翻墙);

# wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.g

2、创建haproxy运行用户

# groupadd -r haproxy

# useradd -g haproxy -M -s /sbin/nologin haproxy

3、源码编译安装haproxy:

# tar zxvf haproxy-1.8.9.tar.gz

# cd haproxy-1.8.9/

# make TARGET=linux2628 PREFIX=/usr/local/haproxy

# make install PREFIX=/usr/local/haproxy

注意:TARGET=Linux31 是通过uname -a 来查看Linux内核版本的,kernel 大于2.6.28的用:TARGET=linux2628

# cd /usr/local/haproxy/

[root@web-3-22 haproxy] # ll

total 0

drwxr-xr-x 3 root root 21 May 23 15:56 doc

drwxr-xr-x 2 root root 21 May 23 15:56 sbin

drwxr-xr-x 3 root root 17 May 23 15:56 share

4、yum安装:

[root@web-3-22 haproxy] # yum install haproxy.x86_64

[root@web-3-22 haproxy] # mkdir etc

[root@web-3-22 haproxy] # cd etc/

5、haproxy配置

[root@web-3-22 etc] # vim haproxy.cfg

global

maxconn 500000 # Max simultaneous connections from an upstream server

spread-checks 5 # Distribute health checks with some randomness

chroot /usr/ local/haproxy

daemon

nbproc 2

user haproxy

group haproxy

log127.0.0.1 local0

log127.0.0.1 local1 notice

deion haproxy server

defaults

logglobal

mode http

maxconn 10000

option httplog

option httpclose

option dontlognull

option forwardfor except 127.0.0.0/8

retries 3

option redispatch

balance roundrobin

timeout http-request 10s

timeout queue 1m

timeout client 1m

timeout server 1m

listen adimin_stats

bind-process 1

mode http

stats enable

stats hide-version

bind:8888

stats uri /admin?stats

stats realm Haproxy Statistics

stats auth hadmin:yhXV2WAbybXd1euzEXbEADAe

stats refresh 30s

stats admin ifTRUE

listen www

bind*:80

maxconn 50000

mode http

logglobal

option httplog

option httpclose

option forwardfor

logglobal

default_backend default #设置默认访问资源页面

#定义当请求的内容是静态内容时(图片、视频、js、css、html),将请求转交给静态资源服务器的acl规则

acl url_static path_beg -i /static /images /img /java /stylesheets

acl url_static path_end -i .jpg .gif .png .css .js .html

acl host_static hdr_beg(host) -i img. video. download. ftp. imags. videos.

#定义当请求的内容是php内容时,将请求转交给php动态资源服务器的acl规则

acl url_php path_end -i .php

#定义当请求的内容是.jsp或.do内容时,将请求转交给tomcat动态资源服务器的acl规则

acl url_jsp path_end -i .jsp . do

#引用haproxy的acl匹配规则

use_backend static_pool ifurl_static or host_static

use_backend php_pool ifurl_php

use_backend tomcat_pool ifurl_jsp

#定义后端backend server

backend static_pool

option httpchk GET /index.html

server static1 192.168.3.24:80 cookie id1 check inter 2000 rise 2 fall 3

backend php_pool

option httpchk GET /index.php

server php1 192.168.3.9:80 cookie id1 check inter 2000 rise 2 fall 3

backend tomcat_pool

option httpchk GET /index.jsp

server tomcat1 192.168.3.9:8080 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.3.24:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000

# chown -R haproxy:haproxy /usr/local/haproxy/

# service haproxy start

#启动haproxy报错,可能是端口冲突导致的,检查haproxy listen配置,我这配置文件监听的是80端口,此主机的80端口被httpd占用了,停止httpd服务,再次启动haproxy就正常了;

# netstat -ntlp|grep haproxy

6、服务状态

service haproxy start //启动服务

service haproxy stop //停止服务

service haproxy status //服务状态

chkconfig haproxy on //开机启动

三、测试haproxy效果如下:

1、默认页面:

http://192.168.3.22

2、测试html静态资源

http://192.168.3.22/index.html

3、测试php动态资源

http://192.168.3.22/index.php

4、测试jsp动态资源

http://192.168.3.22/index.jsp

5、haproxy后台监控页面

http://192.168.3.22:8888/admin?stats

hadmin/yhXV2WAbybXd1euzEXbEADAe

HAproxy企业应用,TCP/HTTP动静分离的更多相关文章

  1. Haproxy 基础详解及动静分离配置

    haproxy 介绍 1 工作在ISO 七层 根据http协议(或者工作在ISO四层 根据tcp协议) 提供web服务的负载均衡调度器 负载均衡调度器分类 工作在四层: # lvs 工作在七层: # ...

  2. HAProxy+apache实现web服务动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支 ...

  3. HAproxy的安装配置及动静分离

    /////////////////////////////目录//////////////////////////////////////////一.安装HAproxy二.编写HAproxy启动脚本三 ...

  4. 企业实战Nginx+Tomcat动静分离架构的技术分享

    Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat.Re ...

  5. HAproxy+varnish动静分离部署wordpress

    author:JevonWei 版权声明:原创作品 实验背景:将wordpress应用部署在后端服务器上,使用HAProxy做代理服务器,Varnish做缓存服务器,后端有四台web服务器,web1和 ...

  6. HAproxy指南之haproxy实现动静分离(案例篇)

    HAproxy指南之haproxy实现动静分离(案例篇) 转自   https://blog.51cto.com/blief/1751806   实际应用环境中,往往需要根据业务请求将相关不同请求跳转 ...

  7. CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

  8. 使用HAproxy如何实现web站点的动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.      HAProxy特别 适用于那些负载特大的web站点,这些站点通常 ...

  9. Haproxy实现web的页面的动静分离

    一.Haproxy概述: 概述:Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,由C语言编写而成,支持会话保持.七层处理.健康检查.故障修复后自动加载.动静分离.HAProxy ...

随机推荐

  1. regsvr32 错误解决方案

    regsvr32对dll进行注册时报错,0x80070005表示权限不够,虽然是以管理员身份登录,但是仍然需要如下操作: 在运行命令提示符的时候,请右击 命令提示符 选 以管理身份运行.

  2. 把java项目打包成jar包并可以直接运行【我】

    首先创建一个maven的jar项目,然后代码写好后,在项目右键,导出: 选择java下面的可运行的jar文件: 下一步: 要注意的是: launch configuration 此选项是指定选中要导出 ...

  3. sql 死锁查看

    --每秒死锁数量 SELECT * FROM sys.dm_os_performance_counters WHERE counter_name LIKE 'Number of Deadlocksc% ...

  4. Golang中用interface{}接收任何参数与强转

    函数的传值中,interface{}是可以传任意参数的,就像java的object那样.下面上我第一次想当然写的 ** 错误 **代码 package main func main() { Any(2 ...

  5. 【HANA系列】SAP HANA SQL条件判断是NULL的写法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL条件判断 ...

  6. Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance)

    Leetcode之动态规划(DP)专题-72. 编辑距离(Edit Distance) 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可 ...

  7. web学习(2019-10)

    @“fuzz一下”:所有注入爆破题/其他题,必fuzz 在安全测试中,模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型 模糊测试(fuzz tes ...

  8. Fragment通过接口回调向父Activity传值

    Fragment: 定义一个接口,在onAttach()方法中,实例化接口对象.要求是父Activity要实现该接口.然后在你想发送信息的地方调用callBackValue.sendMessageVa ...

  9. 简单nginx代理配置

    nginx.conf: # For more information on configuration, see:# * Official English Documentation: http:// ...

  10. IIS7多站点ssl配置及http自动跳转到https

    SSL证书配置参考如下: http转https实战教程iis7.5 window08 IIS7安装多域名SSL证书绑定443端口 关键是修改C:\Windows\System32\inetsrv\co ...