在 CentOS7 上建立 RabbitMQ Cluster

新功能上線會用到 RabbitMQ,為了可以在效能與成本間取得平衡,所以打算做個效能測試,看什麼水準的硬體才能符合新功能的效能需要,在建立環境時才發現我沒有筆記過 在 CentOS7 上建立 RabbitMQ Cluster,所以趕緊補上

基本環境說明

  1. Azure VM (CentOS 7.9 Free-Gen1;Standard_B2s) * 3

設定方式

  1. 安裝 RabbitMQ

    執行對象:每一個 node

    sudo yum -y install epel-release && sudo yum update -y && sudo yum install -y rabbitmq-server
    
  2. 建立 RabbitMQ service

    執行對象:每一個 node

    sudo systemctl enable rabbitmq-server
    

    1symlink

  3. 在 RabbitMQ master node 上啟動 RabbitMQ 並取得 erlang cookie

    執行對象:master node

    sudo systemctl start rabbitmq-server &&  sudo cat /var/lib/rabbitmq/.erlang.cookie
    

    2startandcookie

  4. 將 RabbitMQ master node 的 erlang cookie 複製至 RabbitMQ slave 並給予 erlang cookie 正確權限

    執行對象:slave node

    sudo echo {master 的 erlang cookie} > /var/lib/rabbitmq/.erlang.cookie && sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie && sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
    

    3setcookie

  5. 啟動 RabbitMQ slave node 上的 RabbitMQ

    執行對象:slave node

    sudo systemctl start rabbitmq-server
    
  6. 取得 RabbitMQ master node 的 hostname

    執行對象:master node

    RabbitMQ 是透過 node name 來識別 node,而 node name 由 {prefix}@{hostname} 組成 ( prefix 通常為 rabbit),詳細說明請參考 Clustering Guide

    sudo hostname
    
  7. 將 RabbitMQ slave node 加入 RabbitMQ master 中組成 cluster

    執行對象:slave node

    sudo rabbitmqctl stop_app && sudo rabbitmqctl join_cluster --ram rabbit@{hostname} && sudo rabbitmqctl start_app 
    

    4joincluster

  8. 檢查 cluster 狀態

    執行對象:任一 node

    sudo rabbitmqctl cluster_status
    

    5clusterstatus

心得

官網的文件可能是需要兼容不同 os,使用上總覺得不太順手,照著做常會卡關

雖然安裝步驟並不複雜就懶得筆記,但幾次下來還是沒能完全記得所有流程與步驟,不免東漏西漏,想了想決定花點時間筆記一下,日後自己用起來也方便些

參考資訊

  1. How To Setup RabbitMQ Cluster On Centos 7
  2. Clustering Guide