1. 程式人生 > >rabbitmq編譯部署以及常見報錯

rabbitmq編譯部署以及常見報錯

ffline 主機 copy don sna 第一個 輸出 3.2 can

(一)源碼安裝Erlang
(1)下載erlang源碼包
wget http://www.erlang.org/download/otp_src_R13B04.tar.gz
(2)解壓縮erlang源碼包
tar -zxvf otp_src_R13B04.tar.gz
(3)安裝
./configure??--prefix=/usr/local/erlang
./make
./make install
如果拋出如下錯誤
No curses library functions found
請先安裝?curses library? ? ? ??
yum -y install ncurses-devel
在安裝otp時遇到了一點問題,整體的安裝過程比較簡單。

技術分享圖片

這裏我只需要解決APPLICATIONS DISABLED部分的問題:
1,安裝unixODBC和unixODBC-devel,解決第一個問題;
2,因為我這裏用不上Java編譯了,因此可以在configure時增加 –disable-javac 避免第二個錯誤;

./configure --prefix=/usr/local/erlang --disable-javac
make && make install

定義環境變量 [root@localhost otp_src_R13B04]# cat /etc/profile.d/erlang.sh
export PATH=$PATH:/usr/local/erlang/bin

[root@localhost otp_src_R13B04]# erl -sname test
Erlang R13B04 (erts-5.7.5) [source] [64-bit] [rq:1] [async-threads:0] [kernel-poll:false]

安裝rabbitmq
(1)下載rabbit包
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.0/rabbitmq-server-generic-unix-3.2.0.tar.gz
(2)解壓到當前目錄
tar -zxvf rabbitmq-server-generic-unix-3.2.0.tar.gz

(3)啟動rabbitmq-server
cd?rabbitmq_server-3.2.0
sbin/rabbitmq-server

插件安裝
cd /usr/local/rabbitmq/sbin/
./rabbitmq-plugins enable rabbitmq_management
可以在瀏覽器中輸入:http://192.168.1.164:15672/ 默認用戶是guest 默認密碼是guest

======================================================
集群部署

設置 Erlang Cookie
??RabbitMQ節點之間和命令行工具 (e.g. rabbitmqctl)是使用Cookie互通的,Cookie是一組隨機的數字+字母的字符串。當RabbitMQ服務器啟動的時候,Erlang VM會自動創建一個隨機內容的Cookie文件。如果是通過源安裝RabbitMQ的話,Erlang Cookie 文件在/var/lib/rabbitmq/.erlang.cookie。如果是通過源碼安裝的RabbitMQ,Erlang Cookie文件$HOME/.erlang.cookie。
??本文演示的實例是用源碼安裝,由於這個文件權限是 400,所以需要先修改 node2、node3 中的該文件權限為 777:
lion@node1:~$ chmod 777 .erlang.cookie??然後將文件復制到node2、node3上面。
node2:
lion@node2:~$ chmod 777 .erlang.cookie
lion@node2:~$ scp -r node1:/home/lion/.erlang.cookie ~/
lion@node1‘s password:
.erlang.cookie 100% 20 0.0KB/s 00:00node3:
lion@node3:~$ chmod 777 .erlang.cookie
lion@node3:~$ scp -r node1:/home/lion/.erlang.cookie ~/
lion@node1‘s password:
.erlang.cookie 100% 20 0.0KB/s 00:00??分別在node1、node2、node3將權限恢復過來:
lion@node1:~$ chmod 400 .erlang.cookie??最後分別在確認三臺機器上的.erlang.cookie的值是一致的
lion@node1:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

lion@node2:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

lion@node3:~$ cat .erlang.cookie
VORMVSAAOFOFEQKTNWBA

(3)分別啟動rabbitmq
[root@ptr164 rabbitmq_server-3.2.0]# sbin/rabbitmq-server -detached

[root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmq-server -detached

(4)創建cluster我們以rabbit@ptr164為主,將rabbit@ptr165加入到集群中
br/>我們以rabbit@ptr164為主,將rabbit@ptr165加入到集群中
[root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl join_cluster --ram rabbit@ptr164 在執行這個的時候一直報錯
[root@localhost rabbitmq_server-3.2.0]# sbin/rabbitmqctl join_cluster --ram rabbit@rabbit103
Clustering node rabbit@localhost with rabbit@rabbit103 ...
Error: {cannot_discover_cluster,"The nodes provided are either offline or not running"}
需要讓主機名字生效

[root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl start_app
查看集群狀態
[root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl cluster_status
[root@rabbit104 rabbitmq_server-3.2.0]# sbin/rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit104 ...[{nodes,[{disc,[rabbit@rabbit103]},{ram,[rabbit@rabbit104]}]},
br/>[{nodes,[{disc,[rabbit@rabbit103]},{ram,[rabbit@rabbit104]}]},
{partitions,[]}]
...done.
[root@rabbit104 rabbitmq_server-3.2.0]#

兩個節點得到相同的輸出,其中rabbit@ptr164節點形式是disc,rabbit@ptr165節點形式是ram。這和執行join_cluster命令是的選項--ram是一致的。
(5)改變節點形式

[plain] view plain copy print?1. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?stop_app??

  1. Stopping?node?rabbit@ptr165?...??
  2. ...done.??
  3. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?change_cluster_node_type?disc??
  4. Turning?rabbit@ptr165?into?a?disc?node?...??
  5. ...done.??
  6. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?start_app??
  7. Starting?node?rabbit@ptr165?...??
  8. ...done.??

我們將rabbit@ptr165的節點改為disc

[plain] view plain copy print?1. [root@ptr164?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?cluster_status??

  1. Cluster?status?of?node?rabbit@ptr164?...??
  2. [{nodes,[{disc,[rabbit@ptr164,rabbit@ptr165]}]},??
  3. ?{running_nodes,[rabbit@ptr165,rabbit@ptr164]},??
  4. ?{partitions,[]}]??
  5. ...done.??

兩個節點都是disc的形式
(6)從cluster中分離

[plain] view plain copy print?1. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?stop_app??

  1. Stopping?node?rabbit@ptr165?...??
  2. ...done.??
  3. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?reset??
  4. Resetting?node?rabbit@ptr165?...??
  5. ...done.??
  6. [root@ptr165?rabbitmq_server-3.2.0]#?sbin/rabbitmqctl?start_app??
  7. Starting?node?rabbit@ptr165?...??

[root@rabbit104 rabbitmq_server-3.2.0]# sbin/rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit104 ...[{nodes,[{disc,[rabbit@rabbit104]}]},
br/>[{nodes,[{disc,[rabbit@rabbit104]}]},
{partitions,[]}]
...done.
硬刪除:直接刪掉集群中的某個節點:rabbitmqctl forget_cluster_node ? node_name

rabbitmq編譯部署以及常見報錯