Web集群调度器——Haproxy

一、概述

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

一、主要优点

1、Haproxy在负载均衡速度和并发处理上是优于Nginx。
2、Haproxy支持虚拟主机,可以工作在4、7层。
3、能够补充Nginx ( ip hash)的一些缺点,比如session的保持、Cookie的引导等工作。
4、支持以url的方式检测后端的服务器的状态。
5、Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
6、支持很多负载均衡算法:Round-robin (轮询)、weight-round-robin(加权轮询)、source hashing (原地址保持)、RI(请求URI)、rdp-cookie (根据cookie)。

二、主要使用的算法

1、RR (Round Robin):RR算法是最简里常用的一种算法,即轮询调度。
2、LC(Least Connections):最小连接数算法,根据后端的节点连接数大小动态分配前端请求。
3、SH (SourceHashing):基于来源访问调度算法,用于一些有session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。

二、实例

实验环境:
Haproxy:192.168.238.150
web1:192.168.238.100
web2:192.168.238.99
client:192.168.238.60

Haproxy服务器

[root@localhost ~]# hostnamectl set-hostname haproxy
[root@localhost ~]# su
[root@haproxy ~]# ntpdate ntp.aliyun.com
[root@haproxy ~]# cd /opt
#rz上传软件包haproxy-1.5.19.tar.gz
[root@haproxy opt]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make #安装依赖环境
[root@haproxy opt]# tar zxvf haproxy-1.5.19.tar.gz
#修改内核版本
[root@haproxy haproxy-1.5.19]# uname -a #查看内核版本
Linux haproxy 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@haproxy haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64 #kernel大于2.6.28的用TARGET=linux2628
[root@haproxy haproxy-1.5.19]# make install
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy #创建haproxy工作目录
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
[root@haproxy haproxy-1.5.19]# cd /etc/haproxy/
[root@haproxy haproxy]# ls
haproxy.cfg
[root@haproxy haproxy]# vim haproxy.cfg
  1 # this config needs haproxy-1.1.28 or haproxy-1.2.1
  2 
  3 global #全局
  4         log /dev/log    local0 info #local0为日志设备,默认存放到系统日志
  5         log /dev/log    local1 notice
  6         #log loghost    local0 info
  7         maxconn 4096
  8         #chroot /usr/share/haproxy #服务自设置的根目录,注释掉
  9         uid 99 #用户UID
 10         gid 99 #用户GID
 11         daemon #守护进程模式
 12         #debug
 13         #quiet
 14 
 15 defaults
 16         log     global #定义日志为global配置中的日志定义
 17         mode    http #模式为http
 18         option  httplog #采用http日志格式记录日志
 19         option  dontlognull #不记录健康检查日志信息
 20         retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
 21         redispatch #当服务器负载很高时,自动结束当前队列处理比较久的连接
 22         maxconn 2000 #最大连接数
 23         contimeout      5000 #连接超时时间
 24         clitimeout      50000 #客户端超时时间
 25         srvtimeout      50000 #服务器超时时间
 26 
 27 listen  webcluster 0.0.0.0:80
 28         option httpchk GET /aa.html #检查服务器的aa.html文件
 29         balance roundrobin #负载均衡调度算法使用轮询算法roundrobin
 30         server inst1 192.168.238.100:80 check inter 2000 fall 3 #定义在线节点
###check inter 2000 #表示haproxy服务器和节点之间的一个心跳频率
###fall 3 #表示连续三次检测不到心跳频率则认为该节点失效
 31         server inst2 192.168.238.99:80 check inter 2000 fall 3
#31行以下全部删除
[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy #将启动文件放入service的管理目录
[root@haproxy haproxy]# cd /etc/init.d/
[root@haproxy init.d]# chmod +x haproxy #赋予执行权限
[root@haproxy init.d]# chkconfig --add /etc/init.d/haproxy #加入系统管理
[root@haproxy init.d]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #优化启动
[root@haproxy init.d]# systemctl start haproxy #启动服务
[root@haproxy init.d]# netstat -antp | grep haproxy #查看端口
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      79480/haproxy

web服务器

#两台web服务器配置一致

[root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# ntpdate ntp.aliyun.com
31 Jul 14:34:52 ntpdate[17989]: step time server 203.107.6.88 offset -1.405824 sec
[root@web1 ~]# cd /opt
[root@web1 opt]# yum install -y pcre-devel zlib-devel gcc gcc-c++ make #安装Nginx的依赖环境
[root@web1 opt]# useradd -M -s /sbin/nologin nginx #创建服务用户

#rz上传nginx-1.12.2.tar.gz富案件包
[root@web1 opt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/ #解压包
[root@web1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx 
[root@web1 nginx-1.12.2]# make && make install
[root@web1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@web1 nginx-1.12.2]# nginx #启动Nginx
[root@web1 nginx-1.12.2]# netstat -antp |grep 80 #查看端口,查看服务是否启动
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      20668/nginx: master 
[root@web1 nginx-1.12.2]# echo "this is web1" > /usr/local/nginx/html/aa.html

[root@web2 nginx-1.12.2]# echo "this is web2" > /usr/local/nginx/html/aa.html

client访问haproxy服务器IP地址
在这里插入图片描述
刷新
在这里插入图片描述
小结:
nginx和LVs、Haproxy的|区别
1、nginx
①支持正则
②只支持基于端口的健康检查
③不支持session的直接保持,但能通过IP_hash来解决
④对网络稳定性要求不高
⑤反向代理能力强
⑥nginx社区活跃
2、LVS
①只能基于四层端口转发
②在四层做分发作用,抗负载能力强
③负载应用范围广
3、Haproxy
①支持8种负载均衡策略
②仅做负载均衡软件使用,在高并发情况下性能优于nginx
③支持URL健康检测、支持session保持

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值