HAProxy实现网站高并发集群

简介:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

项目需求:由于网站规模的扩大,访问量的也越来越多,原来的一台机器提供网站服务,出现故障后就中断了网站服务,造成经济损失,现在老板发话要解决单点故障,于是我就找了些资料,对比了下Haproxy、LVS、Nginx,是各有各的优点,我们的网站每天的PV也不是很大,就先在虚拟机上做了下测试,仅做Haproxy部分七层负载均衡,生产环境需要Haproxy+keepalived来实现负载均衡器高可用性。

先了解下HAProxy常用的算法:

roundrobin   #表示简单的轮询,每个负载均衡器基本都具备的
static-rr    #表示根据权重
leastconn    #表示最少连接者先处理
source       #表示根据请求源IP, haprox按照客户端的IP地址所有请求都保持在一个服务器上

ri           #表示根据请求的URI
rl_param     #表示根据请求的URl参数'balance url_param' requires an URL parameter name
hdr(name)    #表示根据HTTP请求头来锁定每一次HTTP请求
rdp-cookie(name) #表示根据据cookie(name)来锁定并哈希每一次TCP请求

拓扑图:

下载:http://haproxy.1wt.eu/

配置如下:

安装haproxy


1

2

3

4

[root@localhost ~]# tar zxvf haproxy-1.4.24.tar.gz

[root@localhost ~]# cd haproxy-1.4.24

[root@localhosthaproxy-1.4.24]# make TARGET=linux26 PREFIX=/usr/local/haproxy

[root@localhosthaproxy-1.4.24]# make install PREFIX=/usr/local/haproxy

#进入安装目录创建配置文件


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

[root@localhosthaproxy-1.4.24]# cd /usr/local/haproxy/

[root@localhost haproxy]# mkdir conf

[root@localhost haproxy]# cd conf/

[root@localhost conf]# vi haproxy.cfg

global

    log 127.0.0.1 local0  #通过syslog服务的local0输出日志信息

    maxconn 4096  #单个进程的最大连接数

    uid 99        #所属运行的用户uid,默认nobod

    gid 99        #所属运行的用户组,默认nobody

    daemon        #后台运行

    nbproc 2      #工作进程数量

    pidfile /var/run/haproxy.pid

defaults

    log global

    log 127.0.0.1 local3 err #使用本机上的syslog服务的local3 设备记录错误信息[err warning info debug]

    mode http          #工作模式在7层,tcp是4层

    option httplog     #使用http日志类别,默认是不记录http请求的

    option httpclose   #每次请求完毕后主动关闭http通道式

    option forwardfor  #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP

    option redispatch  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

    retries 3          #设置尝试次数,3次连接失败则认为服务器不可用

    maxconn 2048       #最大连接数

    contimeout 5000    #连接超时

    clitimeout 50000   #客户端超时

    srvtimeout 50000   #服务器超时

    timeout check 2000         #心跳检测超时

listen status 0.0.0.0:8080     #定义状态名字和监听端口

    stats uri /haproxy-status  #查看haproxy服务器状态地址

    stats auth admin:admin     #查看状态页面的用户名和密码

    stats hide-version         #隐藏haproxy版本信息

    stats refresh 30s          #每5秒刷新一次状态页面

listen web_server 0.0.0.0:80   #定义后端名字和监听端口

    mode http                  #采用7层模式

    balance roundrobin         #负载均衡算法,这里是轮叫

    cookie SERVERID  #允许插入serverid到cookie中,serverid后面可以定义

    option httpchk GET /index.html #健康检测

    server web1 192.168.1.11:80 weight 3 check inter 500 fall 3

    server web2 192.168.1.12:80 weight 2 check inter 500 fall 3

说明:用server来设置后端服务器

第二段:haproxy自己的一个名称,将在日志中显示

第三段:后端IP和端口

第四段:权重值,权重值越大,分配的任务几率越高

第五段:健康检测,inter 500健康检测间隔是500毫秒

最后一段:检测多少次,认为服务器是不可用的

启动haproxy


1

[root@localhost ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

重启haproxy


1

[root@localhost ~]# /usr/local/haproxy/sbi n/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -st `cat/var/run/haproxy.pid`

写一个简单的haproxy服务脚本


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

[root@localhost ~]# vi /etc/init.d/haproxy

#!/bin/bash

DIR=/usr/local/haproxy

PIDFILE=/var/run/haproxy.pid

ARG=$*

start()

{

echo "Starting Haproxy ..."

$DIR/sbin/haproxy -f $DIR/conf/haproxy.cfg

}

stop()

{

echo "Stopping Haproxy ..."

kill -9 $(cat $PIDFILE)

}

case $ARG in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

*)

echo "Usage: start|stop|restart"

#设置开机启动


1

2

[root@localhost ~]# chmod +x/etc/init.d/haproxy

[root@localhost ~]# echo "/etc/init.d/haproxy start" >> /etc/rc.local

#查看服务器状态

http://192.168.1.10:8080/haproxy-status

配置haproxy日志输出


1

2

3

4

[root@localhost ~]# vi /etc/rsyslog.conf #在下面添加

local3.*     /var/log/haproxy.log

local0.*     /var/log/haproxy.log

[root@localhost ~]# service rsyslog restart

后端web服务器配置相同


1

2

3

[root@localhost ~]# yum install httpd –y

[root@localhost ~]# service httpd start

[root@localhost ~]# echo "web1/web2" > /var/www/html/index.html

测试访问http://192.168.1.10,按F5一直刷新会显示轮训显示web1和web2,模拟web1故障down机,haproxy页面显示的状态会变成DOWN,只有web2提供服务,当web1恢复后会自动加入集群中。

时间: 2024-09-01 07:45:10

HAProxy实现网站高并发集群的相关文章

基于corosync+pacemaker的nginx高可用集群安装配置

  一.corosync.pacemaker介绍 corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色; pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理.资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方.通常它与corosync的结合方式有两种: pacemaker

memcached高可用集群原理及介绍

memcached高可用集群原理及介绍.memcached在实现分布式群集部署时,memcached服务之间是不能进行通讯的,分布式也是通过客户端的算法吧数据保存在不同的memcached中,所以当我们做完群集客户端往里面写入数据时,会出现下面的情况. 客户端往一个memcached节点写入数据后,另外两个节点是查询不到的. 那么如何结局额这个问题,就是接下来要做的了. memcached这种群集之间不能相互通讯导致了这种情况,这在访问量很大的web网站中是不允许的.所以我们就要使用到一个mag

关于tomcat并发,集群的问题

问题描述 关于tomcat并发,集群的问题 一个tomcat可以支持150并发,如果还想增加并发就需要搭建集群,那只要集群够大,是不是就可以无限拓展? 解决方案 理论上是这样的.当然了,系统规模越大,需要考虑的问题越多,特别是数据的同步性问题.一个拥有1000个节点的系统和1000个完全不相干的系统毕竟不是一回事,除非你的网站只有输出没有输入. 搭建群集的目的是提高吞吐性能.但是这个speed up即便无限趋近线性还是有损耗的,如果你20000个节点只比10000个节点快1%,但是你要多付出一倍

高可用集群HA及负载均衡集群LB的实现方法

集群是个热门话题,在企业中越来越多地应用Linux操作系统提供邮件.Web.文件存储.数据库等服务,随着Linux应用的日益增长,高可用及http://www.aliyun.com/zixun/aggregation/13996.html">负载均衡Linux集群也在企业中逐步地发展起来.Linux平台的低成本.高性能.高扩展性使得Linux集群能够以低廉的价格很好地满足各种应用的需求. 本文介绍Linux集群的基础知识,集群的分类.在熟悉集群的基础知识后会以RHCS(RedHat Clu

关于Nginx+Jboss高可用集群的问题

问题描述 有两台linux服务器,准备部署Nginx+Jboss高可用集群,准备在服务器1上安装Nginx和多个Jboss实例,服务器2上也是安装Nginx和多个Jboss实例,Nginx负责静态文件处理和前端调度,静态文件存储于两台服务器可共同访问的存储上.俩个Nginx中只有一个处于工作状态,所有Jboss实例均处于工作状态.实现效果:1.Jboss集群中的实例失效后,前端调度的Nginx负责把请求分发到其他Jboss实例,失效Jboss实例上的session转移到其他实例.2.其中一个Ng

RabbitMQ学习系列(六): RabbitMQ 高可用集群

前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/category/855479.html 本来一直想写一个介绍RabbitMQ高可用的集群的文章.不过,后来发现园子里,有个已经RabbitMQ大牛写了,关于高可用集群的文章了.特别巧合的是,还是以前公司的同事.所以,这里就不啰嗦.直接引用过来吧.原文地址:http://www.cnblogs.com/

利用IBM PowerHA SystemMirror plug-in管理基Power平台的高可用集群

PowerHA 是 IBM 发布的一款高可用集群套件,通过它可以在 AIX 系统上构建由多个节点组成的高可用集群计算环境,增强应用的防灾能力,减少停机时间.IBM System Director(以下简称 ISD)是 IBM 推出的平台管理工具,可以在统一的用户界面实现跨平台的主机系统管理.通过 PowerHA SystemMirror plug-in,ISD 可以实现对高可用平台的创建和管理.基于 ISD 的统一http://www.aliyun.com/zixun/aggregation/1

轻松构建Mysql高可用集群系统

一. MySQL复制的实现原理 MySQL支持单向.双向复制.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入一个二进制日志文件中,并创建一个索引文件以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,日志文件会通知主服务器,从服务器在日志中读取的最后一次成功更新的位置.接着,从服务器在上次成功更新的位置处开始进入更新操作.更新完成后从服务器开始进入等待状态,等待主服务器后续的更新. 需要注意的是:在进行复制时,所

高可用集群Heartbeat简述

一.什么是高可用集群?高可用集群是怎么工作的? 高可用集群(HA:High Availability),就是为了保证服务的持续可用性,使用1个或多个备用主机来保证主服务器宕掉后能自动接替其工作的方案. 这些主机中,正在工作的,我们称为主节点,看着主节点挂掉然后才能干活的,我们称之为备节点,一般高可用集群中,只有两个节点是很特殊的HA集群,一般都是3个或3个以上. 而主机工作一般都是提供各种服务,不管是网页服务还是邮件服务或者数据库服务等,我们将这些服务和服务所需的一些特性或者属性称为资源:(re