• HAproxy企业应用,TCP/HTTP动静分离


    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

  • 相关阅读:
    R语言学习笔记2——绘图
    稀疏编码笔记1
    【转】宏定义中##和#的作用
    CRUX下实现进程隐藏(3)
    CRUX下实现进程隐藏(2)
    CRUX下实现进程隐藏(1)
    Coursera机器学习基石 第1讲:The Learning Problem
    R语言学习笔记1——R语言中的基本对象
    Semi-Supervised Dimensionality Reduction
    转发常见一主从复制案例
  • 原文地址:https://www.cnblogs.com/probemark/p/11481500.html
Copyright © 2020-2023  润新知