1、Centos7.7-64位
2、Erlang-OTP 23
3、RabbitMQ-3.8.9
1、RabbitMQ软件:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.9/rabbitmq-server-3.8.9-1.el7.noarch.rpm
2、erlang是RabbitMQ的依賴軟件,在erlang官网下载以下版本:
https://github.com/rabbitmq/erlang-rpm/releases/download/v23.2.1/erlang-23.2.1-1.el7.x86_64.rpm
3、把下载的文件分别上传到3台服务器的 /root/soft/rabbitmq 目录下。
- 安装基础依赖包
1. 配置yum源:
2. 导入key:
注:安装 rabbitMQ 时需要key。
3. 安装socat:
注:安装 rabbitMQ 时需要依赖socat。
- 安装与配置erlang
1. erlang和rabbitmq的版本对应关系
2. 安装erlang
3. 使用以下指令进入erlang如出现以下讯息表示成功安装:
用ctrl+c退出。
- 安装RabbitMQ
- 在rabbit-1、rabbit-2、rabbit-3上分別配置RabbitMQ:
rabbit-1:
rabbit-2:
rabbit-3:
- 启动RabbitMQ节点
注:该命令会同时启动 Erlang 虚拟机和 RabbitMQ 应用服务。而后文用到的 只会启动 RabbitMQ 应用服务, 只会停止 RabbitMQ 服务。
- 查看RabbitMQ节点状态
- 停止RabbitMQ节点
- 开启RabbitMQ管理控制台
1. 在3台机器上/etc/hosts文件中添加IP和节点名称的对应:
2. 在各个RabbitMQ服务器中停止RabbitMQ服务:
3. 拷贝 cookie
将一台主机上的 文件拷贝到其他两台主机上。该 cookie 文件相当于密钥令牌,集群中的 RabbitMQ 节点需要通过交换密钥令牌以获得相互认证,
因此处于同一集群的所有节点需要具有相同的密钥令牌,否则在搭建过程中会出现 Authentication Fail 错误。
RabbitMQ 服务启动时,erlang VM 会自动创建该 cookie 文件,默认的存储路径为:
rabbit-1:
登陆第一台rabbit-1机器,拷贝cookie至另外2台机器rabbit-2、rabbit-3:
rabbit-2:
登录rabbit-2机器执行:
rabbit-3:
登录rabbit-3机器执行:
4. 启动3个节点上的RabbitMQ服务:
5. 在rabbit-2及rabbit-3服务器中使用以下指令把在rabbit-2及rabbit-3服务器中的RabbitMQ服务加入到rabbit-1服务器的rabbitmq集群中:
rabbit-2:
rabbit-3:
命令有一个可选的参数
如果是内存节点,则所有的队列、交换器、绑定关系、用户、访问权限和 vhost 的元数据都将存储在内存中,如果是磁盘节点,则存储在磁盘中。
内存节点可以有更高的性能,但其重启后所有配置信息都会丢失,因此RabbitMQ 要求在集群中至少有一个磁盘节点,其他节点可以是内存节点。
当内存节点离开集群时,它可以将变更通知到至少一个磁盘节点;然后在其重启时,再连接到磁盘节点上获取元数据信息。
除非是将 RabbitMQ 用于 RPC 这种需要超低延迟的场景,否则在大多数情况下,RabbitMQ 的性能都是够用的,可以采用默认的磁盘节点的形式。
另外,如果节点以磁盘节点的形式加入,则需要先使用 命令进行重置,然后才能加入现有群集,重置节点会删除该节点上存在的所有的历史资源和数据。
采用内存节点的形式加入时可以略过 这一步,因为内存上的数据本身就不是持久化的。
6. 在rabbit-1服务器上确认rabbitmq集群的信息:
1. 创建用户
2. 创建vhost
3. 分配权限
4. 赋予admin权限
5. 用户zat分配vhost zat的用户许可证
6. 登入RabbitMQ管理控制台
- 設置
在rabbit-1节点上执行:
命令說明:针对指定vhost(zat)下的queue进行设置为镜像队列,即队列会被复制到集群各个节点,各个集群节点交换机、队列、队列内容都保持一致。
- 複製系統
在上面我们指定了 ha-mode 的值为 all ,代表消息会被同步到所有节点的相同队列中。这里我们之所以这样配置,因为我们本身只有三个节点,因此复制操作的性能开销比较小。
如果你的集群有很多节点,那么此时复制的性能开销就比较大,此时需要选择合适的复制系数。通常可以遵循过半写原则,即对于一个节点数为 n 的集群,只需要同步到 n/2+1 个节点上即可。
此时需要同时修改镜像策略为 exactly,并指定复制系数 ha-params,示例命令如下:
- 驗證
1、在rabbit-1節點增加一個隊列(在vhost下):mirror_queue_test
2、查看mirror_queue_test隊列的列表信息:
3、在列表信息點擊mirror_queue_test,查看它的詳細信息:
注:上圖中該隊列使用了策略(ha-allqueue),有2個鏡像節點(rabbit@rabbit63、rabbit@rabbit66)
4、驗證完成後,在詳細信息介面中,刪除mirror_queue_test隊列:
以上介绍的集群搭建的过程就是服务扩容的过程,如果想要进行服务缩容,即想要把某个节点剔除集群,有两种可选方式:
第一种:可以先使用 rabbitmqctl stop 停止该节点上的服务,然后在其他任意一个节点上执行
这里以剔除 rabbit-3 上的服务为例,此时可以在 rabbit-1 或 2 上执行下面的命令:
第二种:先使用 停止该节点上的服务,然后再执行
没有一个直接的命令可以关闭整个集群,需要逐一进行关闭。但是需要保证在重启时,最后关闭的节点最先被启动。
如果第一个启动的不是最后关闭的节点,那么这个节点会等待最后关闭的那个节点启动,默认进行 10 次连接尝试,超时时间为 30 秒,如果依然没有等到,则该节点启动失败。
这带来的一个问题是,假设在一个三节点的集群当中,关闭的顺序为 node1,node2,node3,如果 node1 因为故障暂时没法恢复,此时 node2 和 node3 就无法启动。
想要解决这个问题,可以先将 node1 节点进行剔除,命令如下:
此时需要加上 参数,它允许节点在自身没有启动的情况下将其他节点剔除。
停止服务:
停止进程:
查看进程状态kill 掉erlang相关进程:
卸载MQ:
卸载erlang:
删除相关文件:
到此这篇enoent解决办法rabbitmq(rabbitmq work queue)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/43054.html