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请求

拓扑图:

124805373.jpg

下载: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

125812648.png

配置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恢复后会自动加入集群中。



本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1338009,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 NoSQL Java
Redis助力高并发网站:在线用户统计不再是难题!
小米带你了解如何使用Redis高效统计网站的在线与并发用户数。通过维护用户的活跃时间,利用Redis有序集合(Sorted Set)特性,可实时更新在线用户列表并统计数量。具体实现包括记录用户上线时间、定期清理离线用户及统计特定时间窗口内的活跃用户数。这种方法适用于高并发场景,保证统计结果的实时性和准确性。跟着小米一起探索Redis的强大功能吧!
406 2
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
371 1
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
773 1
|
负载均衡 网络协议 算法
HAProxy实现网站高并发集群
HAProxy实现网站高并发集群
|
缓存 NoSQL 安全
缓存杂谈(六) Redis的高并发及主从集群入门
Redis的高并发及主从集群入门
270 0
缓存杂谈(六) Redis的高并发及主从集群入门
|
存储 缓存 运维
【高并发/高可用/哨兵机制/集群模式/高可用与主备切换/主从复制/断点续传】
【高并发/高可用/哨兵机制/集群模式/高可用与主备切换/主从复制/断点续传】
362 0
【高并发/高可用/哨兵机制/集群模式/高可用与主备切换/主从复制/断点续传】
|
缓存 分布式计算 负载均衡
面试:第九章:分布式 、高并发、集群、负载均衡、高可用(上)
面试:第九章:分布式 、高并发、集群、负载均衡、高可用
867 0
面试:第九章:分布式 、高并发、集群、负载均衡、高可用(上)
|
存储 监控 NoSQL
高并发核心技术Redis系列(六)--------主从复制、集群(下)
将服务器调整为一主多从(6379带6380、6381)
229 0
高并发核心技术Redis系列(六)--------主从复制、集群(下)
|
存储 监控 负载均衡
高并发核心技术Redis系列(六)--------主从复制、集群(上)
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
371 0
高并发核心技术Redis系列(六)--------主从复制、集群(上)

热门文章

最新文章