RabbitMQ

RabbitMQ ,第1张

目录
  • 一、集群模式
  • 二、镜像模式集群实现
    • 1. 安装两台 Linux *** 作系统
    • 2. 在两台 Linux 服务中分别安装 RabbitMQ
  • 三、使用 SpringBoot 连接 RabbitMQ 集群
    • 1. 配置 RabbitMQ 的 账号
    • 2. SpringBoot 配置


一、集群模式

普通模式 (默认) :

对于 Queue 来说,消息实体只存在于其中的一个节点,A / B两个节点仅有相同的元数据,即 队列结构。

交换机的所有元数据在所有节点上是一致的,而队列的完整信息只有在创建它的节点上,各个节点仅有相同的元数据,即队列结构。

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

该模式存在一个问题就是当 A 节点故障后,B 节点无法取到 A 节点中还未消费的消息实体。如果做个消息持久化,那么等 A 几点恢复,然后才可被消费。其实该模式非常适合非持久化队列,只有该队列是非持久化的,客户端才能重新连接到集群中的其他节点,并且重新创建队列。如果该队列是持久化的,那么唯一的办法就是将故障节点恢复起来。

镜像模式 (高可用模式):

把需要的队列做成镜像模式,存在于多个节点,数据 Rabbitmq 的 HA 方案。该模式解决了上述问题,其实质和普通模式的不同之处在于,消息实体会主动在镜像节点间同步,而不会在 consumer 取数据时临时拉取。当然,该模式带来的副作用也很明显,除了降低系统性能意外,如果镜像队列过多,加之有大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在对可靠性要求较高的场合中适用。

二、镜像模式集群实现 1. 安装两台 Linux *** 作系统

修改 hostname 分别为 A 和 B

执行vi /etc/hosts 文件内容如下

127.0.0.1 A  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       A  localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.160.129 A
192.168.160.130 B

注意:

2 台 Linux 服务器需要完成同样的 *** 作

关闭防火墙确保2台机器相互 ping ,可以执行 ping A 和 ping B 命令进行测试

2. 在两台 Linux 服务中分别安装 RabbitMQ

1. 依赖包安装

安装 RabbitMQ 之前必须要先安装所需要的依赖包,可以使用下面的一次性安装命令

yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto -y

2. 安装 Erlang

1.Erlang 源代码包 otp_src_19.3.tar.gz 上传到 Linux/home 目录下

2. 解压 Erlang 源码包
tar -zxvf otp_src_19.3.tar.gz

3. 手动创建 Erlang 的安装目录
mkdir /usr/local/erlang

4. 进入 Erlang 的解压目录
cd otp_src_19.3

5. 配置 Erlang 的安装信息
./configure --prefix=/usr/local/erlang --without-javac

6. 编译并安装
make && make install

7. 配置环境变量
vim /etc/profile

8. 将这些配置填写到 profile 文件的最后
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH

9. 启动环境变量配置文件
source /etc/profile

3. 安装 RabbitMQ

1.RabbitMQ 安装包 rabbitmq-server-3.7.2-1.el7.noarch.rpm 上传到 /home 目录

2.安装 RabbitMQ
rpm -ivh --nodeps rabbitmq-server-3.7.2-1.el7.noarch.rpm

3.安装管控台插件
rabbitmq-plugins enable rabbitmq_management

注意:

需要分别在 2 台 Linux 服务器中安装 RabbitMQ

4. 配置Cookie文件

Erlang Cookie 是保证不同节点可以互相通信的秘钥,要保证集群中的不同节点互相通信必须共享相同的 Erlang Cookie,具体存放在 /var/lib/rabbitmq/.erlang.cookie

例如

[root@A ~]# cat /var/lib/rabbitmq/.erlang.cookie 
MZFQSBXIIJJMUZRTJFWQ
[root@A ~]# ~

必须要保证2台 Linux 的 Cookie 文件内容完全相同,可以选择使用 vim 进行编辑,也可以使用 scp 命令完成文件跨机器拷贝

例如

[root@A ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.222.130:/var/lib/rabbitmq

注意:

由于这个文件的权限是 只读 ,因此无论是使用 vim 还是 scp 来实现 Cookie 文件的同步都会失败,因此必须要修改这个文件的权限。

例如 chmod 777 /var/lib/rabbitmq/.erlang.cookie

当 Cookie 文件同步完成以后再修改权限回只读

例如 chmod 400 /var/lib/rabbitmq/.erlang.cookie

5.组建集群

分别启动 2 台 Linux 机器中的 RabbitMQ 服务器

rabbitmqctl stop
rabbitmq-server -detached

注意:

rabbitmq-server –detached 表示在后台运行

将某个RabbitMQ加入到某个服务器节点

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@A
rabbitmqctl start_app

注意:

rabbitmqctl join_cluster rabbit@A 命令中的 A 为某个机器的 hostname,在 hostname 为 B 的机器中执行这些命令

查看集群状态确认节点成功添加

[root@B ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@B ...
[{nodes,[{disc,[rabbit@A,rabbit@B]}]},
 {running_nodes,[rabbit@A,rabbit@B]},
 {cluster_name,<<"rabbit@A">>},
 {partitions,[]},
 {alarms,[{rabbit@A,[]},{rabbit@B,[]}]}]
[root@B ~]#

注意:

当查看节点状态时发现 2 台机器的节点同时显示机表示集群搭建完成。

其他命令

如果要将某个节点从集群中移除,使其变回独立节点,可以使用以下命令:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
三、使用 SpringBoot 连接 RabbitMQ 集群 1. 配置 RabbitMQ 的 账号

分别为 2 台 Linux 中的 RabbitMQ 添加账号并进行授权

rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl set_permissions -p / root '.*' '.*' '.*'
2. SpringBoot 配置

修改 SpringBoot 的 application.properties 文件进行集群的继承

#spring.rabbitmq.port=5672
#配置RabbitMQ的集群访问地址
spring.rabbitmq.addresses=192.168.160.129:5672,192.168.160.130:5672
#配置RabbitMQ服务器的访问账号
spring.rabbitmq.username=root
#配置RabbitMQ服务器的访问密码
spring.rabbitmq.password=aszhuo123

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/723375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存