haproxy的安装及运行

Haproxy 介绍

Haproxy是一个开源的、高性能的基于tcp和http应用代理的高可用的、负载均衡服务软件,它支持双机热备(heartbeat)、高可用(heartbeat、)、负载均衡(lvs、nginx、squid)、虚拟主机、基于tcp和http的应用代理、图形界面查看信息等功能,其配置简单、维护方便,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived),当其代理的后端服务器出现问题的时候,haproxy会自动的将该故障服务器摘除,当故障的服务器恢复侯,haproxy还会自动将该服务器自动加入进来提供服务

Haproxy特别适用于那些高负载,访问量很大,但又需要会话保持及七层应用代理的业务应用,haproxy运行在今天的普通的服务器硬件上,几乎不需要进行任何的优化就可以支持数亿万计的并发连接,并且它的运行模式使得它可以很简单、轻松、安全的整合到各种已有的网站架构中,同时,haproxy的代理模式,可以使得所有应用服务器不会暴露到公共网络上,即后面的节点服务器不需要公网ip地址

从1.3版本起,haproxy软件引入了frontend,backend的功能,frontend(acl 规则匹配) 可以让运维管理人员根据任意http请求头内容做规则匹配,然后把请求定向到相关的backend(这个是事先定义好的多个server pools),等待前端把请求转过来的服务器组),通过frontend和backend,我们可以很容易的实现haproxy的各种七层应用代理功能。

官网站点: https://www.haproxy.com/ https://www.haproxy.org/

Haproxy原理即-- 解决方案拓扑图

1、Haproxy L4 负载均衡用用架构拓扑
Haproxy软件的四层tcp应用代理非常优秀,且配置非常方便,比lvs和nginx配置简单很多,首先,配置haproxy不需要再rs(real server)端做任何特殊配置(只要对应服务开启就ok)就可以实现应用代理,其次,haproxy的配置语法和增加虚拟主机功能等也比lvs/nginx简单,下面是haproxy的layer4层应用代理的拓扑图
在这里插入图片描述
客户机----->haproxy------>web服务器------>mysql数据库----->web服务器------>haproxy---->客户机

说明:由于haproxy软件采用的是类nat模式(本质不同)的应用代理,数据包来去都会经过haproxy,因此,在流量特别大的情况下(门户级别的流量吧),其效率和性能不如lvs的dr模式负载均衡

2、HAPROXY L7负载均衡应用架构拓扑图
Haproxy软件最大的优势在于其7层的根据url请求头应用过滤的功能以及session会话功能,在门户网站的高并发生产架构中,haproxy软件一般在4层lvs负载均衡软件的下一层,或者像haproxy官方推荐的也可以挂在硬件负载均衡althon、ns、f5、a10下适用,其表现非常好,从2009年起taobao网,京东商城的业务也大面积的适用了haproxy做未7层cache应用代理

下面是haproxy的layer7层代理的拓扑结构图
在这里插入图片描述
客户端----> lvs、f5工作在5层-----> haproxy7层------>web服务器
说明:lvs支持大并发,haproxy负责7层

HAPROXY服务实施基础准备

拓扑图如下:
在这里插入图片描述
Haproxy的实施部署环境:

  • 防火墙关闭
  • selinux设置为Disabled(也可不设置)
  • 系统为CentOS Linux release 7.9.2009 (Core)
  • 下载nginx
[root@hd1 ~]# yum -y install haproxy

备份主目录(这个作为运维应给不用说)

[root@hd1 ~]# cd /etc/haproxy/
[root@hd1 haproxy]# cp haproxy.cfg haproxy.cfg.bak

修改配置文件,将60行以后的配置删除后,添加到defaults最后面,如下内容:

[root@hd1 haproxy]# vi haproxy.cfg
frontend  mywebs *:80
    default_backend  webserver
backend webserver
    server   web1 192.168.0.12:80 check
server   web2 192.168.0.13:80 check

haproxy配置文件解释
global :全局配置参数段,主要用来控制haproxy启动前的进程及系统相关设置
defaults:配置一些默认参数,如果frontend,backend,listen等段未设置则使用defaults段配置
listen:监听
frontend:用来匹配接收客户所请求的域名uri等,并针对不同的匹配,做不同的请求处理。
Backend;定义后端服务器集群,以及对后段服务器的一些权重、队列、连接数等选项的设置

配置完参数,重启

[root@hd1 haproxy]# systemctl start haproxy.service 
 
 #能查到说明已经启来了              
[root@hd1 haproxy]# ss -ntl |grep -w 80
LISTEN     0      128          *:80                       *:*  

配置web1

[root@web1 html]# echo "this is 192.168.122.22" > index.html
[root@web1 html]# curl 192.168.122.22
this is 192.168.122.22

配置web2

[root@web2 html]# echo "this is 192.168.122.33" > index.html
[root@web2 html]# curl 192.168.122.33
this is 192.168.122.33

测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述
查看状态

修改主配置文件添加内容如下:

[root@hd1 haproxy]# vi haproxy.cfg
defaults
    stats enable
    stats uri /haproxy
    stats auth admin:123456
    mode                    http

#重启haproxy
[root@hd1 haproxy]# systemctl restart haprox

通过浏览器访问状态页面
在这里插入图片描述
可以看到后台服务器的状态
在这里插入图片描述
将hd3.com的web停掉

[root@node3 html]# nginx -s stop

再次查看发现,web2的颜色变色了
在这里插入图片描述
再重新启动hd3.com的web服务,发现又恢复了

[root@node3 html]# nginx

Haproxy健康检查功能

1、基于tcp端口的健康检查

使用这种检测方式,haproxy 只会去检查后端sever 服务的对应端口,根据前面的经验我们知道这并不能保证节点服务的完全可用,但却可以作为辅助的检查手段,不是非常严格业务环境下也是可用的

修改主配置文件补全配置结果

[root@hd1 haproxy]# vi haproxy.cfg
backend webserver
    
    server web1 192.168.0.12:80 check inter 5000 fall 5 rise 2
    server web2 192.168.0.13:80 check inter 5000 fall 5 rise 2

[root@hd1 haproxy]# systemctl restart   haproxy

解释说明:
(1)inter 5000 fall 5 表示每5秒检查一次,一共检查5次。如果有问题就会摘掉出问题的机器。
(2)如果结尾不加inter 5000 fall 5,则默认每2秒检查一次,一共检查3次。如果有问题就会摘掉出问题的机器。
(3)The default
values are the following ones :

  • inter : 2000 意思是不加该参数,正常情况默认每两秒检查一次
  • rise : 2 意思是不加该参数,在RealServer宕机后恢复前,检查2次OK,认为其复活,并加入到群组中
  • fall : 3 意思是不加该参数,检查3此后,认为RS宕机,剔除集群组

2、基于URL的健康检查
设置基于URI健康检查配置

[root@hd1 haproxy]# vim haproxy.cfg
backend webserver
    option httpchk HEAD /checkstatus.html HTTP/1.0
    server web1 192.168.0.12:80 check inter 5000 fall 5 rise 2
    server web2 192.168.0.13:80 check inter 5000 fall 5 rise 2

刷新状态页面,发现web1和web2都变色了
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d1f18131bea4aa49c2dcb73a01e0513.png)解决办法在web1和web2 网页根目录下创建checkstatus.html

```powershell
[root@node3 html]# touch checkstatus.html
[root@node2 html]# touch checkstatus.html

3、生产环境健康检查参数的设置
max_fails=2 最大尝试失败的次数,默认是1,0表示禁止失败尝试,企业场景中 京东1次,蓝汛10次

fail_timemout=20s

强调:本节内容适用于所有负载均衡软件的健康检查(lvs、nginx、squid、)

(1)常规业务可以使用基于tcp的方式做健康检查,我们在keepalived健康检查是就是这样做的,虽然,keepalived也支持url健康检查
(2)由于基于url的方式做健康检查相对来说也比较容易配置,推荐使用url的方式
(3)实际生产环境下,最重要的关键是,我们设置的check.html能否真正的代表rs上的业务状态,即 访问check.html正常,整个业务是否能正常,这个是需要我们运维及开发人员去分析的
(4)对于用户体验比较高的业务,可以请开发人员设置更加深入的健康检查文件,例如:check.jsp等,这个健康检查可以深入到数据库,存储以及各个接口,如果之一出现问题就摘除,实际工作中不是越高级越好,根据业务需求达到要求就可以
(5)健康检查的频率,次数都要做相应的调整,例如:1秒检查一次,不成功的话 立刻摘除

Haproxy 的高可用相关生产功能参数
backup 参数,表示只有其它主机全部down掉之后,backup所在的主机才会生效

高可用:一个web提供服务,另外一个处于备份等待状态
负载均衡:每个web 服务器都会提供服务

案例:修改主配置文件如下:

[root@hd1 haproxy]# vim haproxy.cfg
backend webserver
    option httpchk HEAD /checkstatus.html HTTP/1.0
    server web1 192.168.0.12:80 check inter 5000 fall 5 rise 2
    server web2 192.168.0.13:80 check inter 5000 fall 5 rise 2 backup
 
[root@hd1 haproxy]# systemctl  restart  haproxy 

测试发现,访问的是0.12,那0.13作为高可用不提供服务
在这里插入图片描述
停止web1的服务,再次测试,发现0.13提供web服务了。

[root@node2 html]# nginx -s stop

在这里插入图片描述
实现haproxy下的rs(web服务器)无法记录客户端ip地址的问题?
(1) 在haproxy配置文件里加入如下参数

[root@hd1 haproxy]# vim haproxy.cfg
backend webserver
    option forwardfor
    option httpchk HEAD /checkstatus.html HTTP/1.0   
    server web1 192.168.0.12:80 check inter 5000 fall 5 rise 2
    server web2 192.168.0.13:80 check inter 5000 fall 5 rise 2 backup

(2)在web服务器里添加日志记录功能
在这里插入图片描述[root@node2 conf]# nginx -s reload

(3)在windows上访问
在这里插入图片描述
在192.168.0.12上去查看日志(注意:基于url的健康检查会产生很多日志)
在这里插入图片描述

可以看到上图中,日志记录的不是haproxy服务器的ip地址而是192.168.1.11windows主机的ip地址

实现haproxy基于url地址目录做7层跳转实现动静分离配置,(nginx处理静态页面很快,apache处理动态页面很快)
在这里插入图片描述
根据目录进行过滤转发
1.修改后的内容如下

root@hd1 haproxy]# vi haproxy.cfg 
frontend www
         bind 192.168.1.11:80
         acl wm_static path_beg /nginx/
         acl wm_php    path_beg /php/
         acl wm_java   path_beg /java/
         use_backend   nginxpools if wm_static
         use_backend   phppools  if wm_php
         default_backend nginxpools
backend  nginxpools
         balance leastconn
         option httpclose
         option forwardfor
         server web01 192.168.1.13:80 check port 80 inter 1000 fall 1 
backend  phppools
         balance leastconn
         option httpclose
         option forwardfor
         server web02 192.168.1.14:80 check port 80 inter 1000 fall 1

2.重新启动haproxy这个服务

[root@hd1 haproxy]# systemctl restart haproxy

接下来配置 192.168.1.13、192.168.1.14为apache网站 (yum安装)

在192.168.1.13的网站根目录之下创建一个nginx目录和子首页

[root@hd3 ~]# cd /var/www/html
[root@hd3 html]# mkdir nginx
[root@hd3 html]# cd nginx/
[root@hd3 nginx]# echo "wo shi 1.13 de nginx" >index.htm

在192.168.1.14上同理

[root@hd4 ~]# cd /var/www/html
[root@hd4 html]# mkdir php
[root@hd4 html]# cd php
[root@hd4 php]# echo "wo shi 1.14 php" >index.html

测试php
在这里插入图片描述
测试nginx
在这里插入图片描述

Ansible是一种自动化配置管理工具,可以用于自动化部署、配置和管理服务器。HAProxy是一个负载均衡器,可以帮助将流量均匀地分发到多台服务器上。 要在服务器上安装Ansible和HAProxy,可以按照以下步骤进行操作: 1. 确保你的服务器已经安装了Python。Ansible是基于Python开发的,所以需要在服务器上安装Python。 2. 在控制节点上安装Ansible。你可以使用包管理工具(如yum或apt-get)进行安装。例如,在基于Red Hat的系统上,可以使用以下命令安装Ansible: ``` yum install ansible ``` 3. 创建一个Ansible的inventory文件,用于指定要部署和配置HAProxy的服务器。在该文件中,你需要提供服务器的IP地址或主机名。例如,创建一个名为`hosts.ini`的文件,并在其中添加以下内容: ``` [haproxy] server1 ansible_host=192.168.0.1 server2 ansible_host=192.168.0.2 ``` 4. 创建一个Ansible Playbook,用于定义安装和配置HAProxy的任务。在Playbook中,你可以使用Ansible的模块来执行各种任务,例如安装软件、创建配置文件等。以下是一个示例Playbook: ``` - hosts: haproxy become: true tasks: - name: Install HAProxy yum: name: haproxy state: present - name: Configure HAProxy template: src: haproxy.cfg.j2 dest: /etc/haproxy/haproxy.cfg notify: - restart haproxy handlers: - name: restart haproxy service: name: haproxy state: restarted ``` 5. 使用Ansible运行Playbook,开始安装和配置HAProxy。使用以下命令执行Playbook: ``` ansible-playbook -i hosts.ini playbook.yml ``` 这将使用`hosts.ini`文件中指定的服务器,并在这些服务器上执行Playbook中定义的任务。 通过以上步骤,你可以使用Ansible轻松地在多台服务器上安装和配置HAProxy。Ansible的优势在于可以批量管理服务器,并且具有简单易用的语法和丰富的模块,使得配置和管理变得更加简单和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值