haproxy实现负载均衡

简介:
haproxy实现负载均衡
一、概述
1.hparoxy介绍
HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件。
在7层负载均衡方面的功能很强大(支持cookie track, header rewrite等等),支持双机热备,支持虚拟主机,支持健康检查(通过patch可以支持ECV),
同时还提供直观的监控页面,可以清晰实时的监控服务集群的运行状况。同时支持Linux 2.6内核中System Epoll,通过简化系统调用,大幅的提高了网络I/O性能。
Haproxy包括以下一些特征:
   根据静态分配的cookie 分配HTTP请求分配负载到各个服务器,同时保证服务器通过使用HTTP Cookie实现连接保持;
   当主服务器宕机时切换到备份服务器;允许特殊端口的服务监控;
   做维护时通过热配置可以保证业务的连续性,更加人性化;
   添加/修改/删除HTTP Request和Response 头;
   通过特定表达式Block HTTP请求;
   根据应用的cookie做连接保持;
   带有用户验证的详细的HTML监控报告;
   新的1.3版本引入了frontend,backend配置段, frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend,通过ACL可以实现类似与F5的irules的功能。功能非常强大
2.Haproxy负载均衡的调度种方式
2.1.简单的轮询,balance roundrobin;
根据weights(权重)值来分配请求,weights默认为1。
优点:实现简单,流量按权重分配。
缺点:不够灵活。
2.2.根据请求的源IP,balance source;
这种均衡方式是对IP源进行hashed运算来匹配。
优点:可以保持用户会话(同一IP用户会尽可能访问到同一台服务器)。
缺点:有可能造成单点瓶颈(weights无效)。
2.3.根据请求的uri,balance uri;
根据客户端请求的URL进行hashed运算来匹配。
优点:可以提高缓存的命中率(同一URL会尽可能分配到同一台服务器);
缺点:有可能造成单点瓶颈(weights无效)。
2.4.根据请求URL中的参数,balance url_param。
根据指定URL参数进行hashed运算来匹配。
优点:比较灵活,可以提高缓存的命中率(同一指定参数会尽可能分配到同一台服
务器);
缺点:有可能造成单点瓶颈(weights无效)。
2.5.根据连接类型,balance leastconn;
根据连接类型进行匹配。
优点:比较适合长会话的连接,如LDAP, SQL, TSE, etc等;
缺点:不适合短会话的连接,如http。

3.实验环境
服务角色     hostname   ip                web
haproxy      node0      192.168.32.30     
phpserver1   node1      192.168.32.31     nginx  
phpserver2   node2      192.168.32.32     nginx
htmlserver1  node2      192.168.32.32     nginx
htmlserver2  node3      192.168.32.33     nginx

五、HAProxy支持虚拟主机。
二、HAProxy的下载及安装过程:
[root@node0 ~]# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.19.tar.gz
[root@node0 ~]# tar -zxf haproxy-1.4.19.tar.gz
[root@node0 ~]# cd haproxy-1.4.19
[root@node0 haproxy-1.4.19]# make TARGET=linux26 PREFIX=/usr/local/haproxy install   
#PREFIX必须用大写,否则无法安装到指定目录/usr/local/haproxy中

[root@node0 ~]# cd /usr/local/haproxy
[root@node0 haproxy]#mkdir conf logs
[root@node0 haproxy]#cd conf

三、配置haproxy负载均衡
1.配置文件
HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。
global    参数是进程级的,通常和操作系统(OS)相关.这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults  配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
frontend  接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
backend   后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
listen    Frontend和Backend的组合体。 

2.配置haproxy
[root@node0 conf]#vim /usr/local/haproxy/conf/haproxy.conf   
#源目录haproxy-1.4.19的子目录examples下有各种配置实例,可参照实例配置.
#参数、选项、架构等说明可参看/usr/local/haproxy/doc下各文件(configuration.txt、architecture.txt等)

# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
        log 127.0.0.1   local0 info
        #全局的日志配置,使用本机的syslog来记录log,请使用/dev/log,其中日志级别是[err warning info debug].local0 是日志设备(/etc/syslog/conf中所定义),
        #必须为如下24种标准syslog设备的一种:
        #kern   user   mail   daemon auth   syslog lpr    news    
        #uucp   cron   auth2  ftp    ntp    audit  alert  cron2   
        #local0 local1 local2 local3 local4 local5 local6 local7   
        maxconn 65536     #最大连接数
        ulimit-n 131087  #必须是maxconn的两倍以上     
        chroot /usr/local/haproxy  #适用于chroot环境,为了安全      
        uid 99              #haproxy运行的用户和组
        gid 99
        daemon              #后台运行      
        nbproc  4           #设置4个并发进程,在做debug时建议设置为1
        pidfile /usr/local/haproxy/logs/haproxy.pid  #PID文件所在地
        option nolinger     #在连接关闭时立即清理连接,减少处于FIN_WAIT1状态的连接
        #debug
        #quiet

defaults
        log     global
        mode    http         #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        option  httplog      #启用http请求log
        option  dontlognull 
        option  http-server-close
        option  abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option  allbackups             #但设置了backup的时候,默认第一个backup会优先,设置option allbackups后所有备份服务器权重一样
        option  forwardfor             #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP
        option  redispatch             #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        stats   uri /admin/status      #监控haproxy状态的页面,可以使用http://IP/admin/status查看 
        stats   auth admin:admin@123   #登录监控页面的用户名密码
        stats   refresh 60s            #监控页面的刷新时间
        retries 3                      #三次连接失败就认为是服务器不可用,也可以通过后面设置
        maxconn 65536                  #默认的最大连接数
        contimeout      5000           #连接超时
        clitimeout      50000          #客户端超时
        srvtimeout      50000          #服务器超时

frontend web_nginx                     #定义前端服务器,相当于F5里的VIP的概念
        mode http 
        maxconn 65536
        bind 192.168.32.30:80         #设定vip的监听端口
        bind-process 4                #针对多核处理,启用处理器数量

        acl php_nginx path_end  .php      #判断文件后缀名是不是.php,如果是返回true
        acl html_nginx path_end .html     #判断文件后缀名是不是.html,如果是返回true

        use_backend php_backend if php_nginx   #当满足php_nginx策略时使用php_backend的backend
        use_backend html_backend if html_nginx #当满足html_nginx策略时使用html_backend的backend

backend php_backend
        mode http
        fullconn  4096        #设置最大连接 
        balance roundrobin    #负载均衡的方式,roundrobin平均方式
        option  httpchk HEAD /check.php HTTP/1.0   
        #心跳检查Haproxy会判断你的后端web的根上存在check.txt没有,以此作为haproxy-status的监控状态依据,将它#掉即可;
        #如果是生产环境,你可将check.php改为index.jsp或index.php即可。
        #一般的健康检查可以采用HEAD方法来做,而不是才采用GET方法,用于HEAD方法没有数据返回,仅检查Response的HEAD是不是200。相对来说,更快,而且更简单
        server node1  192.168.32.31:80 check inter 2s minconn 64 maxconn 2048 slowstart 10s weight 100
        server node2  192.168.32.32:80 check inter 2s minconn 64 maxconn 2048 slowstart 10s weight 100
        #服务器定义/ip/check inter启用健康检查,检测心跳频率/minconn最小连接数/maxconn最大连接数/slowstart至全速缓冲时间/weight
        
backend html_backend
        mode http
        fullconn 4096
        balance roundrobin
        cookie SERVERID       #允许插入serverid到cookie中,serverid后面可以定义
        option  httpchk HEAD /check.html HTTP/1.0
        server node2  192.168.32.32:80 cookie 2 check inter 2s rise 3 fall 3 weight 100
        server node3  192.168.32.33:80 cookie 3 check inter 2s rise 3 fall 3 weight 100
        #服务器定义,cookie 1表示serverid为1,check inter 2s 是检测心跳频率
        #rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

3.log配置
[root@node0 ~]#vim /etc/syslog.conf
#syslog.conf里加一行
local0.*  /var/log/haproxy.log

四、启动测试
1.编辑启动脚本
[root@node0 ~]# vim /usr/local/haproxy/sbin/harun.sh 
#!/bin/bash
DIR=/usr/local/haproxy
ARG=$*

start()
{
echo "START HAPROXY SERVERS"
$DIR/sbin/haproxy -f $DIR/conf/haproxy.cfg
}

stop()
{
echo "STOP HAPROXY SERVERS"
kill -9 $(cat $DIR/logs/haproxy.pid)
}

case $ARG in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: start|stop|restar"
;;
esac

2.启动/关闭
[root@node0 ~]# /usr/local/haproxy/sbin/harun.sh start
START HAPROXY SERVERS
[root@node0 ~]# ps -ef | grep haproxy
nobody    9164     1  0 01:17 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
root      9166  8695  0 01:18 pts/1    00:00:00 grep haproxy
[root@node0 ~]# /usr/local/haproxy/sbin/harun.sh stop
STOP HAPROXY SERVERS
/usr/local/haproxy/sbin/harun.sh: line 14: kill: (9103) - 没有那个进程
/usr/local/haproxy/sbin/harun.sh: line 14: kill: (9104) - 没有那个进程
/usr/local/haproxy/sbin/harun.sh: line 14: kill: (9105) - 没有那个进程

3.测试
访问http://192.168.32.30/index.php
访问http://192.168.32.30/index.html
访问http://192.168.32.30/admin/status


本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/798820
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
90 0
|
3天前
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
8 1
|
5月前
|
负载均衡 前端开发 网络协议
Keepalived+HAProxy 搭建高可用负载均衡(二)
Keepalived+HAProxy 搭建高可用负载均衡
|
5月前
|
负载均衡 算法 调度
Keepalived+HAProxy 搭建高可用负载均衡
Keepalived+HAProxy 搭建高可用负载均衡
224 0
|
5月前
|
负载均衡 算法 应用服务中间件
Haproxy负载均衡
Haproxy负载均衡
|
6月前
|
负载均衡 前端开发 应用服务中间件
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
企业实战(22)基于Haproxy负载均衡+Keepalived高可用集群实战详解
|
11月前
|
运维 负载均衡 监控
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
672 0
在 Linux 中如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?
|
负载均衡 网络协议 算法
配置 haproxy 负载均衡群集(二)
本文将要介绍一款比较流行的群集调度工具。首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建web群集的方法。
配置 haproxy 负载均衡群集(二)
|
负载均衡 算法 网络协议
配置 haproxy 负载均衡群集(一)
本文将要介绍一款比较流行的群集调度工具。首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建web群集的方法。
配置 haproxy 负载均衡群集(一)
|
存储 负载均衡 NoSQL
docker swam 集群实现负载均衡
docker swam 集群实现负载均衡