Linux下离线搭建RabbitMQ集群

/ 默认分类 / 没有评论 / 1043浏览

Erlang安装

Erlang软件包准备

下载网址 http://erlang.org/download/ 对应的版本自选,我选择的是 19.3版本 即http://erlang.org/download/otp_src_19.3.tar.gz

Erlang编译安装

cd /tmp
wget http://erlang.org/download/otp_src_19.3.tar.gz
tar -zxvf otp_src_19.3.tar.gzcd otp_src_19.3
./configure -prefix=/usr/local/erlang --with-ssl=/opt/ssl  #  --with-ssl=/opt/ssl  为你本机中的open-ssl的安装路径
make
make installcd /usr/local/erlangcd bin
ln -s /usr/local/erlang/bin/erl /usr/local/bin/erl

Erlang版本检查

erl -v

注:如安装时提示libncurses++.so.5()(64bit) is needed by ncurses-devel-5.9-14.20130511.el7_4,请安装ncurses 安装Curses参考这篇文章:http://www.35youth.cn/480.html

RabbitMQ离线安装

软件下载

下载链接 http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz

离线安装

tar -xvf rabbitmq-server-generic-unix-3.6.10.tar 
cp -R rabbitmq_server-3.6.10/   /usr/local/rabbitmq/
chmod -R 755 /usr/local/rabbitmq/sbin

RabbitMQ基本操作

RabbitMQ启动

cd /usr/local/rabbitmq/sbin
./rabbitmq-server

开启Web管理插件

cd /usr/local/rabbitmq/sbin
./rabbitmq-plugins enable rabbitmq_management

RabbitMQ重启

cd /usr/local/rabbitmq/sbin
./rabbitmqctl stop   ## 停应用./rabbitmq-server    ## 启动应用

通过web管理

访问http://xxxx:15672 默认用户/密码 : guest/guest 注意初始状态只能本地登录,不可通过远程web访问,给权限也不行。需要远程访问的,必须新建用户并赋权限。

用户管理并赋权限 添加用户 如用户名:mqadmin 密码:admin

cd /usr/local/rabbitmq/sbin
./rabbitmqctl add_user admin admin

给用户添加角色 角色有none、management、policymaker、monitoring、administrator等,administrator为超级管理员

./rabbitmqctl set_user_tags mqadmin administrator

给用户授权

./rabbitmqctl set_permissions -p  / mqadmin '.*' '.*' '.*'

在浏览器中输入:http://ip:15672 如:http://192.168.137.200:15672/即可 输入新添加的用户名和密码登录

添加环境变量:export PATH=$PATH:/opt/rabbitmq/sbin

环境变量生效:source /etc/profile

进入sbin 启动服务:./rabbitmq-server -detached

查看服务状态:./rabbitmqctl status

关闭服务:./rabbitmqctl stop

异常处理

1、ErLang的安装 configure: error: No curses library functions found 需要首先安装 ncurses-devel

2、启动报错

2018-01-03 06:16:32.494 [info] <0.33.0> Application lager started on node rabbit@ubuntu
2018-01-03 06:16:32.507 [info] <0.5.0> Log file opened with Lager
2018-01-03 06:16:33.438 [error] <0.5.0>
Error description:
    init:do_boot/3
    init:start_em/1
    rabbit:start_it/1 line 454
    rabbit:broker_start/0 line 330
    rabbit_plugins:prepare_plugins/1 line 289
    rabbit_plugins:ensure_dependencies/1 line 263
throw:{error,{missing_dependencies,[crypto,ssl],
                                   [amqp10_client,cowboy,cowlib,rabbitmq_aws,
                                    rabbitmq_management,
                                    rabbitmq_management_agent,rabbitmq_shovel,
                                    rabbitmq_trust_store]}}
Log file(s) (may contain more information):
   /home/zhangcs/rabbitmq_server-3.7.2/var/log/rabbitmq/rabbit@ubuntu.log
   /home/zhangcs/rabbitmq_server-3.7.2/var/log/rabbitmq/rabbit@ubuntu_upgrade.log

解决方法: 安装 erlang-ssl yum install erlang-ssl 安装 erlang-ssl 后检查SSL版本,出现如下:即可

~/rabbitmq_server-3.7.2$ erl
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]
 
Eshell V7.3  (abort with ^G)
1> ssl:versions().
[{ssl_app,"7.3"},
 {supported,['tlsv1.2','tlsv1.1',tlsv1]},
 {available,['tlsv1.2','tlsv1.1',tlsv1,sslv3]}]
2> halt().

搭建集群

(1)设置erlang

找到erlang cookie文件的位置,官方在介绍集群的文档中提到过.erlang.cookie一般会存在这两个地址:第一个是$home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在${HOME}目录下,也就是$HOME/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。

这里将 node1 的该文件复制到 node2、node3,注意这个文件的权限是 400(默认即是400),因此采用scp的方式只拷贝内容即可;

(2)使用-detached参数运行各节点

stop 然后可以通过rabbitmqctl cluster_status查看节点状态。PS:要先拷贝cookie到另外两台机器上,保证三台机器上的cookie是一致的,然后再启动服务。

由于guest这个用户,只能在本地访问,所以我们要新增一个用户并赋予权限:

添加用户并设置密码:

rabbitmqctl add_user admin admin 添加权限(使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仅仅关闭应用。

将 node2、node3与 node1 组成集群,这里以node2为例

node2# rabbitmqctl stop_app

node2# rabbitmqctl join_cluster rabbit@node1 ####这里集群的名字一定不要写错了

node2# rabbitmqctl start_app

注意:

集群内的主机名(hostname)不能一样。