简介: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/

配置如下:

1.安装haproxy

[root@localhost ~]# tar zxvf haproxy-1.4..tar.gz
[root@localhost ~]# cd haproxy-1.4.
[root@localhosthaproxy-1.4.]# make TARGET=linux26 PREFIX=/usr/local/haproxy
[root@localhosthaproxy-1.4.]# make install PREFIX=/usr/local/haproxy

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

[root@localhosthaproxy-1.4.]# 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 #单个进程的最大连接数
uid #所属运行的用户uid,默认nobod
gid #所属运行的用户组,默认nobody
daemon #后台运行
nbproc #工作进程数量
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次连接失败则认为服务器不可用
maxconn #最大连接数
contimeout #连接超时
clitimeout #客户端超时
srvtimeout #服务器超时
timeout check #心跳检测超时
listen status 0.0.0.0: #定义状态名字和监听端口
stats uri /haproxy-status #查看haproxy服务器状态地址
stats auth admin:admin #查看状态页面的用户名和密码
stats hide-version #隐藏haproxy版本信息
stats refresh 30s #每5秒刷新一次状态页面
listen web_server 0.0.0.0: #定义后端名字和监听端口
mode http #采用7层模式
balance roundrobin #负载均衡算法,这里是轮叫
cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义
option httpchk GET /index.html #健康检测
server web1 192.168.1.11: weight check inter fall
server web2 192.168.1.12: weight check inter fall

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

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

第三段:后端IP和端口

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

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

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

3.启动haproxy

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

4.重启haproxy

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

5.写一个简单的haproxy服务脚本

[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 - $(cat $PIDFILE)
}
case $ARG in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: start|stop|restart"

6.设置开机启动

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

7.查看服务器状态

http://192.168.1.10:8080/haproxy-status

8.配置haproxy日志输出

[root@localhost ~]# vi /etc/rsyslog.conf #在下面添加
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
[root@localhost ~]# service rsyslog restart

9.后端web服务器配置相同

[root@localhost ~]# yum install httpd –y
[root@localhost ~]# service httpd start
[root@localhost ~]# echo "web1/web2" > /var/www/html/index.html

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

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

  1. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

  2. CentOS7 haproxy+keepalived实现高可用集群搭建

    一.搭建环境 CentOS7 64位 Keepalived 1.3.5 Haproxy 1.5.18 后端负载主机:192.168.166.21 192.168.166.22 两台节点上安装rabbi ...

  3. keepalived + lvs 网站高可用集群

    一 ,四台服务器 master 端 : 192.168.1.3 backup 端: 192.168.1.4 REserver1 端 : 192.168.1.5 REserver2 端: 192.168 ...

  4. 吾日三省吾身 java核心代码 高并发集群 spring源码&思想

    阿里面试题    未解决https://my.oschina.net/wuweixiang/blog/1863322 java基础  有答案  https://www.cnblogs.com/xdp- ...

  5. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  6. Haproxy+keepalived高可用集群实战

    1.1  Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...

  7. rabbitmq+ keepalived+haproxy高可用集群详细命令

    公司要用rabbitmq研究了两周,特把 rabbitmq 高可用的研究成果备下 后续会更新封装的类库 安装erlang wget http://www.gelou.me/yum/erlang-18. ...

  8. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

  9. RabbitMQ从零到集群高可用(.NetCore5.0) -高可用集群构建落地

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

随机推荐

  1. [TimLinux] CSS float和position详解

    1.1. 定义 摘自w3school:float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它 ...

  2. CoderForces-617B

    Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Each query is g ...

  3. tensorflow处理mnist(二)

    用卷积神经网络解决mnist的分类问题. 简单的例子 一行一行解释这个代码. 这个不是google官方的例子,但是很简洁,便于入门.tensorflow是先定义模型,最后赋值,计算.为了讨论问题方便, ...

  4. 基于CC1606 FPGA评估板移植iCamera程序小结

    iCamera作为柴草电子经典的摄像头开发工具,其强大的摄像头调试功能,深受广大网友喜爱,支持市面上各种摄像头. 目前现有的应用板卡支持:CC1601(CP601A). CC1602(CP601B) ...

  5. 如何在Ubuntu上给软件创建快捷方式

    特殊方法:在搜索栏搜索程序  然后在快捷栏 反键 锁定在启动器     默认情况下,Ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面 ...

  6. Day 05 文本处理和爬虫基础1

    目录 什么是文件 什么是文本 如何通过文本编辑器控制.txt文件 打开文件的三种模式 t和b模式 高级应用 文本处理 + 词云分析 效果如下 爬虫原理 requests模块 re模块 爬取图片 爬取视 ...

  7. 使用FileReader在浏览器读取预览文件(image和txt)

    如标题,之前在某个地方看到因为有Blob的存在,理论上可以在浏览器上查看所有格式的文件.自己想着试试现在暂时只能够查看图片和预览txt文件.其他的比如doc,docx格式的文件查看的时候是乱码 如图: ...

  8. 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用

    温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...

  9. webpack前端简单配置

    每次用webpack创建项目时,总是要安装一堆包,还要配置一系列文件解析规则,webpack打包规则等,烦不胜烦.网上找的很多webpack配置里面很多里面的配置或者引入包都是被弃用的,因此自己总结了 ...

  10. Test 1022

    T1 AERODROM (二分答案 TimeLimit: 1000MS Memory Limit: 32768KB \(N\)个登机口,办理登机业务,第\(i\)个窗口的单位办理时间为\(T_i\), ...