RabbitMQ集群部署

目录

原理介绍

普通模式

镜像模式

部署RabbitMQ集群

环境要求

所有的节点都要安装 erlang 和 rabbitmq

组成集群


消息中间件RabbitMQ,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。

原理介绍

RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点,确保cookie的一致性。

RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。

RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。
消息队列通过RabbitMQ HA镜像队列进行消息队列实体复制。

普通模式

普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。

对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。

当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连接rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式

镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。

作用:消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。

缺点:集群内部的同步通讯会占用大量的网络带宽。

部署RabbitMQ集群

环境要求

1、所有节点需要在同一个局域网内;

2、所有节点需要有相同的 erlang cookie,否则不能正常通信,为了实现cookie内容一致,采用scp的方式进行。

3、准备三台干净的虚拟机,要修改主机名且不能一样,配置要相同

相互解析

所有的机器都要相互做解析
# vim /etc/hosts
10.3.145.200 rabbit-1
10.3.145.201 rabbit-2
10.3.145.202 rabbit-3

所有的节点都要安装 erlang 和 rabbitmq

安装前先查看 erlang和rabbitmq版本对应关系!!!

地址: https://www.rabbitmq.com/which-erlang.html  

编译安装erlang

安装依赖包
# yum install -y *epel* gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel

获取erlang安装包
# wget http://erlang.org/download/otp_src_21.3.tar.gz
# tar -zxvf otp_src_21.3.tar.gz
# cd otp_src_21.3
# ./configure --prefix=/usr/local/bin/erlang --without-javac
# make && make install

设置环境变量
# vim /etc/profile.d/erlang.sh
ERLANG_HOME=/usr/local/bin/erlang
PATH=$PATH:$ERLANG_HOME/bin
export ERLANG_HOME PATH
# source /etc/profile.d/erlang.sh

当出现"erl"命令 说明erlang 安装安装成功

编译安装rabbitmq

1.获取rabbitmq安装包
# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.0/rabbitmq-server-generic-unix-3.8.0.tar.xz

2.解包
# yum install -y xz
# xz -d rabbitmq-server-generic-unix-3.7.9.tar.xz
# tar -xvf rabbitmq-server-generic-unix-3.7.9.tar -C /usr/local/

3.设置环境变量
法一:
# vim /etc/profile.d/rabbit.sh
RABB_HOME=/usr/local/rabbitmq_server-3.7.14
PATH=$PATH:$RABB_HOME/sbin
export RABB_HOME PATH
# source /etc/profile.d/rabbit.sh
法二:
# echo "export PATH=$PATH:/usr/local/bin/erlang/bin:/usr/local/bin/rabbitmq_server-3.7.9/sbin" >> /etc/profile
# source /etc/profile

4.导入rabbitmq 的管理界面

# rabbitmq-plugins enable rabbitmq_management

5.设置erlang
找到erlang cookie文件的位置
# find / -name *.cookie
将master机器上的cookie 通过scp的方式拷贝到其他机器,设置erlang的目的是要保证集群内的cookie内容一致。

# cat /root/.erlang.cookie
统一使用主节点的erlang cookie,否则服务起不来

使用-detached参数运行各节点。 !!要确保三台机器上的cookie是一致的,再启动服务
# rabbitmq-server -detached #放在后台运行

查看节点状态
# rabbitmqctl cluster_status

6.创建用户
由于guest这个用户,只能在本地访问,所以我们要新增一个用户并赋予权限。

添加用户并设置密码
# rabbitmqctl add_user  admin admin123

添加权限(使admin用户对虚拟主机“/” 具有所有权限)
# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

修改用户角色(加入administrator用户组)
# rabbitmqctl set_user_tags admin administrator

!!到此可以通过http://ip:15672 使用 用户:admin; 密码:admin123 进行登陆了。

!!此时每个节点是作为单独的一台RabbitMQ存在的,也可以正常提供服务了

组成集群

rabbitmq-server 启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。

要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。

如果使用 ./rabbitmqctl stop,应用和节点都将被关闭。

所以使用 rabbitmqctl stop_app 仅仅关闭应用。

将rabbit-2、rabbit-3和rabbit-1组成集群,这里以rabbit-2为例

rabbit-2# rabbitmqctl stop_app  
rabbit-2# rabbitmqctl join_cluster rabbit@rabbit-1           ##这里集群的名字一定不要写错了
rabbit-2# rabbitmqctl start_app

将rabbit-3重复上述操作,也加入rabbit-1的集群。

查看集群的状态
[root@rabbit-3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit-3 ...
Basics

Cluster name: rabbit@rabbit-1

Disk Nodes

rabbit@rabbit-1
rabbit@rabbit-2
rabbit@rabbit-3

Running Nodes

rabbit@rabb-1
rabbit@rabb-2
rabbit@rabbit-3

Versions

rabbit@rabbit-1: RabbitMQ 3.8.0 on Erlang 21.3
rabbit@rabbit-2: RabbitMQ 3.8.0 on Erlang 21.3
rabbit@rabbit-3: RabbitMQ 3.8.0 on Erlang 21.3

......略

可通过web访问查看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值