现状:
现在存在有三个服务器,之前三个服务器上各存在一个rabbitmq节点,因为其中一个服务器崩掉了,所以需要在这台服务器上安装rabbitmq并且将这个节点加入到之前的集群中。需要注意的是rabbitmq各个节点是互相平等的,不存在主从之分。
node1 172.27.0.11
node2 172…27.0.9
node3 172.27.0.5
没错,崩掉的就是这个.0.5的节点。
版本声明
erl 18.3(7.3)
rabbitmq 18.3
写在前面的话(我踩过的坑):
1.在安装rabbitmq之前需要安装erlang。
2.rabbitmq各个节点之前的确没有主从之分,但是各个节点的rabbitmq版本以及erlang的版本都应该一致。
3.网上有很多apt-get这种简易安装的方法,但是因为这种方法的安装版本相对较老,并且基于我自身的需要,我对版本需求很高,所以,我在尝试了这种安装方法之后,每次都失败,于是我卸载了。因此看这个文章的小可爱建议依据自身的需求去选择安装方法。我是以编译安装为主,相对比较麻烦。
4.erlang和rabbitmq二者的版本应该相互适配的,在安装之前去这里看看erlang和rabbitmq版本适配.
在安装rabbitmq之前需要安装erlang
(1)在一个安装目录下建一个新的文件夹放rabbitmq的相关文件;
(2)下载(时间非常的长,而且很容易下载一个错误的包);
(3)解压,并且实现重命名;
cd /home/ubuntu/
sudo mkdir rabbit
cd rabbit
sudo wget http://erlang.org/download/otp_src_18.3.tar.gz
tar zxvf otp_src_18.3.tar.gz
mv otp_src_18.3 erlang
(4)编译安装
(在执行./configure命令没有执行成功说明,下载的包有问题,重新下载吧,或者可以在网上找一些镜像)
其他的问题可能需要安装一些额外的包,具体需要自己解决。
./configure
sudo make
sudo make install
(5)添加环境变量
cd /
cd /etc
sudo vi profile
在该文件中添加如下内容:(具体需要根据自己安装的位置确定)
ERLANG_HOME=/home/ubuntu/rabbit/erlang
export PATH=$PATH:$ERLANG_HOME/bin
export ERLANG_HOME
让配置文件生效!
source /etc/profile
(6)确定是否安装成功
erl
这样就成功了!
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3 (abort with ^G)
1>
(1)去到那个文件夹下载;
(2)解压,重命名;
cd /home/ubuntu/rabbit
wget http://www.rabbitmq.com/releases/rabbitmq-server/v_3.5.7/rabbitmq-server-generic-unix-3.5.7.tar.gz
tar zvxf rabbitmq-server-generic-unix-3.5.7.tar.gz
mv rabbitmq_server-3.5.7 rabbitmq
同样的,添加环境变量。
cd /etc
sudo vi profile
在profile文件中添加如下内容:
export PATH=$PATH:/home/ubuntu/rabbit/rabbitmq/sbin
export RABBITMQ_HOME=/home/ubuntu/rabbit/rabbitmq
生效文件并启动rabbitmq
sorce /etc/profile
rabbitmq-server
查看rabbitmq状态
rabbitmqctl status
大概是这样就成功了!
Status of node 'rabbit@VM-0-5-ubuntu' ...
[{pid,28181},
{running_applications,[{xmerl,"XML parser","1.3.10"},
{sasl,"SASL CXC 138 11","2.7"},
{stdlib,"ERTS CXC 138 10","2.8"},
{kernel,"ERTS CXC 138 10","4.2"}]},
{os,{unix,linux}},
{erlang_version,"Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory,[{total,37381904},
{connection_readers,0},
{connection_writers,0},
{connection_channels,0},
{connection_other,0},
{queue_procs,0},
{queue_slave_procs,0},
{plugins,0},
{other_proc,13426448},
{mnesia,0},
{mgmt_db,0},
{msg_index,0},
{other_ets,661480},
{binary,9312},
{code,16733394},
{atom,654217},
{other_system,5897053}]},
{alarms,[]},
{listeners,[]},
{processes,[{limit,1048576},{used,49}]},
{run_queue,0},
{uptime,6009}]
1.配置节点的host文件
cd /etc
sudo vi hosts
添加如下内容:(前面是内网IP,后面是节点名称)
172.27.0.11 node1
172.27.0.9 node2
172.27.0.5 node3
2.编辑cookie文件
三个节点的cookie文件应该一致,将.0.5这个节点的cookie文件修改成和其他的两个节点一致的样子!有两个文件都需要修改
cd /var/lib/rabbitmq
sudo vi .erlang.cookie
cd /$HOME
sudo vi .erlang.cookie
修改成和其他两个节点一致即可
3.加入
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
(Cluster node rabbit@node3 with rabbit@node1)
rabbitmqctl start_app
加入的时候,提醒如上,则成功!
出现类似于tcp success but erl failed
则是erl的问题,可能是缺一些包,反正是erlang的问题。可以考虑重新安装。