美文网首页
十、单机搭建RabbitMQ集群

十、单机搭建RabbitMQ集群

作者: lancelea | 来源:发表于2019-12-11 16:17 被阅读0次

    设置 RabbitMQ 集群是非常简单的。简单到可以在你的开发系统中设置完整功能的集群。这对于在测试环境测试实际生产中遇到的失败场景是很便利的。现在来动手搭建 RabbitMQ 集群吧。

    Step 1:关闭节点,关闭插件

    • 关闭节点
      在开始配置集群前,需要首先确保现存的 Rabbit 没有运行。如果需要关闭节点的话,则移动到 RabbitMQ 安装目录,然后运行./sbin/rabbitmqctl stop

    • 关闭插件
      我们尚未讨论RabbitMQ插件,不过有可能你已经启用了一部分插件了。如果确实如此的话,你需要在启动集群节点前将插件禁用。这是因为像 RabbitMQ Management 这样的插件会监听专门的端口来提供服务。我们还没有讲到如何设置插件监听不同的端口,所以当第二个和之后的节点启动了它们的插件,就会和第一个启动节点的插件相冲突,然后节点就都崩溃了。

    Step 2:启动节点

    如果不用额外参数的话,使用rabbitmqserver命令启动节点会默认使用节点名称rabbit和监听端口号5672。如果你尝试在同台机器用这个方法启动其他节点的话,就会因为节点名称和端口冲突导致启动失败。因此在每次调用rabbitmq-server命令前,我们通过设置RABBITMQ_NODENAMERABBITMQ_NODE_PORT环境变量来明确指定唯一的节点名称和端口号。

    #启动第一个节点
    $ RABBITMQ_NODENAME=rabbit_one RABBITMQ_NODE_PORT=5672 ./sbin/rabbitmq-server -detached
    
    #启动第二个节点
    $ RABBITMQ_NODENAME=rabbit_two RABBITMQ_NODE_PORT=5673 ./sbin/rabbitmq-server -detached
    
    #启动第三个节点
    $ RABBITMQ_NODENAME=rabbit_three RABBITMQ_NODE_PORT=5674 ./sbin/rabbitmq-server -detached
    

    现在在开发系统上运行着三个 Rabbit 节点,分别是 rabbit_one、rabbit_two 和 rabbit_three,每个节点都会有系统的主机名,添加在@后。但是每个节点仍然是独立节点,拥有自己的元数据,并且不知道其他节点的存在。

    设置集群

    集群中的第一个节点将初始元数据带入集群中,并且无须被告知加入。而第二个和之后的节点将加入它并且获取它的元数据。

    要加入第二个和第三个节点,首先需要停止 Erlang 节点上运行的 RabbitMQ 应用程序,并重设(清空)它们的元数据。这样它们才可以被加入并且获取集群的元数据。rabbitmqctl 工具会帮你和每个节点通信并完成以上的任务。

    • 停止第二个节点上的RabbitMQ应用程序
    $ ./sbin/rabbitmqctl -n rabbit_two@localhost stop_app
    
    关闭应用程序反馈信息
    • 要重设第二个节点的元数据和状态为清空的状态
    $ ./sbin/rabbitmqctl -n rabbit_two@localhost reset
    
    清空节点状态反馈信息
    • 将第二个节点加入到第一个集群节点
    ./sbin/rabbitmqctl -n rabbit_two@localhost join_cluster rabbit_one@localhost --ram
    
    加入集群反馈信息
    -n参数指定任何RabbitMQ节点,不管是在你的开发系统上或者是网络上任何可以连接的其他系统上。
    --ram指定为内存节点

    disc:磁盘节点;ram:内存节点

    • 重新启动第二个节点的应用程序
    $ ./sbin/rabbitmqctl -n rabbit_one@localhost start_app
    
    加入集群后启动应用程序反馈信息
    • 查看 RabbitMQ 集群状态
    ./sbin/rabbitmqctl -n rabbit_one cluster_status
    
    集群状态信息

    注意:记住 Erlang 节点间通过认证 Erlang cookie 的方式来允许互相通信。因为 rabbitmqctl 使用 Erlang OTP 通信机制来和 Rabbit 节点通信,运行 rabbitmqctl 的机器和所要连接的 Rabbit 节点必须使用相同的 Erlang cookie。否则会遇到错误。

    现在使用相同的命令将第三个节点加入到集群当中,唯一不同的是-n参数指定为第三个节点。之后可以连接到这三个节点中的任何一个,并且开始创建队列,发布消息或者执行其他任何AMQP任务。

    相关文章

      网友评论

          本文标题:十、单机搭建RabbitMQ集群

          本文链接:https://www.haomeiwen.com/subject/iixgyctx.html