Haproxy搭建 Web 群集

一、Haproxy 相关概念

1.Haproxy 的概述

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

2.Haproxy 的主要特性

可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
支持多达8种负载均衡算法;
支持Session会话保持,Cookie的引导;
支持通过获取指定的ur1来检后端服务器的状态;
支持虚机主机功能,从而实现web负载均衡更加灵活;
支持连接拒绝、全透明代理等独特的功能;
拥有强大的ACL支持,用于访问控制制;
支持TCP协议的负载均衡转发;
支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成。

3.常见的 Web 集群调度器

目前常见的Web集群调度器分为软件和硬件。

软件通常使用开源的LVS、Haproxy、Nginx。其中LVS 性能最好,但是搭建相对复杂;而Nginx 的 upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy好。

硬件一般使用比较多的是F5、Array,也有很多人使用国内的一些产品,如梭子鱼、绿盟等。

常见的应用分析

4.1 LVS 应用
LVS在企业应用中抗负载能力很强,但存在不足。
LVS不支持正则处理,不能实现动静分离。
对于大型网站,LVS的实施配置复杂,维护成本相对较高。
4.2 Haproxy 应用
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件。
适用于负载大的web站点。
运行在硬件上可支持数以万计的并发连接的连接请求。
4.3 LVS、Nginx、Haproxy的区别
软件的负载均衡性能

Haproxy功能强大,单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度。在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡。

支持的代理类型

LVS基于Linux操作系统内核实现软负载均衡,只能支持4层代理的IP转发(不支持正则表达式)。

而Haproxy和Nginx是基于第三方应用(应用程序)实现的软负载均衡,都支持4层和7层转发(支持正则表达式)。

支持的健康检查方式

LVS因为工作在ISO模型的第四层,其状态监测功能单一,支持对端口和URL进行检查。

而Haproxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式。

Nginx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

5.Haproxy 调度算法原理

调度算法名称 含义
roundrobin 轮询
static-rr 加权轮询
leastconn 最小连接数
source 根据源地址哈希
uri 根据URL哈希
url_param 根据URL参数哈希
hdr(name) 根据请求头哈希
rdp-cookie(name) 根据cookie哈希

二.Haproxy搭建 Web 群集

  • 前期部署
Haproxy服务器:192.168.247.132
Nginx 服务器1:192.168.247.133
Nginx 服务器2:192.168.247.139
客户端:192.168.247.200

1.192.168.247.132(haproxy 服务器)

[root@www ~]# systemctl stop firewalld
[root@www ~]# setenforce 0
[root@www ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@www ~]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
已安装:
  bzip2-devel.x86_64 0:1.0.6-13.el7
完毕!
[root@www ~]# cd /opt/
[root@www opt]# tar xf haproxy-1.7.2.tar.gz
[root@www opt]# cd haproxy-1.7.2/
[root@www haproxy-1.7.2]# make TARGET=linux2628 PREFIX=/usr/local/haproxy
gcc -Iinclude -Iebtree -Wall  -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement     ......
[root@www haproxy-1.7.2]# make install PREFIX=/usr/local/haproxy
install -d "/usr/local/haproxy/sbin"
......
[root@www haproxy-1.7.2]# useradd -M -s /sbin/nologin haproxy
[root@www haproxy-1.7.2]# mkdir -p /usr/local/haproxy/conf
[root@www haproxy-1.7.2]# cd /usr/local/haproxy/conf
[root@www conf]# yum install -y haproxy
已安装:
  haproxy.x86_64 0:1.5.18-6.el7
完毕!
[root@www conf]# vim /etc/init.d/haproxy
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
        log /dev/log    local0 info
        log /dev/log    local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        nbproc 1
        #debug
        #quiet
 
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
srvtimeout      50000
 
listen  webcluster 0.0.0.0:80
        option httpchk GET /test.html
        balance roundrobin
        server  inst1 192.168.189.101:80 check inter 2000 fall 3
        server  inst2 192.168.189.102:80 check inter 2000 fall 3
[root@www conf]# cd /etc/init.d/
[root@www init.d]# chmod +x haproxy
[root@www init.d]# chkconfig --add /etc/init.d/haproxy
[root@www init.d]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
[root@www init.d]# service haproxy start
[root@www init.d]# systemctl stop firewalld
[root@www init.d]# setenforce 0

2.配置节点服务器

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#cd /var/www/html/
[root@localhost ~]#vim test.html
[root@localhost ~]#systemctl start httpd
[root@localhost ~]# ss -ntap |grep 80
[root@localhost ~]#curl 192.168.189.100/test.html
  • 完成配置后进入网页输入网址查看:192.168.247.132/test.html

你可能感兴趣的:(前端,服务器,网络)