使用Haproxy搭建Web群集

一、Haprxoy集群调度器

1.1.常见的Web集群调度器

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

软件通常使用开源的LVS、Haproxy、 Nginx

LVS性能最好,实施配置复杂,维护成本相对较高;

Nginx 的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没Haproxy好。

haproxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比 起来在负载均衡这件事情上做更好,更专业。

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

1.2.haproxy概述

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件, 它是免费、快速并且可靠的一种解决方案。

1.3.haproxy的特点

支持tcp / http 两种协议层的负载均衡

支持8种左右的负载均衡算法,尤其是在http模式时,适用各种需求。

拥有一个功能出色的监控页面,实时了解系统的当前状况。

功能强大的ACL支持,给用户极大的方便。

1.4.haproxy最常用调度算法

RR (Round Robin)轮询调度

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

LC(Least Connections)最小连接

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

SH(Source Hashing)基于来源访问调度算法

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

二、http请求及响应状态

2.1.HTTP请求

HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。使HTTP客户(如Web浏 览器)能够从HTTP服务器(Web服务器)请求信息和服务

2.2.请求方式

GET 方法

GET 用于从指定资源请求数据

请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的

有关 GET 请求的其他一些注释:

GET 请求可被缓存

GET 请求保留在浏览器历史记录中

GET 请求可被收藏为书签

GET 请求不应在处理敏感数据时使用

GET 请求有长度限制

POST 方法

POST 用于将数据发送到服务器来创建/更新资源。

通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中:

有关 POST 请求的其他一些注释:

POST 请求不会被缓存

POST 请求不会保留在浏览器历史记录中

POST 不能被收藏为书签

POST 请求对数据长度没有要求

POST 为input表单默认数据提交方式

2.3.返回状态码

异常的状态码

4xx 用于指出客户端的错误。

400 (Bad Request/错误请求)

401 (Unauthorized/未授权)

404 (Not Found/未找到)

5xx 用于支持服务器错误

500 (Internal Server Error/内部服务器错误)

501 (Not Implemented/未实现)

503 (Service Unavailable/服务无法获得)

三、Haproxy负载均衡集群

3.1.搭建环境

Haproxy服务器(centos7-1):192.168.200.10

Nginx服务器1(centos7-2):192.168.200.20

Nginx服务器2(centos7-3):192.168.200.30

客户端(虚拟windows7):192.168.200.136

初始化节点:(无特殊说明,接下来的操作均在三台主机执行)

关闭防火墙与selinux

1.开启haproxy服务器ip转发功能

sysctl -a | grep "ip_forward"

2.部署nginx或使用http代替

3.2.haproxy部署

安装编译工具及依赖

yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssldevel systemd-devel zlib-devel readline-devel

lua环境安装

链接:https://pan.baidu.com/s/1f4KtWPQg4ZsHPa-bHUhlzw 
提取码:1012 
lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中, 从而为应用程序提供灵活的扩展和定制功能。

[root@localhost ~]# tar -zxvf lua-5.3.5.tar.gz -C /usr/src

[root@localhost ~]# cd /usr/src/lua-5.3.5/

[root@localhost ~]# make linux

[root@localhost ~]# make install INSTALL_TOP=/usr/local/lua

安装haproxy

1、编译安装

[root@localhost ~]# tar -xzvf haproxy-2.2.14.tar.gz -C /usr/src

[root@localhost ~]# cd /usr/src/haproxy-2.2.14/

[root@localhost ~]# make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 LUA_LIB=/usr/local/lua/lib/ LUA_INC=/usr/local/lua/include/ USE_PCRE=1 USE_SYSTEMD=1

[root@localhost ~]# make install PREFIX=/usr/local/haproxy

2、创建服务脚本

[root@localhost ~]# cd /usr/local/haproxy/

[root@localhost ~]# cp /usr/src/haproxy-2.2.14/examples/haproxy.init /etc/init.d/haproxy [root@localhost ~]# chmod +x /etc/init.d/haproxy

3、优化执行文件路径

[root@localhost ~]# cp /usr/local/haproxy/sbin/haproxy /usr/sbin/

4、创建用户可用于运行haproxy

[root@localhost ~]# useradd haproxy -s /sbin/nologin

5、haproxy配置文件新版本中默认不存在需要创建

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg

global

        log 127.0.0.1 local0 info                #日志输出配置,所有日志都记录在本机,通过local0输出

        maxconn 256                                #连接最大数

        #chroot /usr/local/haproxy             #haproxy安装路径,一般需将此行注释掉

        uid 99                                            #所属运行的用户uid

        gid 99                                            #所属运行的用户组

        daemon                                         #后台运行

defaults

        mode http                                        #模式为http

        timeout connect 5000ms                #连接超时时间

        timeout client 50000ms                  #客户端超时时间

        timeout server 50000ms                #服务器超时时间

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

        option dontlognull                          #不记录健康检查的日志信息

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

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

        option abortonclose                       #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接 

frontend http-in                                       #定义一个名为http-in的应用

        bind *:80

        default_backend servers                #用户请求转发到名称为servers的后端模块处理

backend servers

        option httpchk GET /index.html       #检查服务器的index.html文件

        balance roundrobin                          #负载均衡调度算法 轮询:roundrobin;最小连接数: leastconn;来源访问调度source

        server server1 192.168.65.133:80 check inter 2000 rise 2 fall 5

        server server2 192.168.65.134:80 check inter 2000 rise 2 fall 5

6、启动haproxy

[root@localhost ~]# chkconfig --add /etc/init.d/haproxy

[root@localhost ~]# service haproxy start

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

3.3.开启haproxy的统计页面

1、haproxy配置文件中添加下面内容

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg

listen stats

        mode http

        bind 0.0.0.0:9999

        stats enable

        log global

        stats uri /status

        stats auth haadmin:123com        

2、重启服务

[root@localhost ~]# service haproxy restart

3、测试

http://haproxy-ip:9999/status

输入用户名密码haadmin:123com

3.4.haproxy日志配置

HAProxy可以基于rsyslog记录日志到指定的设备

1.修改haproxy配置文件

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg

log 127.0.0.1 local3 info #在全局配置段中配置,定义日志记录级别

2.修改syslog的配置文件

[root@localhost ~]# vim /etc/rsyslog.conf

# Provides UDP syslog reception

$ModLoad imudp         #日志传输基于udp所以需要开启

$UDPServerRun 514    #这里两项

local3.*                 /var/log/haproxy.log        #添加

3.重启haproxy和rsyslog服务

[root@localhost ~]# systemctl restart rsyslog

[root@localhost ~]# service haproxy restart

4.通过浏览器访问后,查看日志

[root@localhost ~]# tail -f /var/log/haproxy.log

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值