简介:
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。

HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式
下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求
(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

特点:
haproxy支持四七层,而LVS是四层应用,nginx是七层应用

支持双机热备,高可用,负载均衡、虚拟主机,应用代理、

基于TCP和HTTP的 图形界面查看信息

服务器节点健康检查功能

一般是lvs在前面做4层,haproxy在后面做七层。

HAproxy配置文件可以分为五部分:

global:    全局配置参数段,主要用来控制Haproxy启动前的进程及系统相关设置

defaults:  配置一些默认参数,如果frontend,backend,listen等段未设置则使用defaults段设置
listen: 
frontend:  用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理
backend:  定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置  

1.安装

wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz
tar zcvf haproxy-1.3.20.tar.gz
cd haproxy-1.3.20
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
(注意,TARGET后面根据本机操作系统内核版本来填写,PREFIX是要安装到的目录) net.ipv4.ip_forward = 1 #基于NAT模式的负载均衡器都要打开系统转发功能。
sysctl -p #使修改生效

2.配置
安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。

cd /usr/local/haproxy
vi haproxy.cfg

根据实际需求,更改配置文件,我的配置如下
global      #全局设置
log 127.0.0.1 local0           #日志输出配置,所有日志都记录在本机,通过local0输出
#log loghost local0 info
maxconn 4096             #最大连接数
chroot /usr/local/haproxy
uid 99           #所属运行的用户uid
gid 99           #所属运行的用户组
daemon             #以后台形式运行haproxy
nbproc 2             #启动2个haproxy实例
pidfile /usr/local/haproxy/haproxy.pid    #将所有进程写入pid文件
#debug
#quiet     defaults                #默认设置 #log global log 127.0.0.1 local3 #日志文件的输出定向 mode http     #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK option httplog     #日志类别,采用httplog option dontlognull option forwardfor     #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option httpclose     #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现 retries 3     #3次连接失败就认为服务器不可用,主要通过后面的check检查 option redispatch     #当serverid对应的服务器挂掉后,强制定向到其他健康服务器 maxconn 2000     #最大连接数 stats uri /stats     #haproxy 监控页面的访问地址
      浏览器中输入haproxy监控地址:http://10.10.100.39/stats查看状态 contimeout 5000     #连接超时时间 clitimeout 50000     #客户端连接超时时间 srvtimeout 50000     #服务器端连接超时时间 stats auth admin:admin     #设置监控页面的用户和密码:Frank stats hide-version     #隐藏统计页面的HAproxy版本信息 frontend http-in     #前台 bind *:80 mode http option httplog log global acl web1 hdr(host) -i www.9888.cn 9888.cn
  #acl后面是规则名称,-i是要访问的域名,如果访问www.9888.cn 这个域名就分发到下面的webserver1 的作用域。 use_backend webserver1 if web1 backend webserver1      #后台
mode http
balance roundrobin     #负载均衡算法
option httpchk /index.html      #健康检查
server web01 10.10.100.41:80 check cookie 1 inter 2000 fall 3 weight 30
server web02 10.10.100.18:80 check cookie 2 inter 2000 fall 3 weight 30
  #cookie 1表示serverid为1,check inter 1500 是检测心跳频率
  #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重.

启动haproxy:
/usr/local/haproxy/sbin/haproxy -f
/usr/local/haproxy/conf/haproxy.cfg  

实现haproxy301域名跳转:

redirect prefix http://oldboy.blog.51.com code 301 if www.9888.cn #当访问www.9888.cn时跳转至http://oldboy.blog.51.com

实现haproxy基于URL地址目录做7层跳转
比如根据目录进行过滤转发:

acl oldboy_java path_beg /java/
acl oldboy_php path_beg /php/ use_backend webserver if oldboy_java #如果是java就找webserver这个池
use_backend webserver if oldboy_php

实现haproxy基于扩展名做7层跳转:

acl oldboy_pic path_end .gif .png .jpg .css .js
use_backend nginxpools if olboy_static or oldboy_pic

实现haproxy基于user_agent做7层跳转

acl iphone_users hdr_sub(user-agent) -i iphone

redirect prefix http://www.51cto.com if iphone users   

acl android_users hdr_sub(user-agent) -i android

redirect prefix http://www.baidu.com if android_users

实现haproxy基于ip和端口过滤

acl valid_ip src 192.168.1.0/24

block if !valid_ip  #如果不符合valid_ip的规则就block拒绝掉

让haproxy错误页面优雅的显示

errorfile 403 /tec/haproxy/errorfiles/403forbild.html

基于HTTP的直接IP URL方式的健康检查:

1.>第一种HEAD配置方法

	option httpchk HEAD /check.html HTTP/1.0
这种检测方式就相当于通过curl -i http://127.0.0.1/check.html
或者 wget http://127.0.0.1/check.html访问地址。
**check.html文件必须在网站根目录下创建 健康检查的频率、时间等参数: maxconn 控制节点的并发连接的
weight 12 权重,权重越大,请求越多 2.>第二种GET配置方式 GET后端server的web页面 option httpchk GET /index.html HTTP/1.0

backup 和allbackups参数:

server      web1 10.10.100.66:80  check inter 2000 fall 3 weight 30
server web2 10.10.100.67:80 check inter 2000 fall 3 weight 30
server web3 10.10.100.68:80 check inter 2000 fall 3 weight 30 backup 当web1和web2服务停止后,web3再提供服务,这样可以达到高可用的目的 option allbackups server web1 10.10.100.66:80 check inter 2000 fall 3 weight 30
server web2 10.10.100.67:80 check inter 2000 fall 3 weight 30
server web3 10.10.100.68:80 check inter 2000 fall 3 weight 30 backup
server web4 10.10.100.69:80 check inter 2000 fall 3 weight 30 backup 加上 option allbackups后,当web1和web2挂掉后,web3和web4都启动起来提供服务,不加allbackups则只有一台提供服务.

haproxy下的RS无法记录客户端真实ip的问题

在haproxy配置文件里加入如下参数:

listen www

		option forwardfor
提示:参数最好放在listen www里面
然后在nginx日志格式中加"$http_x_forwarded_for" 

###################################################################################

关于haproxy日志输出的问题:
CentoS6.5下HAProxy日志配置详解:

syslog这个服务,在Centos5.x中的目录为:/etc/init.d/syslog
而到了Centos6.x中变成了:/etc/init.d/rsyslog
在配置前,我们先来了解下日志的level: local0~local7 16~23保留为本地使用
emerg 0       系统不可用
alert 1       必须马上采取行动的事件
crit 2        关键的事件
err 3        错误事件
warning 4      警告事件
notice 5      普通但重要的事件
info 6       有用的信息
debug 7      调试信息

vim haproxy.conf(在default处添加如下信息)

########################################
defaults
log global
option httplog
log 127.0.0.1 local3
########################################

vim /etc/rsyslog.conf(添加如下内容)

local3.*    /var/log/haproxy.log

vim /etc/sysconfig/rsyslog

把SYSLOGD_OPTIONS="-m 0"
改成 SYSLOGD_OPTIONS="-r -m 0"

相关解释说明:
-r:   打开接受外来日志消息的功能,其监控514 UDP端口;
-x:   关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
-m:  修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次"--MARK--"信息;

-h:   默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去.  

配置完毕后关闭sellinux然后重启rsyslog和haproxy 即可.

/etc/init.d/rsyslog restart

  

haproxy实现负载均衡的方式:

haproxy + heartbeat

haproxy + keepalive

  

Haproxy安装配置及日志输出问题的更多相关文章

  1. ELK 6安装配置 nginx日志收集 kabana汉化

    #ELK 6安装配置 nginx日志收集 kabana汉化 #环境 centos 7.4 ,ELK 6 ,单节点 #服务端 Logstash 收集,过滤 Elasticsearch 存储,索引日志 K ...

  2. HAProxy安装配置详解

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

  3. 负载均衡-haproxy安装配置

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

  4. HAProxy安装配置

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

  5. keepalived+haproxy 安装配置

    1.安装配置keepalived 修改配置文件/etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  6. HAProxy安装配置用于TCP的负载均衡

    HaProxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,而且拥有很好的对服务器节点的健康检 ...

  7. haproxy安装配置for mysql负载均衡(ubantu)

    1.安装pcre apt-get update (apt-get install openssl libssl-dev  ==>可能需要安装的依赖包) apt-get install libpc ...

  8. SuSE(SLES)安装配置syslog-ng日志server,可整合splunk

    Update History 2014年04月25日 - 撰写初稿 引言 在自己主动化部署AutoYast.自己主动化监控BMC Patrol双方面形成雏形后.日志的收集.管理.分析也顺势成为我们须要 ...

  9. Haproxy 安装配置详解-端口映射

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

随机推荐

  1. epon e8-c HG220GS超级密码破解

    网上找了很多管理电信e8-c的破解资料,大多都是明文密码,而hg220gs则为加密的密码,找来找去最后终于找到加密方式了base64,真心不容易 下面从其他博文中转载过来留着记录 低端hack.主要是 ...

  2. MVC+Jsonp实现跨域交互

    一.认识Jsonp JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式 ...

  3. python 内建类型

    ''' 数值 numbers 字符串 strings 列表 lists 字典 dictionaries 元组 tuples 文件 files 集合 sets ''' 1.1 序列的操作 所有序列类型都 ...

  4. kali 2.0 启动metasploit服务

    kali 2.0 已经没有metasploit 这个服务了,所以service metasploit start 的方式不起作用. 在kali 2.0中启动带数据库支持的MSF方式如下: 首先启动po ...

  5. java 中变量的存储与引用

    java交换两个变量的值 1.幼儿园版 package tst; public class Test { public static void main(String[] args) { String ...

  6. bzoj2683简单题

    #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> ...

  7. BZOJ2432 [Noi2011]兔农

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. WHMCS系统API调用

    WHMCS:域名管理系统,现在网络上很多借助此系统Shadowsocks插件+ShadowsocksR多用户服务端进行VPN的售卖,能做到流量控制等. 在对接此系统的API时,我发现了很多功能都已经实 ...

  9. D1

    第一天

  10. [转]vi command summary

    The following tables contain all the basic vi commands. *Starting vi* Command Description vi file st ...