HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。





   HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

                                                                        

拓扑图:





   第一步:,这里我们使用三台虚拟机来做测试,前端一台haproxy做调度,后端两台httpd服务器提供web服务,在做动静分离时时前端haproxy来判断动态和静态内容分别调度到哪台服务器上;

在haproxy node5中添加两块网卡,将新添加的网卡定义在vmnet2中

将两个后端的动静节点也设置到vmnet2中

第二步:安装httpd、php以及haproxy,这里我们直接用yum来安装即可,安装好之后给这三台虚拟配置好相关的网络设备以及提供相关的测试页面等,在eth1这张网卡上选择相同的一个通信通道,node5这台虚拟机上haproxy的主机,node1和node2是不同的两台后端提供web服务器的虚拟主机

[root@node5 ~]# yum install -y haproxy
[root@node5 ~]# ifconfig eth1 192.168.1.10/24 up
[root@node5 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:BA:4E:78
inet addr:192.168.8.43 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feba:4e78/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1418 errors:0 dropped:0 overruns:0 frame:0
TX packets:185 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103198 (100.7 KiB) TX bytes:19819 (19.3 KiB) eth1 Link encap:Ethernet HWaddr 00:0C:29:BA:4E:82
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feba:4e82/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:63 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3780 (3.6 KiB) TX bytes:468 (468.0 b) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1244 (1.2 KiB) TX bytes:1244 (1.2 KiB)

在node1和node2上设置好相关配置,选择虚拟机上的VMnet2与haproxy上的eth1的同一通信通道,再配置IP地址和默认网关接口,而后再提供不同的页面以便测试用;





192.168.1.20:

# yum install -y php httpd
# ifconfig eth0 192.168.1.20/24 up
# route add defaulte gw 192.168.1.10 # 网关指向haproxy主机的eth1地址
# ping 192.168.1.10 # ping一下haproxy的节点看是否ping通
# vim /var/www/html/index.html
<h1>192.168.1.20</h1>
# for i in {1..10} ; do echo "<h1>192.168.8.20 test$i</h1>" > test$i.html; done # 创建test1~10个静态html页面方便后面测试
# service httpd start # 配置好之后就把web服务启动起来,再访问测试一下,测试的连接改为桥接方式

192.168.1.30:

# yum install -y php httpd
# ifconfig eth0 192.168.1.30/24 up
# route add defaulte gw 192.168.1.10 # 网关指向haproxy主机的eth1地址
# ping 192.168.1.10 # ping一下haproxy的节点看是否ping通
# vim /var/www/html/index.html
<h1>192.168.1.30</h1>
# for i in {1..10} ; do echo "<h1>192.168.8.30 test$i</h1>" > test$i.html; done # 创建test1~10个静态html页面方便后面测试
# service httpd start # 配置好之后就把web服务启动起来,再访问测试一下,测试的连接改为桥接方式

测试页面能否正常访问

[root@node5 ~]# curl -I http://192.168.1.20
HTTP/1.1 200 OK
Date: Mon, 09 May 2016 12:00:53 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Connection: close
Content-Type: text/html; charset=UTF-8 [root@node5 ~]# curl -I http://192.168.1.30
HTTP/1.1 200 OK
Date: Fri, 29 Apr 2016 02:55:57 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Connection: close
Content-Type: text/html; charset=UTF-8

第三步:配置haproxy的相关配置信息;

############## 以上的使用默认配置就可以了 #######################

frontend web *:80   # *表示haproxy监听所有地址,监听的端口为80
# 定义访问控制,表示以url以.css .js .html .php结尾的分别调度到哪台服务器上访问
acl url_static path_end -i .css .js .html
acl url_dynamic path_end -i .php # usr_backend表示使用backend服务,if表示如果满足url_static这个条件就调度到这台服务器上
use_backend static if url_static
default_backend dynamic backend static # 定义调用后端的静态页面的服务器上
server node1 192.168.1.20:80 check inter 3000 rise 2 fall 2 maxconn 5000
backend dynamic # 定义调用后端的动态页面的服务器上
server node2 192.168.1.30:80 check inter 3000 rise 2 fall 2 maxconn 5000
listen statspage # 定义监控管理接口的界面
bind *:8888 # 定义访问页面端口
stats enable # 启用管理界面
stats hide-version # 隐藏版本
stats uri /admin?stats # 访问路径
stats auth admin:centos # 访问时需要验证登录
stats admin if TRUE # 如果登录成功就可以管理在线服务器

访问管理页面:

总结:

   HAProxy是一款比较轻量级的负载均衡服务器,特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离的更多相关文章

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

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

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

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

  3. macOS Sierra Version 10.12.6 环境下Tomcat的下载与安装以及InterlliJ IDEA 2017.2 环境下配置Tomcat 与创建Web项目

    一.Tomcat的下载与安装 1.官网(http://tomcat.apache.org/)下载Tomcat 9.0 Core:zip包: 2.解压到指定的文件夹即可安装完成: 3.测试是否安装成功 ...

  4. Windows环境下使用.bat安装和卸载服务

    一.Windows环境下使用.bat安装和卸载服务 win7环境 例子中“”Valwell.Dms.HttpService.exe“”为服务程序名称 安装服务 %SystemRoot%\Microso ...

  5. linux系统下开启一个简单的web服务

    linux 下开启一个简单的web服务: 首先需要linux下安装nodejs 然后创建一个test.js:   vi test.js var http =require("http&quo ...

  6. CentOS 6.5环境下heartbeat高可用集群的实现及工作原理详解

    Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用. 什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通 ...

  7. 【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示

    前言: MQTT广泛应用于工业物联网.智能家居.各类智能制造或各类自动化场景等.MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信.机器与物联网通信等. ...

  8. HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

    一.安装环境 1.软件版本 HAProxy:1.5.18 Keepalived:1.3.5 Nginx:1.12.2 PHP:7.2 系统版本:CentOS 7.4 2.IP分配与架构图 3.安装软件 ...

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

    HAProxy的是一个免费的.开源的的tcp/http反向代理工具.负载均衡器,是一个企业非常快速和可靠的安全的解决方案,提供高可用性.高并发性,负载均衡和代理对TCP和基于HTTP的应用程序.它特别 ...

随机推荐

  1. Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that

    转自:http://bbs.umeng.com/thread-6552-1-2.html 报错信息:The library `SocialSDK_QQZone_2.jar` contains nati ...

  2. Boost filessystem...

    CMakeList.txt: cmake_minimum_required(VERSION 3.8) project(Demo) ) set(SOURCE_FILES main.cpp) //需要添加 ...

  3. 百度echart初用总结

    1.先下载echarts.js.我在百度下载的是 echarts-2.2.7 (from Baidu).压缩包里面的build->dist中的echarts.js或者echarts-all.js ...

  4. 清除ul li里面的浮动并让ul自适应高度的一个好办法

    有时候会遇到ul li列表里面的东西会用到浮动,这个时候ul的高度就不会被撑开,这怎么办呢? 1)最笨的方法就是设置ul的高度,但这种方法很死板,高度不能自适应 2)有次我试着在ul里面加一个清除浮动 ...

  5. Python基础数据类型-字符串(string)

    Python基础数据类型-字符串(string) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版 ...

  6. 学习windows编程 day4 之 矩形的操作

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  7. idea常用的插件

    ignore 插件 可以自动生成.ignore文件   非常的实用 gitee 插件 搜所gitee安装即可  码云的插件 maven helper 插件 idea 中解决maven 包冲突的问题 a ...

  8. JAVA记录-SpringMVC国际化配置

    1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...

  9. java 中如何声明线程安全的集合 set, map 和list【转】

    线程安全的集合 引用自 http://blog.sina.com.cn/s/blog_508938e10102v1ig.html //make thread-safe list List MyStrL ...

  10. SQL语句(五)数据的修改

    数据的修改 UPDATE 格式 UPDATE 表名 SET 字段名 = 字段值(这个可以是表达式) [WHERE 条件表达式] 关系运算符 (>.<.>=. <=.=.< ...