在互联网时代中,后台系统架构,经常可以听到高可用集群、负载均衡集群之类的系统架构解决方案,其中,负载均衡有基于硬件的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. 埃拉托色尼筛法(Sieve of Eratosthenes)求素数。

    埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法.从建立一个整数2~N的表着手,寻找i? 的整数,编程实现此算法,并讨论运算时间. 由于是通过删除来实现, ...

  2. BZOJ2117: [2010国家集训队]Crash的旅游计划

    裸点分,点分树每层维护有序表,查询二分,复杂度$O(nlog^3n)$. #include<bits/stdc++.h> #define M (u+v>>1) #define ...

  3. Spring--开山篇

    ·Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spring是一个分层的JavaSE/EEfull-stack( ...

  4. [转]C语言SOCKET编程指南

    1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

  5. js 查找树节点 数组去重

    //查找树节点function findData(curOrg, id) { var array = []; if ((typeof curOrg == 'object') && (c ...

  6. 关于JSF中immediate属性的总结(三)

    Okay, when should I use the immediate attribute? If it isn't entirely clear yet, here's a summary, c ...

  7. leetcode--Different Ways to Add Parentheses

    题目链接:https://leetcode.com/submissions/detail/86532557/ 算法类型:分治法 题目分析:计算表达式的所有结果可能性 代码实现: class Solut ...

  8. C程序汇编运行模式简析

    SJTUBEAR 原创作品转载请注明出处 /<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 汇编 ...

  9. 简单的 MessageBox

    有时候我们只是想实现一个消息框,给用户一些文字提醒,就像javascript的alert那样.没必要因此动用那些庞大的GUI库,下面是几种轻快的实现方法. 1. ctypes import ctype ...

  10. ASP.NET上实现

    ASP.NET上实现 fengzhuang.cs: using System;using System.Collections.Generic;using System.Linq;using Syst ...