本文介绍: 这样够不成高可用,如果这个节点挂掉的话,则这个队列数据还是不可以消费的,也无法往这个队列发送数据。经过上方步骤构成的集群一个普通的集群,只是队列中的元数据共享,而队列中的数据是具体保存到某个节点上的。在默认虚拟主机(/)所有的队列配置镜像队列。六、rabbitmq节点移除及重新加入hs-qdou-rmqx-003。最后关闭必须是磁盘节点,不然可能回造成集群启动失败数据丢失异常情况。创建镜像队列发现,队列在所有的节点上都存在。集群重启顺序固定的,并且是相反的。

一、erlang rpm下载安装

#rabbitmq对应erlang版本说明
https://www.rabbitmq.com/which-erlang.html

#rabbitmq提供的erlang安装包
https://github.com/rabbitmq/erlang-rpm/releases
#文件名
erlang-23.3.2-1.el7.x86_64.rpm

rpm -Uvh erlang-23.3.2-1.el7.x86_64.rpm
erl -version

二、rabbitmq rpm安装包下载安装

https://github.com/rabbitmq/rabbitmq-server/releases

rabbitmq-server-3.8.14-1.el7.noarch.rpm

rpm -ivh  rabbitmq-server-3.8.14-1.el7.noarch.rpm
whereis rabbitmqctl
which rabbitmq

systemctl start rabbitmq-server
systemctl status rabbitmq-server
systemctl enable rabbitmq-server

三、rabbitmq 15672 web控制台打开管理员用户创建

#启用web控制台
rabbitmq-plugins enable rabbitmq_management

#创建admin用户,密码也是admin
rabbitmqctl add_user admin 123456

#给用户赋予administrator角色
rabbitmqctl set_user_tags admin administrator

#给用户在虚拟主机/上赋予所有权限
rabbitmqctl  set_permissions -p / admin '.*' '.*' '.*'

web浏览器打开 http://hostip:15672,即可登录web控制台

五、rabbitmq普通集群搭建

#3台机器查看单机版rabbitmq-server状态
systemctl status rabbitmq-server


#3台机器
vim /etc/hosts
192.168.14.242 hs-qdou-rmqx-001
192.168.14.243 hs-qdou-rmqx-002
192.168.14.244 hs-qdou-rmqx-003

#3台机器
systemctl stop rabbitmq-server

#hs-qdou-rmqx-001上操作
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.14.243:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.14.244:/var/lib/rabbitmq/.erlang.cookie

#hs-qdou-rmqx-002、hs-qdou-rmqx-003 .erlang.cookie权限
chmod 600 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie


#hs-qdou-rmqx-001上创建集群
rabbitmq-server -detached
可以查看/var/log/rabbitmq/rabbit@hs-qdou-rmqx-001.log这个日志文件是否启动成功。

#放行集群通讯端口bash复制代码firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=4369/tcp --permanent
firewall-cmd --zone=public --add-port=25672/tcp --permanent

#hs-qdou-rmqx-002加入hs-qdou-rmqx-001
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hs-qdou-rmqx-001
rabbitmqctl start_app

#hs-qdou-rmqx-003加入hs-qdou-rmqx-002
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hs-qdou-rmqx-002
rabbitmqctl start_app

#查看集群是否构建完成 3台机器
rabbitmqctl cluster_status

六、rabbitmq节点移除及重新加入:hs-qdou-rmqx-003

1、003节点停止rabbitmq-server服务
rabbitmqctl stop

2、001节点或002节点忘记003节点
rabbitmqctl forget_cluster_node rabbit@hs-qdou-rmqx-002

3、003节点启动rabbitmq-server
systemctl start rabbitmq-server
报错信息:Node 'rabbit@hs-qdou-rmqx-003' thinks it's clustered with node 'rabbit@hs-qdou-rmqx-002'
删除/var/lib/rabbitmq/mnesia后再次启动

4、003节点查看集群状态
rabbitmqctl cluster_status
Cluster status of node rabbit@hs-qdou-rmqx-003 ...
Basics

Cluster name: rabbit@hs-qdou-rmqx-003

Disk Nodes

rabbit@hs-qdou-rmqx-003

Running Nodes

rabbit@hs-qdou-rmqx-003

Versions

rabbit@hs-qdou-rmqx-003: RabbitMQ 3.8.14 on Erlang 23.3.2

5、003节点重新加入
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hs-qdou-rmqx-002
rabbitmqctl start_app

6、003节点查看集群状态
rabbitmqctl cluster_status
Cluster status of node rabbit@hs-qdou-rmqx-003 ...
Basics

Cluster name: rabbit@hs-qdou-rmqx-001

Disk Nodes

rabbit@hs-qdou-rmqx-001
rabbit@hs-qdou-rmqx-002
rabbit@hs-qdou-rmqx-003

Running Nodes

rabbit@hs-qdou-rmqx-001
rabbit@hs-qdou-rmqx-002
rabbit@hs-qdou-rmqx-003

Versions

rabbit@hs-qdou-rmqx-001: RabbitMQ 3.8.14 on Erlang 23.3.2
rabbit@hs-qdou-rmqx-002: RabbitMQ 3.8.14 on Erlang 23.3.2
rabbit@hs-qdou-rmqx-003: RabbitMQ 3.8.14 on Erlang 23.3.2

# rabbitmqctl change_cluster_node_type {disc|ram}

七、配置镜像集群

1、普通集群
经过上方步骤构成的集群是一个普通的集群,只是队列中的元数据共享,而队列中的数据是具体保存到某个节点上的。
这样够不成高可用,如果这个节点挂掉的话,则这个队列的数据还是不可以消费的,也无法往这个队列中发送数据。那么如果解决这个问题呢,答案使用镜像队列集群。

2、镜像队列集群
默认虚拟主机(/)所有的队列都配置镜像队列。(ha-all只是取的名字)

rabbitmqctl set_policy --vhost / ha-all "^" '{"ha-mode":"all"}'

创建完镜像队列后发现,队列在所有的节点上都存在

镜像队列的高级用法参考官方文档 www.rabbitmq.com/ha.html

八、rabbitmq延时队列

#插件下载地址
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases


cp rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.14/plugins/

#启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

#创建交换器:  
rabbitmqadmin declare exchange name=delayed_exchange type=x-delayed-message arguments='{"x-delayed-type":"direct"}'

九、集群重启顺序
集群重启顺序固定的,并且是相反的。 如下
启动顺序:磁盘节点 => 内存节点
关闭顺序:内存节点 => 磁盘节点
最后关闭必须是磁盘节点,不然可能回造成集群启动失败、数据丢失异常情况。

十、集群节点内存上限及性能调优

rabbitmqctl eval 'application:get_env(rabbit, vm_memory_high_watermark).'

rabbitmqctl list_policies

rabbitmqctl status

参考
https://www.cnblogs.com/jojop/p/14091534.html

https://emacsist.github.io/2016/12/01/rabbitmq%E4%B8%AD%E7%9A%84%E5%86%85%E5%AD%98%E4%B8%8E%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6/

十一、rabbitmq集群升级相关
https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.35
https://github.com/rabbitmq/rabbitmq-server/tags?after=v3.11.0
https://www.rabbitmq.com/versions.html
https://www.rabbitmq.com/changelog.html

十二、惰性队列设置

rabbitmqctl set_policy Lazy ".*" '{"queue-mode":"lazy"}' --apply-to queues

https://juejin.cn/post/7038785930844454925
https://juejin.cn/post/7039202722985443342

https://juejin.cn/post/7292975731046531098?searchId=20231117135314227D2CC0341E0CCD2158

https://juejin.cn/post/7297624623906390031?searchId=20231117135314227D2CC0341E0CCD2158

https://linyishui.top/2020100201.html

原文地址:https://blog.csdn.net/u012160319/article/details/134712071

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22548.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注