码迷,mamicode.com
首页 > 其他好文 > 详细

haproxy

时间:2015-12-03 20:51:16      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

千万级高并发负载均衡软件HA PROXY
基于硬件的负载均衡设备:f5,big-ip等
基于软件的负载均衡产品:ha proxy,lvs,nginx等
在软件的负载均衡产品中,分为基于系统的软负载实现和基于第三方软件的软负载实现,LVS是基于系统实现的一种软负载。HA proxy是基于第三方应用实现的软负载均衡
1.ha proxy简介
ha proxy是一个开源的,高性能的,基于tcp第四层和http第七层应用的负载均衡软件
优点:可靠性和稳定性非常好
    最高可以同时维护40000-50000个并发连接。单位时间内处理最大的请求数为20000.最大数据处理能力可达10GBPS
    支持多于8种负载均衡算法,同时也支持session保持
    支持虚拟主机功能。
    支持连接拒绝,全透明代理等功能
    ha proxy拥有一个功能强大的服务器状态监控页面
    haproxy 拥有强大的ACL支持
在业务系统方面。haproxy非常实用于那些并发量特别大而且需要持久连接或四层和七层处理机制的web系统,例如电商,另外haproxy也可用于mysql数据库(读操作)的负载均衡

2.四层和七层负载均衡的区别
四层负载均衡器也称为四层交换机,它主要是通过分析ip层及tcp/udp层的流量实现的基于ip+端口
tcp应用实例:负载均衡器在接收到第一个来自SYN请求时,会通过设定的负载均衡算法选择一台最佳的后端服务器,同时将报文中的目标ip修改为后端服务器ip,然后直接转发给该服务器。负载均衡器在这个过程中相当于一个路由器的作用
七层负载均衡器也称为7层交换机,位于iso应用层,支持多种应用协议,常见的HTTP,FTP,SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器。因此也称为“内容交换机”。七层负载均衡器在这个情况下类似于一个代理服务器。

3.haproxy与LVS的异同
两者都是软件负载均衡的产品。但是lvs基于系统,haproxy基于第三方应用
lvs是基于第四层的ip负载技术。haproxy是基于第四层和第七层,可提供tcp和http应用的负载均衡综合解决方案
LVS工作在iso模型第四层,状态监测功能单一。haproxy监测功能强大,可支持端口,url,脚本等多种检测方式
haproxy处理性能低于四层负载均衡模式的LVS
选择那个作为负载均衡器,需要以实际环境来决定

roundrobin动态 支持权重和在服务器运行时调整,支持慢速启动
static-rr静态 不支持在服务器运行时调整,不支持慢速启动
leastconn 最少连接,只建议使用非常长的会话
source:后端服务器时动态服务器时使用,类似于nginx的iphash
Hash-type:map-based静态 hash码取余 计算ip的hash码除以所有的服务器数,余数得几就放在第几个服务器上
Hash-type:consistent 动态  一致性hash hash环
基于权重 weight 动态
uri 根据用户访问的uri来负载均衡,它也有hash表,同样有hash-type,第一次访问的结果被负载到哪个服务器,保存在了hash表中,在来访问同样的uri,就会始终到这台服务器。
url_param 根据用户帐号信息,将请求发往同一个服务器,同样有hash-type。
hdr: 首部 根据请求首部调度,同样有hash-type
request header 请求首部
reponse header 响应首部
hdr(hosts) 格式

cat /etc/redhat-release
CentOS release 6.6 (Final)
uname -r
2.6.32-504.el6.x86_64
yum install pcre-devel openssl-devel -y
tar zxvf haproxy-1.4.26.tar.gz
cd haproxy-1.4.26
make TARGET=linux26 ARCH=x86_64
make PREFIX=/application/haproxy install


配置Haproxy
    Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。    •global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改;
    •default:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;
    •frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
    •backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;
    •listen:Frontend和Backend的组合体。
vi /etc/sysctl.conf
加入下面内容
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

sysctl -p

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.ipv4.ip_nonlocal_bind = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

cd /application/haproxy/
mkdir -p bin conf logs var/run var/chroot

vim /application/haproxy/conf/haproxy.conf
global
        chroot /application/haproxy/var/chroot
        daemon
        group www
        user www
        log 127.0.0.1:514 local0 warning
        pidfile /application/haproxy/var/run/haproxy.pid
        maxconn 20000
        spread-checks 3
        nbproc 8

defaults
        log     global
        mode    http
        retries 3
        option redispatch
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen test
        bind 192.168.12.147:80
        mode http
        stats enable
        stats hide-version
        stats uri /manage?status
        stats auth proxy: sfkldsreXtrUZ23sfd_Xds
        balance roundrobin
       option httpclose
       option forwardfor
       cookie SERVERID insert indirect
       timeout server  15s
       timeout connect 15s
      server ett-1-1 192.168.12.22:80 cookie ett-1-1 check port 80 inter 5000 fall 5
      server ett-1-2 192.168.12.25:80 cookie ett-1-1 check port 80 inter 5000 fall 5

增加IP

ifconfig eth1 add 192.168.12.147


配置启动脚本
vi /etc/rc.d/init.d/haproxy
#!/bin/bash
BASE="/application/haproxy"
PROG=$BASE/sbin/haproxy
PIDFILE=$BASE/var/run/haproxy.pid
CONFFILE=$BASE/conf/haproxy.conf

case "$1" in
start)
        $PROG -f $CONFFILE
        ;;
status)
        if [ ! -f $PIDFILE ]; then
                echo "pid not found"
                exit 1
        fi
        for pid in $(cat $PIDFILE); do
                kill -0 $pid
                RETVAL="$?"
                if [ ! "$RETVAL" = "0" ]; then
                        echo "process $pid died"
                        exit 1
                fi
        done
        echo "process is running"
        ;;
restart)
        $PROG -f $CONFFILE -sf $(cat $PIDFILE)
        ;;
stop)
        kill $(cat $PIDFILE)
        ;;
*)
        echo "USAGE: $0 start|restart|status|stop"
        exit 1
        ;;
esac

chmod +x /etc/rc.d/init.d/haproxy

vi /etc/rsyslog.conf
#增加如下行,记录日志到/var/log/haproxy.log 文件
local0.*                                      /var/log/haproxy.log   
第三步:
vi /etc/sysconfig/rsyslog
将SYSLOGD_OPTIONS="-m 0"
 改成
 SYSLOGD_OPTIONS="-c 2 -r -m 0"

service rsyslog restart

/etc/init.d/haproxy start

 

参考文档:http://www.07net01.com/storage_networking/Haproxydaili_fuzaijunhengjiqidiaodusuanfa_jiehekeepalivedzuogaokeyongdaili_651364_1380997910.html

haproxy

标签:

原文地址:http://www.cnblogs.com/zclzhao/p/5017257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!