CentOS6.8中RabbitMQ的安装和配置&俺们这些逗比遇到的坑好难填

安装系统CentOS6.8

1.erlang的安装erlang的版本:erlang-18.2.1

erlang的依赖环境:

(1)首先安装GCC GCC-C++ Openssl等模块:

yum -y install make gcc gcc-c++ kernel-devel m4 unixODBC unixODBC-devel openssl openssl-devel

(2)安装ncurses模块:

yum -y install ncurses-devel

(3)erlang下载&解压:

wget http://erlang.org/download/otp_src_18.2.1.tar.gz
然后解压并放置在/usr/local/下:
tar -xvf otp_src_18.2.1.tar.gz
mv otp_src_18.2.1 /usr/local/

(4)编译&安装:进入到otp_src_18.2.1文件夹下,

配置命令:
cd /usr/local/otp_src_18.2.1
./configure --prefix=/usr/local/erlang --enable-threads --enable-halfword-emulator --enable-smp-support --enable-kernel-poll --enable-sctp --enable-native-libs --enable-shared-zlib --enable-m64-build --enable-silent-rules
直接从yum上下载对应的模块即可;

(5)开过一个终端安装wxWidgets(需要外网)

在安装之前,wx又依赖以下模块,
yum -y install gtk opengl mesa* freeglut*
fop is missing问题可以忽略,上述问题得到解决;
注解:安装gtk失败
yum install libgnomeui-devel
其中wxWidgets库,yum中没有,需要单独下载,本文下载的版本为:
wxWidgets-3.0.2.tar.bz2
tar -jxvf wxWidgets-3.0.2.tar.bz2
mv wxWidgets-3.0.2 /usr/local/
cd /usr/local/wxWidgets-3.0.2
随后进行解压安装
./configure --with-opengl --enable-debug --enable-unicode
make&& make install
wx安装成功,

(6)随后对otp_src进行编译和安装:

./configure --prefix=/usr/local/erlang --enable-threads --enable-halfword-emulator --enable-smp-support --enable-kernel-poll --enable-sctp --enable-native-libs --enable-shared-zlib --enable-m64-build --enable-silent-rules
make&& make install
得到如下文件夹:erlang的命令文件存在于bin中,
因此需要将bin的路径加入到PATH路径中,编辑/etc/profile文件,
在尾行添加:
export PATH=$PATH:/usr/local/erlang/bin
并执行:source /etc/profile
随后测试安装是否成功:

erl 出现信息,代表erlang安装成功;


2.1.对RabbitMQ进行安装(推荐)

(1)xmlto安装,直接yum:

yum install xmlto

(2)下载版本:版本号为3.6.1可最新版,最新版并没有tar版本

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.6.1-1.noarch.rpm(版本不符erl要求>=erlB3类似的直接忽略,暂时不依赖,使用下面命令执行 --nodeps是关键 )
rpm -i --nodeps rabbitmq-server-3.6.1-1.noarch.rpm
进入到rabbit文件内,其命令文件存在于/usr/lib/rabbitmq/bin文件夹下,因此需要将bin文件夹的路径添加到PATH中:
目录 TARGET= /usr/lib/rabbitmq
export PATH=$PATH:/usr/lib/rabbitmq/bin
执行source /etc/profile使得PATH路径更新,
至此rabbitMQ安装成功,就是这么简单,文件路径:
MNESIA_BASE 后端存储目录  ,默认为/var/lib/rabbitmq/mnesia
目录 TARGET= /usr/lib/rabbitmq
node           : rabbit@"vhostname"
home dir       : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config(可手动创建配置rabbitmq-env.conf)
log dir        : /var/log/rabbitmq
    -rw-r--r--. 1 rabbitmq rabbitmq 45342 1月  13 19:28 [email protected]
    -rw-r--r--. 1 rabbitmq rabbitmq     0 1月  12 22:44 [email protected]
    -rw-r--r--. 1 root     root         0 1月  13 19:28 shutdown_err

    -rw-r--r--. 1 root     root        45 1月  13 19:28 shutdown_log

官网配置:http://www.rabbitmq.com/configure.html

2.2. 对RabbitMQ进行安装tar.xz版(新手可使用3,3已安装可忽略此小节):

(1)下载版本:版本号为3.6.0,下载通用的linux版本,generic-unix;

下载地址:wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.0/rabbitmq-server-generic-unix-3.6.0.tar.xz
对于下载xz包进行解压:
首先先下载xz压缩工具:
yum install xz
对rabbitmq包进行解压:
xz -d rabbitmq-server-generic-unix-3.6.0.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.0.tar
随后移动至/usr/local中:
这种下载的方式解压后直接可以使用,无需再编译安装;
进入到rabbit文件内,其命令文件存在于sbin文件夹下,因此需要将sbin文件夹的路径添加到PATH中:
export PATH=$PATH:/usr/local/rabbitmq_server-3.6.0/sbin
执行source /etc/profile使得PATH路径更新,但路径有点坑,rabbitMQ安装成功;
/usr/local/rabbitmq_server-3.6.0/etc/rabbitmq
/usr/local/rabbitmq_server-3.6.0/var/lib/rabbitmq
/usr/local/rabbitmq_server-3.6.0/var/log/rabbitmq

3. 随后启用MQ管理方式:

cd /usr/lib/rabbitmq/bin
chkconfig rabbitmq-server on
设置之后可以通过网页方式管理MQ;
设置端口号,可供外部访问:
vi /etc/sysconfig/iptables
iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
或者暴力关闭,重启后失效
service iptables stop关闭防火墙
rabbitmq-plugins enable rabbitmq_management
启动程序rabbitmq-server
/usr/lib/rabbitmq/bin: line 63: erl: command not found
ln -s /usr/local/erlang/bin/erl /usr/bin/erl(配置软连接)
停止所有节点RabbitMQ服务,然后使用detached参数独立运行,这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可以参照这个顺序
后台运行:rabbitmq-server -detached
Warning: PID file not written; -detached was passed.可忽略警告

4.rabbitmq的web管理界面无法使用guest用户登录(可忽略,直接创建一个新用户)

安装最新版本的rabbitmq(3.6.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败。
翻看官方的release文档后,得知由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq(该功能是在3.3.0版本引入的)。
cd /etc/rabbitmq/
vi rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。
可通过任意IP使用guest账号登陆管理控制台,但始终是违背了设计者的初衷,再加上以前对这一块了解也不多,因此有必要总结一下。
随后通过服务器ip+15672端口即可访问rabbitMQ的管理界面;
192.168.2.158:15672/#/ 至此,rabbitMQ的配置已经完成。

5. 用户管理

用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
相应的命令

(1) 新增一个用户

rabbitmqctl  add_user  Username  Password

(2) 删除一个用户

rabbitmqctl  delete_user  Username

(3) 修改用户的密码

rabbitmqctl  change_password  Username  Newpassword

(4) 查看当前用户列表

rabbitmqctl  list_users

6. 用户角色

按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。

(1) 超级管理员(administrator)

可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)

可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)

可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
与administrator的对比,administrator能看到这些内容

(4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

(5) 其他

无法登陆管理控制台,通常就是普通的生产者和消费者。
了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。
设置用户角色的命令为:
rabbitmqctl  set_user_tags  User  Tag
User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
也可以给同一用户设置多个角色,例如
rabbitmqctl  set_user_tags  hncscwc  monitoring  policymaker

7. 用户权限

用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
相关命令为:

(1) 设置用户权限

rabbitmqctl  set_permissions  -p  VHostPath  User  ConfP  WriteP  ReadP

(2) 查看(指定hostpath)所有用户的权限信息

rabbitmqctl  list_permissions  [-p  VHostPath]

(3) 查看指定用户的权限信息

rabbitmqctl  list_user_permissions  User

(4)  清除用户的权限信息

rabbitmqctl  clear_permissions  [-p VHostPath]  User
rabbitmqctl  set_permissions -p /vhost1  user_admin '.*' '.*' '.*'

8.rabbitMQ集群部署以及集群之间同步

官网集群介绍:http://www.rabbitmq.com/clustering.html

其中,一个机房有两台机器部署MQ,并组成集群,有一个机房的MQ集群作为中心集群,其他机房的MQ集群将消息同步到中心MQ集群中。

配置本地集群
配置hosts
同一机房集群的两台机器都要配置host,要保证可以通过hosts访问到同一机房的集群机器
比如同一机房的两台机
NODENAME=rabbit@rabbit
NODENAME=rabbit@rabbit1
rabbit为同ip对应的域名
需要在这两台机上,配置/etc/hosts,增加配置如下:
192.168.2.158 rabbit
192.168.2.168 rabbit1
加入集群
在两台机器上,先启动MQ:
./rabbitmq-server&(同机房集群里的都要启动,不然后面join不进去)
然后在其中每台机器上,执行命令:
./rabbitmq-plugins enable rabbitmq_federation rabbitmq_federation_management rabbitmq_management

(我配置的虚拟机是使用不同版本的rabbitmq因此需要启动rabbitmq_federation联合模式,我还纳闷怎么我的不同版本不是联合模式也可以集群。。默认情况是需要相同版本)

CentOS6.8中RabbitMQ的安装和配置&俺们这些逗比遇到的坑好难填_第1张图片

看不懂的自己点进去翻译:干IT必须多学英文呀!

./rabbitmqctl stop_app(master需要打开)

./rabbitmqctl reset
chmod 400 /var/lib/rabbitmq/.erlang.cookie
(158那台机器是
./rabbitmqctl join_cluster rabbit@rabbit1 (disk磁盘)
./rabbitmqctl join_cluster --ram rabbit@rabbit1 (ram内存)
目的是相互增加对方为集群)
最后,重启MQ
ps -ef | grep rabbitmq | grep -v "grep"|awk '{print $2}' |xargs kill -9
./rabbitmq-server&(如果存在则先kill掉 )
service rabbitmq-server restart
本地集群配置完毕

rabbitmqctl cluster_status

在上班要开虚拟机就算了,就酱。

修改集群节点的类型
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

rabbitmqctl cluster_status

9.跳坑请看这

1.集群配置可能有的问题自己调吧

rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit1 -- 192.168.2.158
rabbitmqctl join_cluster rabbit@rabbit -- 192.168.2.168

2.不同版本、不同安装路径的集群问题的配置

[root@rabbit ~]# rabbitmqctl join_cluster rabbit@rabbit1
Clustering node rabbit@rabbit with rabbit@rabbit1 ...
Error: unable to connect to nodes [rabbit@rabbit1]: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@rabbit1]
rabbit@rabbit1:
  * connected to epmd (port 4369) on rabbit1
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed
  * suggestion: hostname mismatch?
  * suggestion: is the cookie set correctly?
  * suggestion: is the Erlang distribution using TLS?
current node details:
- node name: 'rabbitmq-cli-8060@rabbit'
- home dir: /root
- cookie hash: EHSbkewxdJsbmnBGGVw7mg==
[root@rabbit ~]# rabbitmqctl join_cluster rabbit@rabbit1
Clustering node rabbit@rabbit with rabbit@rabbit1 ...
Error: unable to connect to nodes [rabbit@rabbit1]: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@rabbit1]
rabbit@rabbit1:
  * connected to epmd (port 4369) on rabbit1
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed
  * suggestion: hostname mismatch?
  * suggestion: is the cookie set correctly?
  * suggestion: is the Erlang distribution using TLS?
current node details:
- node name: 'rabbitmq-cli-8060@rabbit'
- home dir: /var/lib/rabbitmq
- cookie hash: EHSbkewxdJsbmnBGGVw7mg==
注意:/root和/var/lib/rabbitmq的下.erlang.cookie的值必须相等 如果没有就自己创建文件
配置/etc/hosts
192.168.2.158 rabbit
192.168.2.168 rabbit1
Error: mnesia_unexpectedly_running
rabbitmqctl stop_app
注意vhostname  .erlang.cookie的权限和值是否相等

3.Erlang cookie值的问题

从错误提示 TCP connection succeeded but Erlang distribution failed,Authentication failed (rejected by the remote node), please check the Erlang cookie 可以看出是 Erlang cookie的问题,节点的cookie和主节点的cookie不一致。解决办法在每个主机的$HOME目录下新建一个.erlang.cookie,里面随便输入一段字符串。或者在/var/lib/rabbitmq这个目录下新建同样的文件,里面随便写些字符,但是要在/etc/rabbitmq/rabbit-env.conf里面通过HOME=/var/lib/rabbitmq来指定。所有节点的.erlang.cookie必须保持一致。

4.cookie访问权限

启动RabbitMQ出现"Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only",这个是cookie访问权限的问题,解决办法如下:

chmod 400 /var/lib/rabbitmq/.erlang.cookie


最后附上本人艰辛历程:链接: http://pan.baidu.com/s/1nv0OXiL 密码: mzj9(安装包)

你可能感兴趣的:(rabbitmq)