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 servereth0:172.51.96.233/24 && eth1:192.168.3.22/24static server eth1:192.168.3.24/24php servereth1:192.168.3.9/24tomcat servereth1: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.g2、创建haproxy运行用户# groupadd -r haproxy# useradd -g haproxy -M -s /sbin/nologin haproxy3、源码编译安装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]# lltotal 0drr-xr-x 3 root root 21 May 23 15:56 docdrr-xr-x 2 root root 21 May 23 15:56 sbindrr-xr-x 3 root root 17 May 23 15:56 share4、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.cfgglobal maxconn # 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 log 127.0.0.1 local0 log 127.0.0.1 local1 notice description haproxy serverdefaults log global 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 1mlisten 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 if TRUElisten www bind *:80 maxconn 50000 mode http log global option httplog option httpclose option forwardfor log global default_backend default #设置默认访问资源页面 #定义当请求的内容是静态内容时(图片、视频、js、css、html),将请求转交给静态资源服务器的acl规则 acl url_static path_beg -i /static /images /img /javascript /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 if url_static or host_static use_backend php_pool if url_php use_backend tomcat_pool if url_jsp #定义后端backend serverbackend static_pool option httpchk GET /index.html server static1 192.168.3.24:80 cookie id1 check inter 2000 rise 2 fall 3backend php_pool option httpchk GET /index.php server php1 192.168.3.9:80 cookie id1 check inter 2000 rise 2 fall 3backend 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、默认页面: 2、测试html静态资源/index.html 3、测试php动态资源/index.php 4、测试jsp动态资源/index.jsp 5、haproxy后台监控页面:8888/admin?statshadmin/yhXV2WAbybXd1euzEXbEADAe 让您学习到的每一节课都有所收获
《Linux就该这么学》是一本由资深运维专家刘遄老师及国内多名红帽架构师(RHCA)基于最新RHEL7系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材。荣获双11、双12购物狂欢节IT品类书籍销量冠军,2017年、2018年国内读者增速最快的技术书籍,您可以在京东、当当、亚马逊及天猫搜索书名后购买,亦可加刘遄老师交流学习(手指按住下图3秒钟即可自动扫描)~
刘遄老师:
☀ Linux技术交流群:(新群,火热加群中……)
☀ 官方站点:www.linuxprobe.com
☀ 书籍在线学习(电脑在线阅读效果更佳):
广告
Linux就该这么学
作者:刘遄
当当 购买
《Linux就该这么学》是一本基于最新Linux系统编写,面向零基础读者的技术书籍。从Linux基础知识讲起,然后渐进式地提高内容难度,详细讲解Linux系统中各种服务的工作原理和配置方式,以匹配真实生产环境对运维人员的要求,突显内容的实用性。想要学习Linux系统的读者可以点击"阅读原文"按钮了解这本书,同时这本书也适合专业的运维人员阅读,作为一本非常有参考价值的工具书!