目录:

一、常见的web集群调度器

二、Haproxy应用分析

三、Haproxy调度算法原理

四、Haproxy特性

五、Haproxy搭建 Web 群集

一、常见的web集群调度器

  1. 目前常见的web集群调度器分为软件和硬件
  2. 软件通常使用开源的LVS、Haproxy、Nginx
  3. 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

二、Haproxy应用分析
1.LVS在企业应用中抗负载能力很强,但存在不足

  • • LVS不支持正则处理,不能实现动静分离
  • • 对于大型网站,LVS的实施配置复杂,维护成本相对较高

2.Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件

  • • 适用于负载大的web站点
  • • 运行在硬件上可支持数以万计的并发连接的连接请求

三、Haproxy调度算法原理
Haproxy 支持多种调度算法,最常用的有三种
(1)RR(Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

例如:

• 有三个节点A、B、C

• 第一个用户访问会被指派到节点A

• 第一个用户访问会被指派到节点B

• 第一个用户访问会被指派到节点C

• 第四个用户访问会被指派到节点A,轮询分配访问请求实现负载均衡效果

(2)LC(Least Connections)

最小连接数算法,根据后端的节点连接数大小动态分配前端请求

例如:

• 有三个节点A、B、C,各节点的连接数分别为A:4、B:5、 C:6

• 第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、 C:6

• 第二个用户请求会继续分配到A上,连接数变为A:6、B:5、 C:6; 再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端

• 由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况

• 此算法相比较rr算法有很大改进,是目前用到比较多的一-种算法

(3)SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

例如:

• 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B

• 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度

• 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引|起负载不均衡,部分节点访问量超大,影响业务使用

四、Haproxy特性

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

Haproxy的主要特性有:

  • 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
  • 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  • 支持多达8种负载均衡算法,同时也支持会话保持;
  • 支持虚机主机功能,从而实现web负载均衡更加灵活;
  • 支持连接拒绝、全透明代理等独特的功能;
  • 拥有强大的ACL支持,用于访问控制;
  • 其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条目的增加而速度有所下降;
  • 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;
  • 支持TCP加速,零复制功能,类似于mmap机制;
  • 支持响应池(response buffering);
  • 支持RDP协议;
  • 基于源的粘性,类似nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;
  • 更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;
  • 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;
  • 基于流量的健康评估机制;
  • 基于http认证;
  • 基于命令行的管理接口;
  • 日志分析器,可对日志进行分析。

HAProxy负载均衡策略非常多,常见的有如下8种:

  • roundrobin:表示简单的轮询。
  • static-rr:表示根据权重。
  • leastconn:表示最少连接者先处理。
  • source:表示根据请求的源IP,类似Nginx的IP_hash机制。
  • ri:表示根据请求的URI。
  • rl_param:表示根据HTTP请求头来锁定每一次HTTP请求。
  • rdp-cookie(name):表示根据据cookie(name)来锁定并哈希每一次TCP请求。

LVS、Nginx、HAproxy的区别:

  • LVS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
  • HAProxy功能强大,但整体性能低于4层模式的LVS负载均衡。
  • Nginx主要用于Web服务器或缓存服务器。

五、Haproxy搭建 Web 群集

环境准备

Haproxy服务器:192.168.91.5
Nginx 服务器1:192.168.91.10
Nginx 服务器2:192.168.91.15
客户端:192.168.91.100

1、haproxy 服务器部署

 1 1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
2 systemctl stop firewalld
3 setenforce 0
4
5 haproxy-1.5.19.tar.gz
6
7 2.编译安装 Haproxy
8 yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
9
10 tar zxvf haproxy-1.5.19.tar.gz
11 cd haproxy-1.5.19/
12 make TARGET=linux2628 ARCH=x86_64
13 make install
14
15 ---------------------参数说明---------------------------------------------------------------------------
16 TARGET=linux26 #内核版本,
17 #使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
18
19 ARCH=x86_64 #系统位数,64位系统
20 ----------------------------------------------------------------------------------------------------------
21
22 3.Haproxy服务器配置
23 mkdir /etc/haproxy
24 cp examples/haproxy.cfg /etc/haproxy/
25
26 cd /etc/haproxy/
27 vim haproxy.cfg
28 global
29 --4~5行--修改,配置日志记录,local0为日志设备,默认存放到系统日志
30 log /dev/log local0 info
31 log /dev/log local0 notice
32 #log loghost local0 info
33 maxconn 4096 #最大连接数,需考虑ulimit -n限制
34 --8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
35 #chroot /usr/share/haproxy
36 uid 99 #用户UID
37 gid 99 #用户GID
38 daemon #守护进程模式
39
40 defaults
41 log global #定义日志为global配置中的日志定义
42 mode http #模式为http
43 option httplog #采用http日志格式记录日志
44 option dontlognull #不记录健康检查日志信息
45 retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
46 redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
47 maxconn 2000 #最大连接数
48 contimeout 5000 #连接超时时间
49 clitimeout 50000 #客户端超时时间
50 srvtimeout 50000 #服务器超时时间
51
52 --删除下面所有listen项--,添加
53 listen webcluster 0.0.0.0:80 #定义一个名为webcluster的应用
54 option httpchk GET /index.html #检查服务器的index.html文件
55 balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
56 server inst1 192.168.116.60:80 check inter 2000 fall 3 #定义在线节点
57 server inst2 192.168.116.80:80 check inter 2000 fall 3
58
59 ---------------------参数说明---------------------------------------------------------------------------
60 balance roundrobin #负载均衡调度算法
61 #轮询算法:roundrobin;最小连接数算法:leastconn;来源访问调度算法:source,类似于nginx的ip_hash
62
63 check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
64 fall 3 #表示连续三次检测不到心跳频率则认为该节点失效
65 若节点配置后带有“backup”表示该节点只是个备份节点,只有主节点失效该节点才会上。不携带“backup”,表示为主节点,和其它主节点共同提供服务。
66 ----------------------------------------------------------------------------------------------------------
67
68
69 4.添加haproxy 系统服务
70 cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
71 chmod +x haproxy
72 chkconfig --add /etc/init.d/haproxy
73
74 ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
75 service haproxy start 或 /etc/init.d/haproxy start

2、节点服务器部署

 1 systemctl stop firewalld
2 setenforce 0
3
4 yum install -y pcre-devel zlib-devel gcc gcc-c++ make
5
6 useradd -M -s /sbin/nologin nginx
7
8 cd /opt
9 tar zxvf nginx-1.12.0.tar.gz -C /opt/
10
11 cd nginx-1.12.0/
12 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
13
14 make && make install
15
16 --192.168.91.10---
17 echo "this is accp web" > /usr/share/nginx/html/index.html
18
19 --192.168.91.15---
20 echo "this is benet web" > /usr/share/nginx/html/index.html
21
22 ln -s /usr/share/nginx/sbin/nginx /usr/local/sbin/
23
24 nginx #启动nginx 服务
25
26 或者用yum安装
27 cat > /etc/yum.repos.d/nginx.repo << 'EOF'
28 [nginx]
29 name=nginx repo
30 baseurl=http://nginx.org/packages/centos/7/$basearch/
31 gpgcheck=0
32 EOF
33
34 yum install nginx -y

两个节点服务器的配置是一样的,yum安装Nginx更快。这里就只展示其中一台的配置图

3、测试 Web群集

在客户端使用浏览器打开 http://192.168.91.5/index.html ,不断刷新浏览器测试负载均衡效果

4、日志定义

 1 #默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
2 vim /etc/haproxy/haproxy.cfg
3 global
4 log /dev/log local0 info
5 log /dev/log local0 notice
6
7 service haproxy restart
8
9 #需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
10 vim /etc/rsyslog.d/haproxy.conf
11 if ($programname == 'haproxy' and $syslogseverity-text == 'info')
12 then -/var/log/haproxy/haproxy-info.log
13 &~
14 if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
15 then -/var/log/haproxy/haproxy-notice.log
16 &~
17
18 #说明:
19 这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。
20
21 systemctl restart rsyslog.service
22
23 tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的访问请求日志信息

  

Haproxy搭建web集群的更多相关文章

  1. Haproxy配合Nginx搭建Web集群部署

    Haproxy配合Nginx搭建Web集群部署实验 1.Haproxy介绍 2.Haproxy搭建 Web 群集 1.Haproxy介绍: a)常见的Web集群调度器: 目前常见的Web集群调度器分为 ...

  2. 用 HAproxy 搭建 RabbitMQ 集群

    构建参考: [ Rabbitmq cluster setup with HAproxy ] [ python demo ] RabbitMQ Cluster 遇到的问题 python pika 作为c ...

  3. docker+phantomjs+haproxy 搭建phantomjs集群

    目标: 搭建一个远程的phantomjs服务器,提供高可用服务,支持并发. 原料: 1.docker环境.docker-compose环境 2.phantomjs镜像: docker.io/werni ...

  4. 使用windos模拟搭建web集群(二)

    一.通过rsync搭建备份服务器 这三个目录我们需要做实时热备,他们分别是  系统的脚本目录  系统的配置文件目录  系统的定时任务目录 [root@mage-monitor- ~]# cat /se ...

  5. 使用windos电脑模拟搭建web集群(一)

    资源规划 1.环境准备 centos7.2 虚拟机 13个 可以先配置一台,做好基础优化,然后克隆13台分布在 windos宿主机上 两台windos笔记  都是8g的内存 一台有点内存吃紧. 没有物 ...

  6. Web集群调度器-Haproxy

    Web集群调度器-Haproxy 目录 Web集群调度器-Haproxy 一.Web集群调度器 1.常用的Web集群调度器 2. Haproxy应用分析 3. Haproxy的主要特性 4. 常用集群 ...

  7. haproxy+keepalived实现web集群高可用性[转]

    负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将“请求”.“访问”的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些 ...

  8. 每秒处理3百万请求的Web集群搭建-用 LVS 搭建一个负载均衡集群

    这篇文章是<打造3百万次请求/秒的高性能服务器集群>系列的第3部分,有关于性能测试工具以及优化WEB服务器部分的内容请参看以前的文章. 本文基于你已经优化好服务器以及网络协议栈的基础之上, ...

  9. 每秒处理3百万请求的Web集群搭建-如何生成每秒百万级别的 HTTP 请求?

    本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章的第一篇.它记录了我使用负载生成器工具的一些经历,希望它能帮助每一个像我一样不得不使用这些工具的人节省时间. 负载生成器是一些生成用于 ...

随机推荐

  1. Cancer Cell | 肿瘤微环境渐进式调控AML治疗抵抗的分子机制

    急性髓系白血病 ( acute myeloid leukemia, AML ) 是成年人常见的血液系统恶性肿瘤之一,主要表现为髓系原始细胞克隆性恶性增殖及正常造血细胞功能抑制.在AML基因突变图谱中, ...

  2. C# 为什么你应该更喜欢 is 关键字而不是 == 运算符

    前言 在C# 进行开发中,检查参数值是否为null大家都用什么?本文介绍除了传统的方式==运算符,还有一种可以商用is关键字. C# 7.0 中 is 关键字的使用 传统的方式是使用==运算符: if ...

  3. Linux平台上转换文件编码

    Linux系统的iconv指令是一个很好的文件编码转换工具,支持的编码范围广,使用方便,例如将一个utf-8编码的文件(名为tic)转换为gbk编码: iconv -f utf-8 -t gbk ti ...

  4. vue 快速入门 系列 —— vue-cli 下

    其他章节请看: vue 快速入门 系列 Vue CLI 4.x 下 在 vue loader 一文中我们已经学会从零搭建一个简单的,用于单文件组件开发的脚手架:本篇,我们将全面学习 vue-cli 这 ...

  5. sqli-labs lesson 21-22

    less 21: username:admin password:admin 登录. 发现这里和之前不太一样.用到了base64加密而不是之前的明文了. 传送门:base64在线编码解码 所以要做的就 ...

  6. CVE-2021-21978 VMware View Planner 远程代码执行漏洞通告 | 附 POC

    漏洞简介 VMware 是一家云基础架构和移动商务解决方案厂商,View Planner 是他旗下推出的一款针对view桌面的测试工具.2021年03月02日,VMware 官方披露了 CVE-202 ...

  7. DVWA-全等级SQL注入(显注)

    前言: 首先是DVWA环境的搭建: 1.DVWA. 2.PHPSTUDY/WampServer,这里有一个坑,因为他是一体化的,PHP版本必须在5.4以上,否则显注不能打开.或者自己搭建LAMP环境. ...

  8. S3C2440—10.代码重定位

    文章目录 一.启动方式 1.1 NAND FLASH 启动 1.2 NOR FLASH 启动 二. 段的概念 2.1 重定位数据段 2.2 加载地址的引出 三.链接脚本 3.1 链接脚本的引入 3.2 ...

  9. S3C2440—7.存储控制器访问外设

    文章目录 一.内存接口的概念 二.存储控制器(内存控制器) 2.1 什么是存储控制器? 2.2 S3C2440存储控制器介绍 2.3 存储控制器如何处理不同位宽的外设 2.4 怎么确定芯片的访问地址? ...

  10. 一招解决微信小程序中的H5缓存问题

    一招解决微信小程序中的H5缓存问题1.问题描述开发过程中,为了更新代码方便,往往会在小程序中嵌入H5页面.但问题来了,小程序原生代码更新版本后,简单的从微信中删除或者代码强刷就可以解决缓存问题,但小程 ...