在互联网时代中,后台系统架构,经常可以听到高可用集群、负载均衡集群之类的系统架构解决方案,其中,负载均衡有基于硬件的F5、Big-IP等,也有基于软件的LVS(基于Linux操作系统实现,性能可以和基于硬件的性能媲美)、Nginx、HAProxy(基于第三方应用实现)等,本文介绍一下HAProxy的安装与配置使用。

  HAProxy是一个高性能的、开源的负载均衡软件,它支持TCP(ISO参考模型的第四层)和HTTP(ISO参考模型的第七层)协议,支持虚拟主机,haproxy实现了一种事件驱动、单一进程模型,最高可以同时维护4到5万个并发连接,支持多种负载均衡算法与session保持,也支持ACL(Access Control List,访问控制列表)。

  上面说到支持TCP和HTTP协议的应用负载均衡,对于tcp层来说,主要通过分析IP层及TCP/UDP层的流量来实现基于"IP+端口"的负载均衡,在这一层的产品有LVS和F5等;对于http层来说,实际上,支持http、ftp、smtp协议,除了支持基于"IP+端口"的负载均衡,还可根据报文内容,再配合负载均衡算法来选择后端服务器,成为“内容交换机”,在这一层的产品有HAProxy、Nginx等。这里可以发现,在http层要实现报文内容的负载均衡,haproxy需要先与客户端建立一次tcp连接,然后再根据内容进行后端转发,这里在haproxy与后端机器也会建立一次tcp连接,haproxy相当于代理,而在tcp层,客户端与后端服务器会直接建立tcp连接,haproxy相当于路由。

  HAProxy的官网:http://www.haproxy.org

  大概了解了HAProxy后,下面开始安装使用,这里下载了当前最新版本(haproxy-1.7.1.tar.gz):

  1. 安装文件:

  

  2. 解压:tar zxf haproxy-1.7.1.tar.gz

  3. 进入安装文件目录:cd haproxy-1.7.1

  4. 编译:make TARGET=linux26 PREFIX=/usr/local/haproxy171

  

  没有错误,继续下一步来安装:

  5. 安装:sudo make install PREFIX=/usr/local/haproxy171

  

  6. haproxy安装后是没有配置文件目录的,这里手动新建:

  

  7. 这里为了方便,把之前的配置文件复制来用,文件内容如下:

global
log 127.0.0.1 local0 info
maxconn 4096
daemon
nbproc 1
pidfile /usr/local/sbin/haproxy.pid defaults
retries 3
timeout connect 10s
timeout client 30s
timeout server 30s
timeout check 5s frontend www
bind *:6604
mode http
option httplog
option forwardfor
option httpclose
log global
default_backend htmpool backend htmpool
mode http
option redispatch
balance roundrobin
server APP_UPDATE_NOTE APP_UPDATE_NOTE:8000 check inter 2000 rise 2 fall 5

  8. 配置文件解析:

    global段:

    全局配置参数,属于进程级的配置,通常与操作系统配置相关。

    

    log:日志配置,其中local0是日志设备,后面跟日志记录级别,有:err、warning、info、debug。haproxy使用了Linux系统的rsyslog服务(CentOS6.3版本以后不再使用syslog,使用rsyslog)来记录日志,详细可以到其官网了解:http://www.rsyslog.com

    

    maxconn设置了每个haproxy进程可接受的最大并发连接数。

    daemon设置haproxy在后台运行。

    nbproc设置haproxy启动时可创建的进程数,默认为1个,该值应小于服务器的CPU核数。

    pidfile配置了haproxy启动后进程的pid文件路径。

    defaults段:

    默认参数配置,该部分参数作用域覆盖frontend段和backend段。

    

    retries配置连接后端服务器失败重试次数,超过3次后会将失败的后端服务器标记为不可用。

    timeout connect配置成功连接到一台服务器的最长等待时间,默认单位是毫秒,也可自己指定单位

    timeout client配置连接客户端发送数据时的最长等待时间,默认单位是毫秒,也可自己指定单位。

    timeout server配置服务器端回应客户端数据发送时最长等待时间,默认单位是毫秒,也可自己指定单位。

    timeout check配置对后端服务器的检测超时时间,默认单位是毫秒,也可自己指定单位。

    frontend段(ACL规则也在这部分配置):

    前端监听服务器配置

    

    这里定义了一个"www"名字的前段虚拟节点。

    bind配置了监听地址和端口,这里设置为”*“表示当前系统所有的IPV4地址,端口建议数值大于1024。

    mode配置为http模式,这样,客户端请求在转发到后端服务器前会被进行内容分析。

    option httplog配置启用日志来记录http请求,haproxy默认只对tcp日志进行日志记录的。

    option forwoardfor配置后端服务器需要获得客户端的真实IP,它通过增加”X-Forwarded-For“来记录客户端IP。

    option httpclose配置在客户端和服务器完成一次连接请求后,haproxy主动关闭此TCP连接。

    log global配置使用全局的日志配置。

    default_backend htmpool配置使用的后端机组。

    backend段:

    后端服务器集群配置,真正处理用户请求的服务器机组。

    

    这里定义了一个”htmpool“名字的后端机组。

    mode配置为http模式

    option redispatch用于cookie保持的环境中,此参数建议加上。

    balance roundrobin配置使用基于权重进行轮叫调度的算法,在服务器性能分布较均匀情况下推荐。另外还有如下几种算法:

      -- static-rr (也是基于权重进行轮转调度,不过属于静态方法,运行时调整后端机组权重不会使用新的权重)

      -- source (基于请求源IP进行hash运算来匹配后端机组)

      -- leastconn (不适合会话较短的环境,如基于http的应用)

      -- uri (对整个URI进行hash运算)

      -- uri_param (对URI中的参数进行转发)

      -- hdr(<name>):根据http头进行转发,不存在该头则转为使用roundrobin

    server 指定后端机器,格式:server <自定义名字,便于识别主机即可> <主机IP或名字>:<端口> [params ...]

    [params ...]参数:

    check 表示对后端服务器进行健康状态检查

    inter 2000 健康状态检查时间间隔为2000毫秒

    rise 2 从故障状态转换至正常状态需要成功检查的次数

    fall 5 后端服务器从正常转换为故障状态需要检查的次数

    可选:

    weight: 权重,默认1,最大为265,0则表示不参与负载均衡

  9. 日志配置(前提:haproxy.cfg配置了log模块)

    9.1 检查rsyslog是否安装

    

    9.2 编辑文件/etc/rsyslog.conf,修改为如下:

    

    9.3 修改/etc/sysconfig/rsyslog文件

      

    9.4 重启rsyslog服务:sudo service rsyslog restart

  10. 启动haproxy

  可以查看一下haproxt的帮助:

  

  启动:

  

  启动完成。

  如需平衡重启:sudo ./haproxy -f ../conf/haproxy.cfg -st <haproxy的pid>

  

  11. 测试:

  http://192.168.0.193:6604

  

  实际上,这个页面的真实源地址是:http://182.*.2*.**:80,说明haproxy已经成功运行了。

  看看日志文件:

  

  查看浏览器开发者模式输出:

  

  的确达到了我们的目的。

  13. 配置haproxy监测

  修改配置文件,增加如下:

  

  重启haproxy,访问如下:

  

  通过这个网站,可以查看该负载均衡集群的主机运行状态,当后端服务器集群出现故障时,相应改变颜色来提示运维人员,方便及时发现和修复。

  14. 扩展:

  可以增加ACL配置规则和根据实际需要使用其他后端服务器使用算法,这里只是使用了轮训算法。

HAProxy的安装与使用的更多相关文章

  1. 烂泥:高负载均衡学习haproxy之安装与配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 有关高负载均衡的软件,目前使用比较多的是haproxy.nginx和lvs.下面我们就开始学习haprxoy这款软件. 一.haproxy介绍 以下开始介 ...

  2. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  3. CentOS6下Haproxy的安装配置

    Haproxy 是一个开源的负载均衡和反向代理软件,其提供了高可用的网络服务.其一般是应用于web服务,但同时也能为SMTP和终端服务等提供可靠的支持. 1.下载安装haproxy wget ftp: ...

  4. Haproxy的安装和配置示例

    1.ha proxy简介ha proxy是一个开源的,高性能的,基于tcp第四层和http第七层应用的负载均衡软件优点:可靠性和稳定性非常好          最高可以同时维护40000-50000个 ...

  5. saltstack之haproxy的安装配置

    使用saltstack编译安装haproxy: 由于编译安装haproxy,所以安装之前需要建立编译环境,将编译环境需要安装的包单独放置在一个目录中,当编译haproxy或其他时,直接include这 ...

  6. haproxy学习——安装(一)

    安装包:haproxy-1.5.4.tar.gz (挺小的,大约1.3M) ①.首先要sz到本地虚拟机上(centos-6.5),tar zxvf haproxy-1.5.4.tar.gz,完成解压. ...

  7. HAproxy的安装与配置讲解

    1,安装 官网下载 http://www.haproxy.org/#down cd /usr/local/src/ wget http://www.haproxy.org/download/1.4/s ...

  8. haproxy 安装 各个参数的测试

    ---------------------------------------------------------------------------------------------------- ...

  9. Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装和配置

    第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...

随机推荐

  1. px和em,rem的区别

    1.px是你屏幕设备物理上能显示出的最小的一个点,这个点不是固定宽度的,不同设备上点的长宽.比例有可能会不同.假设:你现在用的显示器上1px宽=1毫米,但我用的显示器1px宽=两毫米,那么你定义一个d ...

  2. tomcat/jsp/servlet版本关系

    Servlet Spec JSP Spec EL Spec WebSocket Spec JASPIC Spec Apache Tomcat version Actual release revisi ...

  3. 10 Symbol

    Symbol 书中讲了2部分. Symbol() Symbol 属性值. 完全两种画风的东西. 1. Symbol 首先他是一种全新的值. 不属于以前的任何一种 ES6引入了一种新的原始数据类型Sym ...

  4. Prism 轻量级可扩展代码高亮库.

    官方网站:http://prismjs.com/ Prism 是一个轻量级并且简单易用的 JavaScript 类库,minified 和 gzipped 压缩后只有 1.5kb 大小,即使添加语言定 ...

  5. React项目(一):markdown编辑器

    在之前的React官网教程中,提到了用Remarkable为插件的markdown评论框.现在就来正儿八经地用另外一个插件marked.js做一个markdown编辑器吧! 准备工作 或许在做之前,应 ...

  6. [AR+Vuforia]学习笔记

    若项目中导入了多个数据库对象,则需要在ARCamera中手动指定需要加载的对象:

  7. Linux及VMWare的网卡选择设计及理解

    vmware网络的连接方式分为三种:桥接,NAT,Host-only.(当我们安装完VMware WorkStation的时候,它会帮我们安装两块虚拟网卡,分别是vmnet1,和vmnet8.vmne ...

  8. 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

    适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...

  9. Oracle TO_DATE 日期格式

    Oracle trunc()函数的用法 --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdat ...

  10. PHP数组常用函数

    [官方]PHP Array 函数 一.数组操作的基本函数 数组的键名和值 array_values($arr);  获得数组的值 array_keys($arr);  获得数组的键名 array_fl ...