• HAProxy 参数配置


    RabbitMQ集群部署完成,通过HAProxy反向代理来提供统一的对RabbitMQ的访问入口。

    1.Haproxy提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。(负载均衡策略有很多:轮询、加权轮询、源地址哈希、最小连接数等等)

    2.为什么使用集群?面对大量业务访问、高并发请求可以使用高性能的服务器来提升RabbitMQ服务的负载能力。当单机容量达到极限时,采取集群的策略来对负载能力做进一步的提升和提升系统稳定性,但是这里还存在一个负载不均衡的问题。如果一个集群中有3个节点,所有的客户端都与其中的单个节点node1建立TCP连接,那么node1的网络负载必然会大大增加而显得难以承受,其他节点又由于没有那么多的负载而造成硬件资源的浪费。通过使用 haproxy 的负载策略来转发客户端的请求到RabbitMQ集群中,缓解队列集群中单一节点网络负载等情况

     3.RabbitMQ集群的搭建方式有多种,其中就包括我们今天要说的RabbitMQ+HAProxy的形式。

    HAProxy是部署在Linux服务器的一个非常容易安装的程序包,对于安装我们不再赘述,我们只说明HAProxy的配置。

    HAProxy部署完成以后,在配置文件/etc/haproxy/haproxy.cfg(Haproxy的安装路径) 的后面加上以下配置

      1 # 配置文件
      2 -------------------------------------------------------
      3 # 全局配置
      4 global
      5 
      6     # 设置日志文件输出定向
      7     log 127.0.0.1 local3 info
      8 
      9     # 改变当前工作目录
     10     chroot /usr/local/haproxy
     11 
     12     # 用户与用户组
     13     user haproxy
     14     group haproxy
     15 
     16     # 守护进程启动,运维方式为后台工作
     17     daemon
     18 
     19     # 最大连接数
     20     maxconn 4000
     21 
     22 # 作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen 
     23 defaults
     24 
     25     # 启用每个实例日志记录事件和流量。
     26     log global
     27     
     28     # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
     29     mode http
     30 
     31     # maxconn 65535         maxconn 每个进程可用的最大连接数
     32     # retries 3         当对server的connection失败后,重试的次数  
     33     # option abortonclose     启用或禁用在队列中挂起的中止请求的早期丢弃 
     34     # option redispatch     启用或禁用在连接故障情况下的会话重新分配 
     35     # option dontlognull     启用和禁用 记录 空连接
     36     # option httpclose         每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式 
     37     # option forwardfor     获得客户端IP 
     38     # option httplog        记录HTTP 请求,session 状态和计时器 
     39     option httplog
     40     option dontlognull
     41     timeout connect 5000
     42     timeout client 50000
     43     timeout server 50000
     44 
     45 
     46 #前端配置,http_front名称可自定义
     47 frontend http_front
     48     
     49     # bind *:443 ssl crt /etc/haproxy/cert.pem        启用ssl证书 
     50     # bind *:80                        发起http请求道80端口,会被转发到设置的ip及端口
     51     bind *:80
     52 
     53     #haproxy的状态管理页面,通过/haproxy?stats来访问
     54     stats uri /haproxy?stats
     55     default_backend http_back
     56 
     57 #后端配置,http_back名称可自定义
     58 backend http_back
     59 
     60     # 负载均衡方式
     61     # source 根据请求源IP
     62     # static-rr 根据权重
     63     # leastconn 最少连接者先处理
     64     # uri 根据请求的uri
     65     # url_param 根据请求的url参数
     66     # rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
     67     # hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
     68     # roundrobin 轮询方式
     69     balance roundrobin
     70 
     71     #设置健康检查页面
     72     option httpchk GET /index.html
     73 
     74     #传递客户端真实IP
     75     option forwardfor header X-Forwarded-For
     76 
     77     # inter 2000 健康检查时间间隔2秒
     78     # rise 3 检测多少次才认为是正常的
     79     # fall 3 失败多少次才认为是不可用的
     80     # weight 30 权重
     81     # 需要转发的ip及端口
     82     server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
     83     server node2 192.168.179.131:8082 check inter 2000 rise 3 fall 3 weight 30
     84 
     85 -------------------------------------------------------
     86 
     87 
     88 
     89 # haproxy的acl规则
     90 -------------------------------------------------------
     91 
     92 frontend http_front
     93     bind *:80
     94     stats uri /haproxy?stats
     95  
     96     #创建一个acl,is_http_back2是acl的名称,可自定义,用于判断主机名是否为www.back2.com
     97     acl is_http_back2 hdr_end(host) www.back2.com
     98 
     99     #通过正则判断主机名中是否为bbs.back.com或forum.back.com
    100     acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com)
    101 
    102     #判断ua是否为android
    103     acl is_ua_android hdr_reg(User-Agent) -i android
    104 
    105     #判断主机名开头是否为img.或css.或js.
    106     acl is_host_static hdr_beg(host) -i img. css. js.
    107 
    108     #判断url路径中是否有/bbs
    109     acl is_path_bbs path_beg -i /bbs
    110 
    111     #判断url文件结尾
    112     acl is_php path_end -i .php
    113 
    114     #通过正则判断url中结尾以
    115     acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$
    116 
    117     #效果同上
    118     acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif
    119 
    120     #如果主机名是www.back2.com那么就使用后端http_back2
    121     use_backend http_back2ifis_http_back2
    122 
    123     #默认使用的后端
    124     default_backend http_back
    125 
    126 backend http_back
    127     balance roundrobin
    128     option httpchk GET /index.html
    129     option forwardfor header X-Forwarded-For
    130     server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
    131 
    132 backend http_back2
    133     balance roundrobin
    134     option httpchk GET /index.html
    135     option forwardfor header X-Forwarded-For
    136     server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
    137 
    138 -------------------------------------------------------

    4.HAProxy及RabbitMQ均部署完成后,可以通过查看HAProxy的监控页面,来确认HAProxy是否正确安装

     5.HAProxy及RabbitMQ的部署关系

     针对HAProxy参数配置,比较固定,调整的时机也很小,但每个参数都有其必要的作用,因此了解每个常用HAProxy参数是非常有必要的。

    针对RabbitMQ集群,顺便提一下,部署了集群以后,务必针对重要队列开启镜像,因为可以最大限度的避免消息丢失。

  • 相关阅读:
    selenium 在爬虫中的应用
    基于scrapy-redis的第二种形式的分布式爬虫(把普通scrapy框架转成分布式)
    django html 模板继承(下)加精
    django页面之间的前端模板继承或者引入详解(上)
    inclusion_tag 重复页面加载显示模板
    django ForeignKey ManyToManyField OneToOneField
    django建站的注意点
    任务19
    数列求和
    鸡兔同笼2
  • 原文地址:https://www.cnblogs.com/jiagoushi/p/10186857.html
Copyright © 2020-2023  润新知