haproxy

haproxy
haproxy简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
  HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql的均衡负载。
负载均衡
 HAProxy主要为基于 HTTP和 TCP访问的应用服务提供负载均衡,如基于 Internet的连接服务和基于 web的应用服务。通过负载均衡算法, HAproxy能够接受数以万计的访问请求并将其转发到后端服务器池中进行处理,而后端服务器池就如一个强大的虚拟服务器接受 HAProxy转发的请求并进行处理。 HAproxy的请求调度器(Scheduler)决定了后端服务器中每个服务器接受和处理的请求量,在没有权重的调度算法下,调度器为每台服务器分配相同数量的请求,而在加权调度算法下,调度器根据每台服务器的权重为每个后端服务器分配不同数量的请求。 HAProxy允许用户自定义多个代理,并为每个代理提供负载均衡服务,代理由一个前端和一个或多个后端构成,前端定义了代理监听的IP地址(Virtual IP )和端口,同时还需在前端定义中关联与其相关的后端,而在HAProxy中,后端主要用于定义服务器池和负载均衡算法。HAProxy的负载均衡服务在7层,即应用层,在很多情况下,由于商业应用连续性的要求,管理员通常需要部署HAProxy,从而为基于HTTP的应用提供负载均衡和高可用性。

haproxy的特点 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作 支持url检测后端的服务器出问题的检测会有很好的帮助。
更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source
Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
不能做Web服务器即Cache。

haproxy支持5种连接模式: keep
alive:分析并处理所有的request和response(默认),后端为静态或缓存服务器建议使用此模式。
tunnel:仅分析处理第一个request和response,剩余所有内容不进行任何分析直接转发。1.5版本之前此为默认,现在不建议设置为此模式。
passive
close:在请求和响应首部加上"connection:close"标记的tunnel,在处理完第一个request和response后尝试关闭两端连接。
server
close:处理完第一个response后关闭和server端的连接,但和客户端的连接仍然保持,后端为动态应用程序服务器组建议使用此模式。
forced close:传输完一个response后客户端和服务端都关闭连接

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,
同时可以保护你的web服务器不被暴露到网络上。 HAProxy实现了一种事件驱动,
单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制
、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)
实现所有这

负载均衡类型 四层负载均衡
将网络流量负载均衡到多个服务器的最简单方法是使用第4层(传输层)负载均衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量。
用户访问负载均衡器,调度器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容

  • 否则用户可能会收到不一致的内容。

七层负载均衡
7层负载均衡是更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用第7层允许调度器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许您在同一域和端口下运行多个Web应用程序服务器。

haproxy的特点 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作 支持url检测后端的服务器出问题的检测会有很好的帮助。
更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source
Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
不能做Web服务器即Cache。 haproxy配置文件 HAProxy 配置文件根据功能和用途,主要有 5
个部分组成,但有些部分并不是必须的, 可以根据需要选择相应的部分进行配置。

global 部分 用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。

defaults 部分 默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的 frontend、 backend 和
listen 部分中,因此,如果某些参数属于公用的配置,只需在 defaults 部分添加一次即可。而如果在
frontend、backend 和 listen 部分中也配置了与 defaults 部分一样的参数,那么defaults
部分参数对应的值自动被覆盖。

frontend 部分 此部分用于设置接收用户请求的前端虚拟节点。frontend 是在 HAProxy1.3
版本之后才引入的一个组件,同时引入的还有 backend 组件。通过引入这些组件,在很大程度上简化了 HAProxy
配置文件的复杂性。frontend 可以根据 ACL 规则直接指定要使用的后端

backend 部分 此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。添加的真实服务器类似于
LVS 中的real server 节点。

listen 部分 此部分是 frontend 部分和 backend 部分的结合体。在 HAProxy1.3 版本之前, HAProxy
的所有配置选项都在这个部分中设置。为了保持兼容性,HAProxy 新的版本仍然保留了 listen 组件的配置方式。目前在 HAProxy
中,两种配置方式任选其一即可。

配置实例
安装haproxy

[root@lb ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel
[root@lb ~]# useradd -r -M -s /sbin/nologin haproxy
[root@lb ~]# tar xf haproxy-2.4.0.tar.gz 
[root@lb ~]# cd haproxy-2.4.0
[root@lb haproxy-2.4.0]# make clean
[root@lb haproxy-2.4.0]# make -j $(grep 'processor' /proc/cpuinfo |wc -l)  \
> TARGET=linux-glibc  \
> USE_OPENSSL=1  \
> USE_ZLIB=1  \
> USE_PCRE=1  \
> USE_SYSTEMD=1
make install PREFIX=/usr/local/haproxy
[root@lb haproxy-2.4.0]# echo "export PATH=/usr/local/haproxy/sbin:$PATH">/etc/profile.d/haproxy.sh
[root@lb haproxy-2.4.0]# . /etc/profile.d/haproxy.sh
[root@lb haproxy-2.4.0]# which haproxy 
/usr/local/haproxy/sbin/haproxy

配置各个负载的内核参数

[root@lb haproxy-2.4.0]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf
[root@lb haproxy-2.4.0]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf[root@lb haproxy-2.4.0]# sysctl  -p 
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

编写配置文件

[root@lb haproxy-2.4.0]# cat > /etc/haproxy/haproxy.cfg <<EOF
> #--------------全局配置----------------
> global
>     log 127.0.0.1 local0  info
>     #log loghost local0 info
>     maxconn 20480
> #chroot /usr/local/haproxy
>     pidfile /var/run/haproxy.pid
>     #maxconn 4000
>     user haproxy
>     group haproxy
>     daemon
> #---------------------------------------------------------------------
> #common defaults that all the 'listen' and 'backend' sections will
> #use if not designated in their block
> #---------------------------------------------------------------------
> defaults
>     mode http
>     log global
>     option dontlognull
>     option httpclose
>     option httplog
>     #option forwardfor
>     option redispatch
>     balance roundrobin
>     timeout connect 10s
>     timeout client 10s
>     timeout server 10s
>     timeout check 10s
>     maxconn 60000
>     retries 3
> #--------------统计页面配置------------------
> listen admin_stats
>     bind 0.0.0.0:8189
>     stats enable
>     mode http
>     log global
>     stats uri /haproxy_stats
>     stats realm Haproxy\ Statistics
>     stats auth admin:admin
>     #stats hide-version
>     stats admin if TRUE
>     stats refresh 30s
> #---------------web设置-----------------------
> listen webcluster
>     bind 0.0.0.0:80
>     mode http
>     #option httpchk GET /index.html
>     log global
>     maxconn 3000
>     balance roundrobin
>     cookie SESSION_COOKIE insert indirect nocache
>     server web01 192.168.136.133:80 check inter 2000 fall 5
>     server web02 192.168.136.134:80 check inter 2000 fall 5
> EOF

启用日志


[root@lb haproxy-2.4.0]# vim /etc/rsyslog.conf 
local0.*                        /tmp/haproxy.log
[root@lb haproxy-2.4.0]# systemctl restart rsyslog
1
2
3
编写.service文件

[root@lb haproxy-2.4.0]# cat > /usr/lib/systemd/system/haproxy.service <<EOF
> [Unit]
> Description=HAProxy Load Balancer
> After=syslog.target network.target
> 
> [Service]
> ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
> ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /var/run/haproxy.pid
> ExecReload=/bin/kill -USR2 $MAINPID
> 
> [Install]
> WantedBy=multi-user.target
> EOF
[root@lb haproxy-2.4.0]# systemctl daemon-reload

重启服务

[root@lb haproxy-2.4.0]# systemctl enable --now haproxy 
[root@lb haproxy-2.4.0]# ss -anlt
State   Recv-Q  Send-Q   Local Address:Port    Peer Address:Port  Process  
LISTEN  0       128            0.0.0.0:80           0.0.0.0:*              
LISTEN  0       128            0.0.0.0:22           0.0.0.0:*              
LISTEN  0       128            0.0.0.0:8189         0.0.0.0:*              
LISTEN  0       128               [::]:22              [::]:*              
LISTEN  0       80                   *:3306               *:*         

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值