加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

认识RabbitMQ+haProxy+keepalived的使用

发布时间:2022-07-21 13:12:56 所属栏目:PHP教程 来源:互联网
导读:前言 如有错误,随时斧正,非常感谢! 为什么要使用haProxy+keepalived呢? 为了AMQP服务的稳定性 首先先说下为什么要使用haProxy。 我在两台服务器上建了AMQP集群,分别是10.71.13.24和10.71.13.25,以后简称为24、25服务器。假设AMQP客户端直接连接24或25
  前言
  如有错误,随时斧正,非常感谢!
 
  为什么要使用haProxy+keepalived呢?
  为了AMQP服务的稳定性
 
  首先先说下为什么要使用haProxy。
  我在两台服务器上建了AMQP集群,分别是10.71.13.24和10.71.13.25,以后简称为24、25服务器。假设AMQP客户端直接连接24或25。如果24|25服务器宕机了,那么连接24|25的AMQP客户端就无法工作,消费者也无法进行正常消费(以下以24举例代表24|25单机的情况)。再者单机连接可能造成单机负载过高,而其他服务器空闲的状态。此时则可以通过haProxy实现负载均衡。
 
  在本地的配置如:
 
 
  global
 
      #log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出]
 
      log 127.0.0.1 local1 notice #定义haproxy 日志级别[error warringinfo debug]      
 
      daemon #以后台形式运行harpoxy
 
      nbproc 2 #设置进程数量
 
 
   
 
  ########默认配置############
 
  defaults
 
      log global
 
      log 127.0.0.1 local0 info
 
      mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
 
      option httplog #日志类别,采用httplog
 
      option dontlognull #不记录健康检查日志信息
 
      retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置
 
      option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
 
      option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
 
      option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持
 
      option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
 
      maxconn 4096 #默认的最大连接数
 
      #timeout http-keep-alive10s #默认持久连接超时时间
 
      #timeout http-request 10s #默认http请求超时时间
 
      #timeout queue 1m #默认队列超时时间
 
      balance roundrobin #设置默认负载均衡方式,轮询方式
 
      #balance source #设置默认负载均衡方式,类似于nginx的ip_hash
 
      #balnace leastconn #设置默认负载均衡方式,最小连接数
 
      timeout connect 5s #连接超时
 
      balance roundrobin
 
      #RabbitMQ集群节点配置
 
      server rmq_node_13_24 10.71.13.24:5672 check inter 5000 rise 2 fall 3 weight 1
 
      server rmq_node_13_25 10.71.13.25:5672 check inter 5000 rise 2 fall 3 weight 1
 
      # server <name> <ip>:<port> check inter <value> rise <value> fall <value> weight <value>
 
      # check inter <value>:每隔5000ms检测AMQP服务是否可用
 
      # rise <value>:检测到2次可用则可被确认再次可用。
 
      # fall <value>:检测到3次无法连接则认为服务不可用
 
      # weight <value>:权重
 
  配置完haProxy.cfg之后,启动haProxy:sudo /etc/init.d/haproxy start。(haproxy启动脚本见最后)
  配置解析:之前连接的socket是10.71.13.24:5672,现在连接的socket是10.71.13.24:5678。在25也可以按24的配置COPY一份,因此无论连接的是哪个服务器的5678端口最终都能实现负载均衡。然后还是有一个问题没有解决,如果某个服务器宕机了怎么办?这就是为什么要引入keepalived了。
 
  再谈keepalived的使用
  关于keepalived的原理我不熟,也就不过多的去解读。目前我只是想要解决我碰到的问题。为了解决AMQP最终能够稳定服务,于是申请了一个虚拟IP-VIP:10.71.13.254。通过这个VIP则可以开始配置keepalived.conf了。
 
 
 
  ! Configuration File for keepalived
 
   
 
  global_defs {
 
     router_id Node_Master  # 路由ID,主备的不能相同}vrrp_script chk_haproxy {
 
      script "/etc/keepalived/check_haproxy.sh"
 
      interval 5
 
      weight 2}vrrp_instance VI_1 {
 
      state MASTER  #keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
 
      interface eth1 #指定检测网卡,配置成eth0之后我无法连接到AMQP服务
 
      virtual_router_id 1
 
      priority 100 #优先级,BACKUP机器上的优先级至少小于50
 
      advert_int 1 #设置主备之间的检测时间,单位为s
 
      authentication {
 
          auth_type PASS
 
          auth_pass root123    }
 
   
 
      track_script {
 
          chk_haproxy    }
 
   
 
      virtual_ipaddress { #VIP地址,可以设置多个        10.71.13.254
 
      }}virtual_server 10.71.13.254 5672 { # 设置虚拟服务器
 
 
      # 这个real_server 即LVS的三大部分之一的RealServer,这里特指RabbitMQ服务
 
      real_server 10.71.13.24 5678 { #配置服务节点
 
          weight 1  #配置权重        TCP_CHECK {
 
              nb_get retry 3
 
              connect_timeout 3
 
              delay_before_retry 3
 
              connect_port 5672
 
          }
 
      }
 
   
 
      real_server 10.71.13.25 5678 {
 
          weight 1
 
          TCP_CHECK {
 
              nb_get retry 3
 
              connect_timeout 3
 
              delay_before_retry 3
 
              connect_port 5672
 
          }
 
      }
 
    }virtual_server 10.71.13.254 15672 {
 
      delay_loop 6
 
      lb_algo wrr
 
      lb_kind DR
 
      persistence_timeout 50
 
      protocol TCP
 
      real_server 10.71.13.24 15672 {
 
          weight 1
 
          TCP_CHECK {
 
              nb_get retry 3
 
              connect_timeout 3
 
              delay_before_retry 3
 
              connect_port 15672
 
          }
 
      }
 
      real_server 10.71.13.25 15672 {
 
          weight 1
 
          TCP_CHECK {
 
              nb_get retry 3
 
              connect_timeout 3
 
              delay_before_retry 3
 
              connect_port 15672
 
          }
 
      }}

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读