六、rabbitmq集群

 

一、rabbitmq cluster的基础知识

1.RabbitMQ简介

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如pyhton、C等,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性方面的性能不较好。AMQP,即Advanced message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计,消息中间件主要用于组建之间的解耦,消息的发送者无需知道消息使用者的存在,反之依然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)。

2.RabbitMQ集群概述

    通过Erlang的分布式特性(通过magic cookie认证节点)的方式管理rabbitmq集群,即各个rabbitmq服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。这些节点通过RabbitMQ HA队列(镜像队列)进行消息队列结构复制。

二、rabbitmq cluster安装

1.安装所需要的包

    在所有的rabbit节点都需要安装rabbit,以及开启web服务。

**本小结在全部rabbit节点执行

安装所需要的包
    yum install rabbitmq-server erlang socat -y

启动服务
    systemctl enable rabbitmq-server.service
    systemctl start rabbitmq-server.service

启动web页面
    rabbitmq-plugins enable rabbitmq_management  #启动web插件端口15672
    netstat -antp|egrep '567'

2.设置Erlang Cookie

    RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的,因此要保证所有节点的cookie一致性。

为了保证所有rabbit节点cookie的一致性,我们可以将一台节点的cokkie分别同步复制到其他的rabbit部署节点,这里以zcontrollerA1的cookie为例,将zcontrollerA1中的rabbit cookie分别复制到其他的rabbit部署节点。
    scp /var/lib/rabbitmq/.erlang.cookie zcontrollerA2:/var/lib/rabbitmq/

所有rabbitmq的cookie设置完成之后,在以rabbit的cookie为基准的节点上执行以下命令。
    systemctl stop rabbitmq-server.service
    pkill beam.smp
    rabbitmqctl stop
    rabbitmq-server -detached 
    rabbitmqctl cluster_status

3.将各节点添加到集群

    将其他节点分别加入到基准cookie所在的节点,示例中,将所有节点都加入到zcontrollerA1的集群中,除zcontrollerA1之外的其他节点均需要执行。

**分别在cookie基准节点之外的其他rabbit节点依次执行,其中zcontrollera1指的是将当前rabbit要加入的集群节点,即cookie的基准节点。
    systemctl stop rabbitmq-server.service
    pkill beam.smp
    rabbitmq-server -detached 
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@zcontrollera1
    rabbitmqctl start_app
    rabbitmqctl cluster_status

4.设置镜像队列

设置镜像队列,在某一台设备上执行就行。

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'  #设置镜像队列
rabbitmqctl set_cluster_name RabbitMQ-Cluster #更改群集名称
rabbitmqctl cluster_status #查看群集状态

5.添加用户密码

在任意一个rabbit节点执行。

rabbitmqctl  add_user admin admin   #添加admin用户
rabbitmqctl  set_user_tags admin administrator  #给admin用户管理员权限
rabbitmqctl add_user openstack 1q2w3e4r   #添加openstack用户     
rabbitmqctl set_permissions openstack ".*" ".*" ".*"  #设置权限
rabbitmqctl  set_user_tags openstack administrator   #给openstack用户管理员权限
netstat -antp|grep '5672'

三、haproxy部署rabbitmq

    本节中的1、2、3在所有节点执行。

1.haproxy配置rabbitmq后端服务

echo '#RabbitMQ

listen RabbitMQ-Server
bind vip:5673
mode tcp
balance roundrobin
option tcpka
timeout client  3h
timeout server  3h
option  clitcpka
server rabbit节点1的ip rabbit节点1的ip:5672 check inter 5s rise 2 fall 3
server rabbit节点2的ip rabbit节点2的ip:5672 check inter 5s rise 2 fall 3
'>>/etc/haproxy/haproxy.cfg

2.haproxy配置rabbitmq web

echo '#RabbitMQ

listen RabbitMQ-Web
bind vip:15673
mode tcp
balance roundrobin
option tcpka
server rabbit节点1的ip rabbit节点1的ip:15672 check inter 5s rise 2 fall 3
server rabbit节点2的ip rabbit节点2的ip:15672 check inter 5s rise 2 fall 3
'>>/etc/haproxy/haproxy.cfg

3.重启服务并访问

启动服务
    systemctl restart haproxy.service
    netstat -antp|grep 567

web访问
    http://vip:15672

4.启动异常处理

    处理方案如下:

ps -aux | grep "rabbit"
kill -9 杀掉进程

然后重启rabbit

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值