RabbitMQ版本界面:html
RabbitMQ Erlang版本兼容:http://www.rabbitmq.com/which-erlang.htmljava
Erlang各版本下載界面:http://erlang.org/download/node
yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel openssl-devel zlib-devel -y
tar -zxf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix=/opt/erlang/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac make && make install
export ERL_HOME=/usr/local/erlang export PATH=${JAVA_HOME}/bin:${ERL_HOME}/bin:$PATH
source /etc/profilegit
>erlgithub
xz -d rabbitmq-server-generic-unix-3.6.16.tar.xz tar -xf rabbitmq-server-generic-unix-3.6.16.tar.xz mv -r rabbitmq_server-3.6.16 /usr/local/rabbitmq-3.6.16
準備三臺服務器並配置hosts(/etc/hosts):web
192.168.21.191 vm1 192.168.21.189 vm2 192.168.21.190 vm3
配置host名稱(/etc/sysconfig/network):bash
HOSTNAME=vm1
本身編譯安裝的rabbitmq 在第一次啓動rabbitmq的時候.erlang.cookie纔會生成服務器
在搭建RabbitMQ集羣的時候每每會由於.erlang.cookie而報各類錯誤,網上查資料也會常常說.erlang.cookie會在$home下,或者在/var/lib/rabbitmq下,到底在rabbitmq啓動的時候用的哪一個cookie,cookie存放的路徑在哪裏,那麼下面咱們來仔細的查證一下。cookie
erlang.cookie是erlang實現分佈式的必要文件,erlang分佈式的每一個節點上要保持相同的.erlang.cookie文件,同時保證文件的權限是400。app
官方在介紹集羣的文檔中提到過.erlang.cookie通常會存在這兩個地址:第一個是$home/.erlang.cookie;第二個地方就是/var/lib/rabbitmq/.erlang.cookie。
- 若是咱們使用解壓縮方式安裝部署的rabbitmq,那麼這個文件會在${home}目錄下,也就是$home/.erlang.cookie。
- 若是咱們使用rpm等安裝包方式進行安裝的,那麼這個文件會在/var/lib/rabbitmq目錄下。
使用-detached參數運行各節點:
rabbitmqctl stop rabbitmq-server -detached
而後能夠經過rabbitmqctl cluster_status查看節點狀態。PS:要先拷貝cookie到另外兩臺機器上,保證三臺機器上的cookie是一致的,而後再啓動服務。
因爲guest這個用戶,只能在本地訪問,因此咱們要新增一個用戶並賦予權限:
添加用戶並設置密碼:
rabbitmqctl add_user admin 123456
添加權限(使admin用戶對虛擬主機「/」 具備全部權限):
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
修改用戶角色(加入administrator用戶組)
rabbitmqctl set_user_tags admin administrator
而後就能夠遠程訪問了,而後可直接配置用戶權限等信息。到此,就能夠經過http://ip:15672 使用admin 123456 進行登錄了。
到這裏的話,每一個節點是做爲單獨的一臺RabbitMQ存在的,也能夠正常提供服務了
(3)組成集羣
rabbitmq-server啓動時,會一塊兒啓動節點和應用,它預先設置RabbitMQ應用爲standalone模式。要將一個節點加入到現有的集羣中,你須要中止這個應用,並將節點設置爲原始狀態。若是使用./rabbitmqctl stop,應用和節點都將被關閉。因此使用rabbitmqctl stop_app僅僅關閉應用。
將 vm二、vm3與 vm1 組成集羣,這裏以vm2爲例
vm2# rabbitmqctl stop_app
vm2# rabbitmqctl join_cluster rabbit@vm1 ####這裏集羣的名字必定不要寫錯了
vm2# rabbitmqctl start_app
將vm3重複上述操做,也加入vm1的集羣。
則此時 vm2 與 vm3 也會自動創建鏈接,集羣配置完畢;(PS:若是要使用內存節點,則可使用vm2 # rabbitmqctl join_cluster --ram rabbit@vm1加入集羣)集羣配置好後,能夠在 RabbitMQ 任意節點上執行 rabbitmqctl cluster_status 來查看是否集羣配置成功。
vm3# rabbitmqctl cluster_status
Cluster status of node rabbit@vm3 ... [{vms,[{disc,[rabbit@vm1,rabbit@vm2,rabbit@vm3]}]}, {running_vms,[rabbit@vm1,rabbit@vm2,rabbit@vm3]}, {cluster_name,<<"rabbit@vm1">>}, {partitions,[]}, {alarms,[{rabbit@vm1,[]},{rabbit@vm2,[]},{rabbit@vm3,[]}]}]
可知,集羣的名稱默認爲rabbit@vm1;
PS:另一種查看集羣是否成功的方式,在web頁面上的「Queues」的列表中,查看有以下顯示爲「同步鏡像到node2」,則也表示集羣配置成功
RabbitMQ腦裂問題:
如上圖紅色字體展現部分:Network partition detected ,Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data.
參考:
https://blog.csdn.net/wochunyang/article/details/52524977 https://www.cnblogs.com/taoge007/p/6208552.html https://blog.csdn.net/jxdl6655/article/details/78194191 https://www.cnblogs.com/kevingrace/p/8012792.html