HAProxy

庆云2年前技术文章592

1、HAProxy简介

  HAProxy 是一款基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,它也可作为负载均衡器,而且完全免费。 借助 HAProxy,可以快速并且可靠地提供基于 TCP 和 HTTP 应用的代理解决方案。 HAProxy 最主要的优点是性能突出,它特别适合那些负载特大的 Web 站点,这些站点通常需要具备会话保持或七层处理功能。 HAProxy 完全可以支持数以万计的并发连接,而且它的运行模式可以让你简单而安全地将它整合到当前的架构中,同时可以保护你的 Web 服务器不暴露到网络上(通过防火墙 80 端口映射的方法)。 作为一款优秀的负载均衡软件,HAProxy 优点如下所示:

  1>免费且开源,稳定性也非常好,其稳定性可以与硬件级的 F5 Big-IP 相媲美。
  2>根据官方文档可知,HAProxy 可以跑满 10Gbps,对于软件级负载均衡器而言,这个数字是相当惊人的。
  3>支持连接拒绝,因为维护一个连接保持打开状态的开销是很低的,有时我们需要防止蠕虫攻击,也就是通过限制它们的连接打开来防止它们的危害。 这个功能已经拯救了很多被 DDoS 攻击的小型站点,这也是其他负载均衡器所不具备的。
  4>支持全透明代理(已具备硬件防火墙的典型特点),可以用客户端 IP 地址或任何其他地址来连接后端服务器,这个特性仅在 Linux 2.4/2.6 内核打了 cttproxy 补丁后才可以使用。 这个特性使得为某特殊服务器处理部分流量的同时又不修改服务器的地址成为可能。
  5>HAProxy 现在多用于线上的 MySQL 集群环境,常用它作为 MySQL(读)负载均衡。
  6>自带强大的监控服务器状态的页面,在实际环境中我们可以结合 Nagios 来实现邮件或短信报警,这也是很多人非常喜欢它的原因之一。
  7>支持虚拟主机。

2、四种常用算法

1>roundrobin:轮询,轮流分配到后端服务器;
2>static-rr:根据后端服务器性能分配;
3>leastconn:最小连接者优先处理;
4>source:根据请求源 IP,与 Nginx 的 IP_Hash 类似。

3、HAProxy L4 负载均衡应用架构拓扑

  HAProxy 软件的四层 tcp 代理应用非常优秀,配置非常简单方便,比 LVS 和 Nginx 要方便很多,因为不需要在 RS 端执行脚本即可实现应用代理。和商业版的 NS(Netscaler)、F5 等负载均衡硬件的使用方法和在架构中的位置几乎一样。

1.png

 

说明:由于 haproxy 采用的 NAT 模式,数据包来去都会经过 haproxy,因此,在流量特别大的情况下,其性能不如 LVS。

4、HAProxy L7 负载均衡应用架构拓扑

  Haproxy 的最大优点在于其 7 层的根据 URL 请求头应用过滤的功能,在门户网站的高并发生产架构中,haproxy 软件一般用在 LVS 软件的下一层,或者像官方推荐的可以挂在硬件负载均衡 althon、NS、F5 下使用,其表现非常好。2009 年起 taobao 网的 cdn 业务就大面积使用了 haproxy作为 7 层 CACHE 应用代理。

2.png

 

   通过修改 HAProxy 的配置文件,指定哪一台 Heartbeat 服务器作为主服务器,则另一台将自动成为备份服务器。然后在备份服务器上配置 Heartbeat 守护程序来监听来自主服务器的心跳。如果备份服务器在指定时间内未监听来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源服务高可用性的目的。

5、HAProxy负载均衡搭建

  1>环境规划:centos7
    client:192.168.100.111/24
    haproxy:192.168.100.101/24
    web1:192.168.100.10/24
    web2:192.168.100.20/24

  2>前期配置:部署各节点ip,各个节点关闭防火墙,禁用selinux,时间同步,保证机器干净

  3>web-server节点配置:

web-server1节点:
[root@web-server1 ~]# yum install httpd -y
[root@web-server1 ~]# echo web-server1 > /var/www/html/index.html
[root@web-server1 ~]# systemctl start httpd

web-server2节点:
[root@web-server2 ~]# yum install httpd -y
[root@web-server2 ~]# echo web-server2 > /var/www/html/index.html
[root@web-server2 ~]# systemctl start httpd

  4>haproxy节点配置:

[root@haproxy ~]#   haproxy -~]#  /etc/haproxy/haproxy.cfg /etc/haproxy/~]# vim /etc/haproxy/. local2 /var/run//-.:-i  \.html$    # 访问控制列表:html 靠正则表达式的地址区分 --server --/-A 192.168.100.10: weight  cookie  check inter  rise  fall -B 192.168.100.20: weight  cookie  check inter  rise  fall
[root@haproxy ~]# systemctl start haproxy    //启动haproxy

  5>client访问测试

[root@client ~]# elinks -dump http://192.168.100.101
   web-server1
[root@client ~]# elinks -dump http://192.168.100.101
   web-server2
[root@client ~]# elinks -dump http://192.168.100.101
   web-server1
[root@client ~]# elinks -dump http://192.168.100.101
   web-server2

  6>浏览器访问haproxy web状态页面


 

 6、实现HAProxy动静分离

  1>环境规划:centos7
    192.168.100.111    client
    192.168.100.101    haproxy
    192.168.100.10      web-server1
    192.168.100.20      web-server2
    192.168.100.30      php-server1
    192.168.100.40      php-server2

  2>前期配置:部署各节点ip,各个节点关闭防火墙,禁用selinux,时间同步,保证机器干净

  3>web-server节点配置:

web-server1节点:
[root@web-server1 ~]# yum install httpd -y
[root@web-server1 ~]# echo web-server1 > /var/www/html/index.html
[root@web-server1 ~]# systemctl start httpd

web-server2节点:
[root@web-server2 ~]# yum install httpd -y
[root@web-server2 ~]# echo web-server2 > /var/www/html/index.html
[root@web-server2 ~]# systemctl start httpd

  4>php-server节点配置:

php-server1节点:
[root@php-server1 ~]# yum install httpd php -y
[root@php-server1 ~]# vim /var/www/html/test.php<?phpecho "Here is php-server1";?>[root@php-server1 ~]# systemctl start httpd

php-server2节点:
[root@php-server2 ~]# yum install httpd php -y
[root@php-server2 ~]# vim /var/www/html/test.php<?phpecho "Here is php-server2";?>[root@php-server1 ~]# systemctl start httpd

  5>haproxy节点配置:

~]#   -y pcre-devel -devel  -c++     groupadd -r -g -r -s /sbin/nologin - xf haproxy-...gz -C /usr/local/src//usr/local/src/haproxy-./ TARGET=linux-glibc PREFIX=/usr/local/  PREFIX=/usr/local/ /usr/local/src/haproxy-./examples/haproxy.init /etc/init.d/ +x /etc/init.d/ -s /usr/local/haproxy/sbin/haproxy /usr/sbin/ /etc//etc/haproxy/. local2 /var/run//-.:-i  \.html$    # 访问控制列表:html 靠正则表达式的地址区分 ---server  html # 如果访问html,就使用后端服务器html--server --/-A .: weight  cookie  check inter  rise  fall -B .: weight  cookie  check inter  rise  fall ..XX:(也可以配置域名解析)  weight权重  cookie -/-C .: weight  cookie  check inter  rise  fall -D .: weight  cookie  check inter  rise  fall -f /etc/haproxy/haproxy.cfg    //启动haproxy服务,-f指定配置文件路径

  6>client访问测试

[root@client ~]# elinks --dump http://192.168.100.101
   web-server1
[root@client ~]# elinks --dump http://192.168.100.101
   web-server2
[root@client ~]# elinks --dump http://192.168.100.101/test.php
   Here is php-server1
[root@client ~]# elinks --dump http://192.168.100.101/test.php
   Here is php-server2

  7>浏览器访问haproxy web状态页面

5.png 


   8>模仿后端服务器挂掉,再进行访问测试

使php-server1挂掉:
[root@php-server1 ~]# systemctl stop httpd

client访问测试:
[root@client ~]# elinks --dump http://192.168.100.101/test.php
   Here is php-server2
[root@client ~]# elinks --dump http://192.168.100.101/test.php
   Here is php-server2

  浏览器刷新haproxy web状态页面:

6.png

  haproxy状态页明显发现php-server1挂掉,重新启动php-server1,又发现恢复正常


相关文章

Linux高并发系统内核优化

1)timewait的数量,默认是180000。(Deven:因此如果想把timewait降下了就要把tcp_max_tw_buckets值减小)net.ipv4.tcp_max_tw_buckets...

Centos系统支持TLS 1.3

Centos系统支持TLS 1.3

一、背景1、生产的 CentOS 7 服务器需要启用 TLS 1.32、Openssl介绍OpenSSL 是用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的强大、商业级且功能齐全的工具...

cattle-cluster-agent产生的僵尸进程处理

cattle-cluster-agent产生的僵尸进程处理

现象zabbix告警服务器存在僵尸进程排查步骤1、登陆服务器使用top命令,确认下僵尸进程数量。2、使用ps -aux | grep Z命令,过滤出僵尸进程PID。3、根据查到的PID,借助ps命令,...

Hbase部署

安装前准备1.1. 设置环境变量所有hbase节点都要做vi /etc/profile export HBASE_HOME=/opt/hbaseexport PATH=$PATH:$HBASE_HOM...

gitlab的备份和还原

由于gitlab中存放的都是开发人员的工作成果,所以为了保证数据安全,我们会定期对数据进行备份,对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitla...

docker日志切割

docker日志切割

如果在docker部署前期没有规划好,例如:没有提前配置容器日志切割,那么在后期容器日志就会越来越大,当想要通过日志查看相关报错等信息的时候就会比较麻烦。配置docker日志切割在/etc/docke...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。