搭建集群环境
逐步了解搭建多节点 RabbitMQ 集群的过程。配置节点协同工作并共享状态,以提高可用性。
搭建集群环境 是 CoddyKit 上的免费 RabbitMQ Messaging & Async Systems 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 RabbitMQ Messaging & Async Systems 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 RabbitMQ Messaging & Async Systems 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Ready to Cluster RabbitMQ?
In the previous lesson, we learned about RabbitMQ clustering concepts. Now, let's get practical! We'll walk through the essential steps to set up a multi-node RabbitMQ cluster.
Building a cluster helps your messaging system become more robust and highly available. This means less downtime and more reliable message delivery.
Erlang's Secret Handshake
RabbitMQ nodes are built on Erlang, and they communicate using a shared secret called the Erlang cookie. Think of it as a password that allows nodes to trust each other.
- Each RabbitMQ node has its own cookie file (
~/.erlang.cookieor/var/lib/rabbitmq/.erlang.cookie). - For nodes to form a cluster, they MUST have identical Erlang cookies.
- If cookies don't match, nodes won't be able to communicate or cluster.
Syncing Your Cookies
To ensure nodes can cluster, you need to copy the Erlang cookie from one node to all other nodes in the cluster. Choose one node as the 'source' for the cookie.
Here's how you typically do it (replace node2 with your actual node name/IP):
# On Node 1 (source)
sudo cp /var/lib/rabbitmq/.erlang.cookie /tmp/erlang.cookie.bak
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/.erlang.cookie
# On Node 2 (destination)
# Ensure permissions are correct
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookieHalt Before You Cluster
Before a node can join an existing cluster or form a new one, its RabbitMQ application must be stopped. This ensures a clean state for the clustering operation.
You'll use the rabbitmqctl stop_app command. This stops the RabbitMQ application but leaves the Erlang VM running.
# On Node 2 (the node joining the cluster)
sudo rabbitmqctl stop_appBringing Nodes Together
With the cookie synced and the app stopped, a node can now join the cluster. You'll specify the name of an existing node in the cluster to join.
Use the rabbitmqctl join_cluster <cluster_node_name> command. The cluster_node_name is usually in the format rabbit@hostname.
# On Node 2 (the node joining)
# Assuming Node 1 is 'rabbit@node1'
sudo rabbitmqctl join_cluster rabbit@node1Restarting the Engines
After a node successfully joins the cluster, you need to start its RabbitMQ application again. It will now operate as part of the cluster.
Use the rabbitmqctl start_app command to bring the RabbitMQ application back online.
# On Node 2 (the node that joined)
sudo rabbitmqctl start_appCheck Your Cluster's Health
It's crucial to verify that all nodes have successfully joined the cluster. The rabbitmqctl cluster_status command shows you the current state of your cluster.
It lists all active nodes, their types (disk or RAM), and other important cluster information.
# On any node in the cluster
sudo rabbitmqctl cluster_statusDisk vs. RAM Nodes
When setting up a cluster, you might encounter disk nodes and RAM nodes. This refers to how a node stores its metadata (like queue definitions, exchange bindings, user data).
- Disk nodes: Store metadata persistently on disk. At least one disk node is required in a cluster.
- RAM nodes: Store metadata only in memory. They are faster but lose metadata on restart if not connected to a disk node.
- Most production clusters use all disk nodes for simplicity and resilience.
Starting Fresh with Reset
Sometimes, a node might fail to join a cluster, or you might want to remove it and add it to a different cluster. In such cases, you can reset the node.
The rabbitmqctl reset command purges all data and state from a node, making it ready to be joined to a new or existing cluster.
# On the node to be reset
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_appCluster Setup Check
You're setting up a RabbitMQ cluster. You've installed RabbitMQ on two servers, Node A and Node B. You've copied the Erlang cookie from Node A to Node B.
What is the next essential step on Node B before it can successfully join Node A's cluster?
Cluster Setup Summary
Great job! You've learned the practical steps to set up a RabbitMQ cluster. We covered:
- The importance of the Erlang cookie for node authentication.
- How to stop, join, and start RabbitMQ applications.
- Using
rabbitmqctl cluster_statusto verify your cluster. - Briefly understanding disk and RAM nodes.
- How to reset a node for a fresh start.
Next, we'll explore how to make your queues highly available using mirrored queues!
常见问题解答
「搭建集群环境」课时是免费的吗?
是的 — 「搭建集群环境」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 RabbitMQ Messaging & Async Systems 课程的其余内容,请升级到 CoddyKit PRO。 RabbitMQ Messaging & Async Systems 课程共包含 4 节课。
「搭建集群环境」这节课中我会学到什么?
逐步了解搭建多节点 RabbitMQ 集群的过程。配置节点协同工作并共享状态,以提高可用性。 你通过在浏览器中直接运行的动手代码来练习 RabbitMQ Messaging & Async Systems,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 RabbitMQ Messaging & Async Systems 需要有经验吗?
无需任何先前经验。CoddyKit 上的 RabbitMQ Messaging & Async Systems 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「搭建集群环境」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 RabbitMQ Messaging & Async Systems 课中编写并运行代码吗?
能。每节 RabbitMQ Messaging & Async Systems 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。