RabbitMQ HA + CentOS 建立

  • 1232
  • 0

使用Rabbitmq 建立cluster 跟HA 在CentOS上,原本以為會很容易的,但是第一次操作完後就掛點了,後來只好再一次,而且這次有紀錄所有使用的Linux語法跟HAProxy 會遇到的問題。

目標: 建立兩個node 做cluster,再用鏡像方式做HA,RabbitMQ官方HA就是這樣,一開始我也納悶,每個node可以設定RAM模式或是Disk模式,差異就是寫在disk 跟RAM,一個效能快,一個永久。

  • config位置:

    • CentOs- $RABBITMQ_HOME/etc/rabbitmq/

    • Windows - %APPDATA%\RabbitMQ\

  • 更改hostname

    • hostnamectl set-hostname [NAME]

    • hostnamectl status 查狀態

  • 當我用了join node後,第一台的node就起不來了,GG,重新來過,後來才成功,查看以下操作語法。

 

  1. yum update

  2. systemctl disable firewalld

  3. systemctl stop firewalld

  4. setenforce 0

  5. hostname rabbit1 這個改完重新開機就不見

  6. hostnamectl set-hostname [NAME]

  7. add rabbit2 to rabbit1的/etc/hosts檔案

  8. add rabbit1 to rabbit2的/etc/hosts檔案

  9. ping rabbit2 測試有無通

  10. yum -y install epel-release

  11. yum install rabbitmq-server -y

  12. rabbitmq从3.3.0開始禁止使用guest/guest權限通過除localhost外的訪問,可以使用vhost方式(這篇裡面有使用,同一作者的HA篇),或是像是下面這步改cofnig

  13. 修改/etc/rabbitmq/rabbitmq.config讓guest可以remote進入,記得不要留逗點

  14. systemctl restart rabbitmq-server 確認可否重啟

  15. systemctl enable rabbitmq-server 加入服務

  16. rabbitmqctl status 確認版本跟狀態

  17. 複製erlang.cookie檔案,UI見面看不到該檔案,要使用terminal語法 scp /var/lib/rabbitmq/.erlang.cookie root@rabbit2:/var/lib/rabbitmq/

  18. 會需要輸入rabbit2的root密碼,

  19. 建立cluster,去@rabbit2 打語法 rabbitmqctl stop_app,,如果出現錯誤訊息unable to connect to node rabbit@localhost: nodedown,就重新開機。

  20. rabbitmqctl join_cluster rabbit@rabbit1

  21. optional: 如果是要使用內存節點: rabbitmqctl join_cluster --ram rabbit@queue,內建default是磁盤結點

  22. 重啟 rabbitmqctl start_app

  23. 檢查兩台的cluster node

  24. 回去@Rabbit1開啟HA Mode(鏡像),語法rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}',

  25. 建立Management plugin,語法rabbitmq-plugins enable rabbitmq_management

  26. 重新啟動,systemctl restart rabbitmq-server

  27. 完成,一台是Rabbit1,一台是Rabbit2

  28. 補充: 官方網址

    1. RabbitMQ的配置文件為:/etc/rabbitmq/rabbitmq.config

    2. RabbitMQ的環境配置文件為:/etc/rabbitmq/rabbitmq-env.conf

  29. 建立HAProxy: 在建立一台CentOS,參考這篇

  30. yum install haproxy -y

  31. hostnamectl set-hostname haproxy

  32. vim /etc/hosts 裡面加入

    1. 192.168.163.165 rabbit2

    2. 192.168.163.166 rabbit1

    3. 192.168.163.167 haproxy

  33. scp /etc/hosts 192.168.42.152:/etc/ 確認另外兩個機器上,都有相同hosts加入,會需要輸入帳密

  34. 然後rabbit1跟rabbit2如果是按照上面一直坐下來,hostname也應該設定好了

  35. 修改haproxy.cfg文件,我是複製這份來改。

  36. 遇到一些地雷,終於把haproxy.cfg改好:

  37. Trouble Shooting:

  38. 錯誤訊息前三條是說,需要使用Http mode,所以config的Default mode我改成http

  39. 再來是0.0.0.0:15672 不能bind,那是因為已經有人佔用了,查詢哪個占用,使用語法:

    1. netstat -anp|grep 15672 查詢這15672 port誰占用

    2. ps aux|grep 956 查詢哪個application在運作這pid

    3. 結果查到市Rabbitmq再用,因為我是複製另一個Centos的關係,所以先關閉RabbitMQ,語法: rabbitmqctl stop

    4. 在重啟haproxy,語法: systemctl restart haproxy

    5. 看狀態,語法: service haproxy status -i

 

Source: https://www.rabbitmq.com/ha.html