(一)源码安装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时遇到了一点问题,整体的安装过程比较简单。

![](http://i2.51ct o.com/images/blog/201809/04/4d893302b16ebe3474fc514cc33a9510.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

这里我只需要解决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加入到集群中 [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl stop_app [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]}]}, {running_nodes,[rabbit@rabbit103,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   2. Stopping node rabbit@ptr165 ...   3. ...done.   4. [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl change_cluster_node_type disc   5. Turning rabbit@ptr165 into a disc node ...   6. ...done.   7. [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl start_app   8. Starting node rabbit@ptr165 ...   9. ...done.  

我们将rabbit@ptr165的节点改为disc

[plain] view plain copy print?1. [root@ptr164 rabbitmq_server-3.2.0]# sbin/rabbitmqctl cluster_status   2. Cluster status of node rabbit@ptr164 ...   3. [{nodes,[{disc,[rabbit@ptr164,rabbit@ptr165]}]},   4.  {running_nodes,[rabbit@ptr165,rabbit@ptr164]},   5.  {partitions,[]}]   6. ...done.  

两个节点都是disc的形式 (6)从cluster中分离

[plain] view plain copy print?1. [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl stop_app   2. Stopping node rabbit@ptr165 ...   3. ...done.   4. [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl reset   5. Resetting node rabbit@ptr165 ...   6. ...done.   7. [root@ptr165 rabbitmq_server-3.2.0]# sbin/rabbitmqctl start_app   8. 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]}]}, {running_nodes,[rabbit@rabbit104]}, {partitions,[]}] ...done. 硬删除:直接删掉集群中的某个节点:rabbitmqctl forget_cluster_node   node_name