使用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,重新來過,後來才成功,查看以下操作語法。
-
yum update
-
systemctl disable firewalld
-
systemctl stop firewalld
-
setenforce 0
-
hostname rabbit1 這個改完重新開機就不見
-
hostnamectl set-hostname [NAME]
-
add rabbit2 to rabbit1的/etc/hosts檔案
-
add rabbit1 to rabbit2的/etc/hosts檔案
-
ping rabbit2 測試有無通
-
yum -y install epel-release
-
yum install rabbitmq-server -y
-
rabbitmq从3.3.0開始禁止使用guest/guest權限通過除localhost外的訪問,可以使用vhost方式(這篇裡面有使用,同一作者的HA篇),或是像是下面這步改cofnig
-
修改/etc/rabbitmq/rabbitmq.config讓guest可以remote進入
,記得不要留逗點
-
systemctl restart rabbitmq-server 確認可否重啟
-
systemctl enable rabbitmq-server 加入服務
-
rabbitmqctl status 確認版本跟狀態
-
複製erlang.cookie檔案,UI見面看不到該檔案,要使用terminal語法 scp /var/lib/rabbitmq/.erlang.cookie root@rabbit2:/var/lib/rabbitmq/
-
會需要輸入rabbit2的root密碼,
-
建立cluster,去@rabbit2 打語法 rabbitmqctl stop_app,
,如果出現錯誤訊息unable to connect to node rabbit@localhost: nodedown,就重新開機。
-
rabbitmqctl join_cluster rabbit@rabbit1
-
optional: 如果是要使用內存節點: rabbitmqctl join_cluster --ram rabbit@queue,內建default是磁盤結點
-
重啟 rabbitmqctl start_app
-
檢查兩台的cluster node
-
回去@Rabbit1開啟HA Mode(鏡像),語法rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}',
-
建立Management plugin,語法rabbitmq-plugins enable rabbitmq_management
-
重新啟動,systemctl restart rabbitmq-server
-
完成,一台是Rabbit1,一台是Rabbit2。
-
補充: 官方網址
-
RabbitMQ的配置文件為:/etc/rabbitmq/rabbitmq.config
-
RabbitMQ的環境配置文件為:/etc/rabbitmq/rabbitmq-env.conf
-
-
建立HAProxy: 在建立一台CentOS,參考這篇
-
yum install haproxy -y
-
hostnamectl set-hostname haproxy
-
vim /etc/hosts 裡面加入
-
192.168.163.165 rabbit2
-
192.168.163.166 rabbit1
-
192.168.163.167 haproxy
-
-
scp /etc/hosts 192.168.42.152:/etc/ 確認另外兩個機器上,都有相同hosts加入,會需要輸入帳密
-
然後rabbit1跟rabbit2如果是按照上面一直坐下來,hostname也應該設定好了
-
修改haproxy.cfg文件,我是複製這份來改。
-
遇到一些地雷,終於把haproxy.cfg改好:
-
Trouble Shooting:
-
錯誤訊息前三條是說,需要使用Http mode,所以config的Default mode我改成http
-
再來是0.0.0.0:15672 不能bind,那是因為已經有人佔用了,查詢哪個占用,使用語法:
-
netstat -anp|grep 15672 查詢這15672 port誰占用
-
ps aux|grep 956 查詢哪個application在運作這pid
-
結果查到市Rabbitmq再用,因為我是複製另一個Centos的關係,所以先關閉RabbitMQ,語法: rabbitmqctl stop
-
在重啟haproxy,語法: systemctl restart haproxy
-
看狀態,語法: service haproxy status -i
-
Source: https://www.rabbitmq.com/ha.html