带你了解Haproxy搭建web群集知识点

常见的Web集群调度器

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

Haproxy应用分析

1 LVS在企业应用中抗负载能力很强,但存在不足
·LVS不支持正则表达式,不能实现动静分离
·对于大型网站,LVS的实施配置复杂,维护成本相对较高

2 Haproxy是一款可提供高可用性,负载均衡,及基于TCP和HTTP应用的代理的软件
·适用于负载大的Web站点
·运行在硬件上可以支持数以万计的并发连接的连接请求

Haproxy调度算法原理

Haproxy支持多种调度算法,最常用的有三种

RR(Round Robin)

·RR算法是最简单最常用的一种算法,即轮询调度
·举例:
有三个节点A,B,C
第一个用户访问会被指派到节点A
第二个用户访问会被指派到节点B
第三个用户访问会被指派到节点C
第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

LC(Least Coonections)

·最小连接数算法,根据后端的节点连接数大小动态分配前端请求
·举例:
有三个节点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算法有很大改进,是目前用到比较多的一种算法

SH(Source Hashing)

·基于来源访问调度算法,用于一些有Session会话记录的服务器端的场景,可以基于来源的IP,Cookie等做集群调度
·举例:
有三个节点A,B,C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度
此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

项目

准备环境

haproxy:192.168.188.10
web1:192.168.188.20
web2:192.168.188.30
nfs:192.168.188.40
client:192.168.188.50

注:一定要关闭防火墙和核心防护

nfs:

[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# echo "<h1>web1 song</h1>" > /web1/index.html
[root@nfs ~]# echo "<h1>web1 song</h2>" > /web2/index.html
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# yum -y install rpcbind
[root@nfs ~]#  vi /etc/exports
/web1 192.168.188.20(ro)
/web2 192.168.188.30(ro)
[root@nfs ~]# showmount -e
Export list for nfs:
/web2 192.168.188.30
/web1 192.168.188.20

web1 :

在这里插入图片描述

[root@web1 ~]# yum -y install gcc gcc-c++ make pcre-devel.x86_64 zlib-devel.x86_64
[root@web1 ~]# useradd -M -s /sbin/nologin nginx
[root@web1 ~]# tar zxvf nginx-1.13.7.tar.gz 
[root@web1 ~]# cd nginx-1.13.7/
[root@web1 nginx-1.13.7]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@web1 nginx-1.13.7]# make && make install
[root@web1 nginx-1.13.7]# cd
[root@web1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
[root@server1 ~]# mount 192.168.188.40:/web1 /usr/local/nginx/html
[root@web1 ~]# df -Th

在这里插入图片描述


[root@server1 ~]# nginx
[root@server1 ~]# curl localhost
<h1>web1 song</h1>

web2
其他步骤同web1

[root@web2 ~]# mount 192.168.188.40:/web2 /usr/local/nginx/html
[root@web2 ~]# df -Th
[root@web2 ~]# nginx
[root@web2 ~]# curl localhost
<h1>web1 song</h2>

在这里插入图片描述

haproxy:
在这里插入图片描述

[root@haproxy ~]# yum -y install pcre-devel bzip2-devel.x86_64 
[root@haproxy ~]# tar zxvf haproxy-1.4.24.tar.gz 
[root@haproxy ~]# cd haproxy-1.4.24/
[root@haproxy ~]# make TARGET=linux26
[root@haproxy ~]# make install
[root@haproxy ~]# cd
[root@haproxy ~]# mkdir /etc/haproxy
[root@haproxy ~]# cd haproxy-1.4.24/
[root@haproxy haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
[root@haproxy haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg 
listen webcluster 0.0.0.0:80
       option httpchk GET /index.html  ## 用get方式检查服务器的index.html
       balance roundrobin  ##负载均衡算法:rr
       server web1 192.168.188.20:80 check inter 2000 fall 3 ##定义节点
       server web2 192.168.188.30:80 check inter 2000 fall 3

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
参数解释

log global:定义日志为global配置中的日志定义
mode http:模式为http
option httplog:采用http日志格式记录日志
retries 3:检查节点服务器达3次失败后,节点不可用
maxconn 2000:最大连接数
contimeout 5000:连接超时时间
clitimeout 50000:客户端超时时间
srvtimeout 500000:服务器超时时间
daemon:守护进程数
nbproc:负载均衡的并发进程数

[root@haproxy haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
[root@haproxy haproxy-1.4.24]# vi /etc/init.d/haproxy 

在这里插入图片描述

[root@haproxy haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy
[root@haproxy haproxy-1.4.24]# chkconfig --add haproxy 
[root@haproxy haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@haproxy ~]# systemctl start haproxy

客户机
打开浏览器192.168.188.10

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

添加日志

[root@haproxy ~]# vi /etc/haproxy/haproxy.cfg 
        log /dev/log local0 info  
        log /dev/log local0 notice

在这里插入图片描述

[root@haproxy ~]# systemctl restart haproxy
创建日志
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log  
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log  
&~

在这里插入图片描述

[root@haproxy ~]# systemctl restart rsyslog
[root@haproxy ~]# systemctl restart haproxy
[root@haproxy ~]# cd /var/log/haproxy/
[root@haproxy haproxy]# ls -lh
总用量 8.0K
-rw-------. 1 root root 329 1210 18:20 haproxy-info.log    //调度信息
-rw-------. 1 root root 132 1210 18:20 haproxy-notice.log   //启动信息

在这里插入图片描述
在这里插入图片描述
使用客户机访问192.168.188.10
再查看info。log日志
在这里插入图片描述

统计页面

[root@haproxy ~]# vi /etc/haproxy/haproxy.cfg 
listen admin_stats
        bind 192.168.188.10:1080  ##监听ip
        mode http   ##http的7层模式
        option httplog   ##采用http日志模式记录的
        #log 192.168.188.10  ##错误日志记录
        maxconn 10   ##默认的最大连接数
        stats refresh 30s  ##统计页面自动更新时间
        stats uri /stats  ##统计页面url
        stats realm XingCloud\ Haproxy  ##统计页面密码框上提示文本
        stats auth admin:admin  ##设置监控页面的用户和密码:admin
        stats auth  Frank:Frank  ##设置监控页面的用户和密码:Frank
        stats hide-version  ##隐藏统计页面的HAProxy的版本信息
        stats admin if TRUE   ##设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值