RabbitMQ集群中节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点。
2.普通模式(默认)
对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。
应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。
3.镜像模式
与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。
应用场景:可靠性要求较高场合,如下单、库存队列。
缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。
PS:(1)镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列。(2)若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能会重复消费。
yum install epel-release
rpm -ivh https://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm
sudo yum install erlang
erl -v
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
rpm -ivh https://bintray.com/rabbitmq/rabbitmq-server-rpm/download_file?file_path=rabbitmq-server-3.7.4-1.el7.noarch.rpm
PS:安装过程中提示socat被rabbitmq-server依赖,故需要先安装socat
yum install socat
rabbitmq-server -detached 或者
rabbitmq-server start
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user mq 123456
rabbitmqctl set_user_tags mq administrator
1.集群配置
编号 IP 宿主OS 硬件配置 hostname 1 192.*.*.147 CentOs 7.4.1708 CPU:4core,Inter i5-4590,3.3GHz
Memory:16G
rabbit1 2 192.*.*140 CentOs 7.4.1708 CPU:4core,Inter i5-4590,3.3GHz
Memory:8G
rabbit2 3 192.*.*.6 CentOs 7.4.1708 CPU:4core,Inter i5-4570,3.2GHz
Memory:16G
rabbit3 PS:需要保证各节点通过hostname可以ping通
可修改/etc/hosts
2.普通集群
erlang分布式的每个节点上要保持相同的.erlang.cookie文件,文件路径: /var/lib/rabbitmq/.erlang.cookie
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit1 --ram
rabbitmqctl start_app
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
PS:若希望修改节点类型,则(需要先Stop)
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
3.镜像集群
RabbitMQ提供"ha-mode"和"ha-params(可选)",组合情况如下:
- Policy(各节点均会同步)
- 配置
有两种配置方式:rabbitmqctl或者Rabbit Management,如
rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}' rabbitmqctl set_policy productsyncinfo-ha ".*\.ProductSyncInfo\..*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
1.常用命令
rabbitmq-server -detached 启动RabbitMQ节点
rabbitmqctl start_app 启动RabbitMQ应用,而不是节点
rabbitmqctl stop_app 停止
rabbitmqctl status 查看状态
rabbitmqctl add_user mq 123456
rabbitmqctl set_user_tags mq administrator 新增账户
rabbitmq-plugins enable rabbitmq_management 启用RabbitMQ_Management
rabbitmqctl cluster_status 集群状态
rabbitmqctl forget_cluster_node rabbit@rabbit3 节点摘除
rabbitmqctl reset application重置
在搭建集群过程中,若节点异常退出且无法再次加入集群时:
(1)rm /var/lib/rabbitmq/mnesia--->该文件夹保存着集群信息;
(2)rabbitmq-service stop--->若未执行第一步,会提示异常;
{"init terminating in do_boot",{error,{inconsistent_cluster,"Node rabbit@rabbit2 thinks it's clustered with node rabbit@rabbit3, but rabbit@rabbit3 disagrees"}}} init terminating in do_boot ({error,{inconsistent_cluster,Node rabbit@rabbit2 thinks it's clustered with node rabbit@rabbit3, but rabbit@rabbit3 disagrees}})
(3)在节点(rabbit1)中摘除该节点;
(4)重启RabbitMQ,并加入集群。