rabbitmq官方推荐的启动方式是通过docker进行启动。因为不用安装Erlang语音等环境
rabbitmq官网:https://www.rabbitmq.com/download.html
docker run -it --rm -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
这是官方的例子
普通集群
#节点一,主节点,创建-v映射目录 docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management #节点二,创建-v映射目录 docker run -d --hostname rabbit_host2 --name rabbitmq2 -p 15673:15672 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/2/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/2/log:/var/log/rabbitmq rabbitmq:management #节点三,创建-v映射目录 docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 15674:15672 -p 5674:5672 --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie' --privileged=true -v /usr/local/rabbitmq/3/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/3/log:/var/log/rabbitmq rabbitmq:management
参数说明:
--hostname 自定义Docker容器的 hostname --link 容器之间连接,link不可或缺,使得三个容器能互相通信 --privileged=true 使用该参数,container内的root拥有真正的root权限,否则容器出现permission denied -v 宿主机和容器路径映射 参数 RABBITMQ_NODENAME,缺省 Unix*: rabbit@$HOSTNAME 参数 RABBITMQ_DEFAULT_USER=admin 参数 RABBITMQ_DEFAULT_PASS=xdclass.net168 Erlang Cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_COOKIE 参数的值必须相同, 相当于不同节点之间通讯的密钥,erlang.cookie是erlang的分布式token文件,集群内各个节点的erlang.cookie需要相同,才可以互相通信
上面是启动了三个节点,就是三个rabbitmq,但仍没有形成集群。
节点一配置集群 docker exec -it rabbitmq1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit 节点二加入集群,--ram是以内存方式加入,忽略该参数默认为磁盘节点。 docker exec -it rabbitmq2 bash rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@rabbit_host1 rabbitmqctl start_app exit 节点三加入集群,--ram是以内存方式加入,忽略该参数默认为磁盘节点。 docker exec -it rabbitmq3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit_host1 rabbitmqctl start_app exit #查看集群节点状态,配置启动了3个节点,1个磁盘节点和2个内存节点 rabbitmqctl cluster_status
上述步骤完成后就配置好普通集群了。
集群分为两类:普通集群和镜像集群。
相同点:都拥有各个节点的元数据信息。
不同点:镜像集群会复制各个节点的交换机、队列和信息。而普通集群仅仅拥有交换机和队列,信息不会进行复制,即拥有信息的节点一旦宕机,集群内部就无法消费该信息。
去到rabbitmq控制台,一般是:ip地址:15672
Admin->Policies
参数说明:
ha-mode:同步节点模式 - all:全部 - exactly:设置同步节点数 - nodes:设置特定同步节点,用配置ha-params说明 ha-sync-mode:同步模式 - manual:手动 - automatic:自动 一般如同所示设置即可
完成后,就完成rabbitmq多节点的部署了。