Haproxy

Haproxy概论

常用的负载均衡调度器

  • 软件
    通常使用开源的LVSHaproxyNginx

LVS性能最好,但是搭建相对复杂;Nginx 的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好。

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

硬件的效果比软件好,更加稳定,但管理成本高。

Haproxy的特性

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

HAProxy调度算法

策略方法
roundrobin轮询
static-rr加权轮询
leastconn最小连接
source根据源地址做哈希
uri根据请求的URI地址做哈希
url_param根据请求的URL路径里传递的参数做哈希
hdr(NAME)根据请求头的字段做哈希
rdp-cookie(NAME)根据cookie里的字段做哈希

LVS、Nginx、HAproxy的区别

  • LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  • LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  • LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
  • HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡
  • Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

Haproy负载均衡部署

实验需求

利用Haproxy的运用配置出负载均衡调度器,以此来调用两台Nginx服务器进行工作

  • 准备
    需要五台虚拟机(一台web1服务器,一台web2服务器,一台HAproxy负载均衡调度器,一台NFS共享存储机,一台外网客户机做测试作用)
  • 实验拓扑图
    在这里插入图片描述
  • 各设备的IP设置如下:

负载调度器:10.190.33.71
Web服务器1:10.190.33.72
Web服务器2:10.190.33.73
NFS服务器:10.190.33.74
客户端:10.190.33.88

部署共享存储

准备工作

hostnamectl set-hostname nfs-server						


systemctl disable firewalld.service --now


vim /etc/selinux/config
	
	将“SELINUX=enforcing”修改成“SELINUX=0reboot	

安装nfs服务器必要软件及配置

yum -y install nfs-utils rpcbind

mkdir /share/wang /share/lei -p

echo '<h2>Here is <h1>WANG</h1></h2>' > /share/wang/test.html

echo '<h2>Here is <h1>LEI</h1></h2>' > /share/lei/test.html

ll  -R /share

vim /etc/exports

	/share/wang 10.190.33.0/24(ro)
	/share/lei 10.190.33.0/24(ro)


在这里插入图片描述

在这里插入图片描述

检查nfs服务

systemctl enable --now rpcbind nfs


showmount -e

在这里插入图片描述

配置节点服务器(server2的步骤与serve1基本相同,故本文以server1举例)

准备工作

hostnamectl set-hostname nginx-server1


systemctl disable firewalld.service --now


vim /etc/selinux/config
	
	将“SELINUX=enforcing”修改成“SELINUX=0reboot	

配置节点web服务–nginx

yum安装Nginx需要独立的“repo”文件

yum install -y nginx 

yum -y install nfs rpcbind

vim /etc/nginx/nginx.conf
	······
	 keepalive_timeout  0;
	 
systemctl enable --now rpcbind nfs


vim /etc/fstab

10.190.33.74:/share/wang/usr/share/nginx/html/ nfs defaults 0 0

mount -a

ll /usr/share/nginx/html/

cat /usr/share/nginx/html/test.html

systemctl start  nginx

在这里插入图片描述

在这里插入图片描述

使用客户端检查web服务是否启动及运行正常

在这里插入图片描述

部署haproxy负载均衡调度器

准备工作

hostnamectl set-hostname haproxy-server						


systemctl disable firewalld.service --now


vim /etc/selinux/config
	
	将“SELINUX=enforcing”修改成“SELINUX=0reboot	

编译安装haproxy

yum install -y zlib-devel openssl-devel pcre-devel systemd-devel

useradd -M -s /sbin/nologin haproxy
 
cd /opt

tar xf haproxy-2.8.3.tar.gz

cd haproxy-2.8.3/

make TARGET=linux31 USE_OPENSSL=1 ADDLIB=-lz 

make install PREFIX=/usr/local/haproxy

在这里插入图片描述

在这里插入图片描述

添加haproxy 系统服务

vim /etc/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 90 30
#description: Haproxy Service Control Script

PROGDIR=/usr/local/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=/etc/haproxy/$PROGNAME.cfg
PIDFILE=/var/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
    echo -e "Starting $DESC: $PROGNAME\n"
    $DAEMON -f $CONFIG
    echo "......"
}

stop()
{
    echo -e "Stopping $DESC: $PROGNAME\n"
    haproxy_pid="$(cat $PIDFILE)"
    kill $haproxy_pid
    echo "......"
}

restart()
{
    echo -e "Restarting $DESC: $PROGNAME\n"
    $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
    echo "......"
}

case "$1" in
start)
   start
   ;;
   
stop)
   stop
   ;;
   
restart)
    restart
    ;;
	
*)
    echo "Usage: $SCRIPTNAME {start|stop|restart}"
    exit 1
    ;;
esac

exit 0


cd /etc/init.d/
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy

haproxy -c -f haproxy.cfg

service haproxy start	或	/etc/init.d/haproxy start

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值