所有rpm版本的列表
http://www.rabbitmq.com/releases/rabbitmq-server/
一、安装:
rpm -ivh http://mirrors.sohu.com/fedora-epel/6Server/x86_64/epel-release-6-8.noarch.rpm
yum install erlang
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

yum localinstall rabbitmq-server-3.4.1-1.noarch.rpm -y

二、增加增加两台服务器hosts配置、
sudo sed '2a192.168.60.239 rabbitmq1\n192.168.60.240 rabbitmq2' /etc/hosts
注意:hosts的当中127.0.0.1对应的也是上面的主机名称。还要修改/etc/sysconfig/network对应的主机名称的,最后使用hostname也修改一下(如果不修改的话,加入到集群会有问题)

三、配置:
启动服务
[root@rabbitmq2 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

开启web管理
[root@rabbitmq2 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management

Applying plugin configuration to rabbit@rabbitmq2... started 6 plugins.

四、普通集群配置
1、Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中(像我的root用户安装的就是放在我的root/.erlang.cookie中),文件是400的权限。所以必须包管各节点cookie对峙一致,不然节点之间就无法通信
对Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构。
当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。
该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。
如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,然后就没有然后了……

2、实践证明
        1)只有rabbitmq1在root的家目录下有.erlang.cookie [root@rabbitmq1 ~]# find / -name .erlang.cookie
        /root/.erlang.cookie
        /var/lib/rabbitmq/.erlang.cookie
        2)rabbitmq2的root的家目录没有相应的文件
            [root@rabbitmq2 ~]# find / -name .erlang.cookie
        /var/lib/rabbitmq/.erlang.cookie
3、erlang cookie 设置
    复制cookie的内容
            将主节点(rabbitmq1)服务上的/var/lib/rabbitmq/.erlang.cookie的内容复制从节点上,该文件是400的权限,保存时候要强制保存退出。也可以修改一下该文件的权限为600
            注意:将主服务器上的cookieid复制到从服务器上,需要把从服务器上的rabbitmq-server停掉才可以复制,最后再启动从服务器上的rabbitmq-server。
        [root@rabbitmq1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
        IUPHAUBLNVVIIHCHFMEJ
        [root@rabbitmq2 ~]# vim /var/lib/rabbitmq/.erlang.cookie
        IUPHAUBLNVVIIHCHFMEJ
4、主服务配置脚本
        [root@rabbitmq1 ~]# rabbitmqctl  stop_app
        Stopping node rabbit@rabbitmq1 ...

        [root@rabbitmq1 ~]# rabbitmqctl reset

        Resetting node rabbit@rabbitmq1 ...

        [root@rabbitmq1 ~]# rabbitmqctl start_app

        Starting node rabbit@rabbitmq1 ...

5、节点服务配置脚本
[root@rabbitmq2 ~]# rabbitmqctl stop_app
Stopping node rabbit@rabbitmq2 ...
[root@rabbitmq2 ~]# rabbitmqctl reset
Resetting node rabbit@rabbitmq2 ...
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1 注意:。此种作为磁盘节点,如果作为内存节点的话就需要 –-ram选项。如:rabbitmqctl join_cluster --ram rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
[root@rabbitmq2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...

6、 查看集群的运行情况
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...br/>[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
{running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1]},br/>{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]}]

         [root@rabbitmq2 ~]# rabbitmqctl cluster_status
        Cluster status of node rabbit@rabbitmq2 ...
        [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
        {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2]},
        {cluster_name,<<"rabbit@rabbitmq1">>},
         {partitions,[]}]

五、添加用户、角色赋予权限
[root@rabbitmq1 ~]# rabbitmqctl add_user admin admin
Creating user "admin" ...

给用户添加角色
rabbitmqctl set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...

赋予权限
rabbitmqctl set_permissions -p / admin "." "." ".*"
Setting permissions for user "admin" in vhost "/" ...

六、web访问接口
http://172.16.3.149:15672
注意:使用系统默认的用户guest密码也为guest不能登录。使用上面授权的admin进行登录
七、mq增加队列
1)名称:复制线上的mq队列
2)参数是:x-ha-policy=all
镜像队列
上述配置的RabbitMQ默认集群模式,但并不包管队列的高可用性,尽管互换机、绑定这些可以复制到集群里的任何一个节点,然则队列内容不会复制,固然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能守候重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,须要创建镜像队列。
镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列.
我是通过网页的管理端来设置的镜像队列,也可以通过命令,官方有例子.

http://www.rabbitmq.com/ha.html 打开之后翻到最下边有两个例子,可以参考看看,这里只说其中的网页设置的
1 >1.点击admin菜单-->右侧的Policies选项-->左侧最下下边的Add / update a policy
2
3 >2.按照图中的内容根据自己的需求填写
4
5 >3.点击Add policy添加策略

此时你就会来你的两台rabbitmq服务器的网页管理端amind菜单下看见刚才创建的队列了.

下面我们来添加一个queues队列来看看效果,这里只是测试结果,其它的先不填写

注意红框中的 x-ha-policy = all 这个,网上说没有这个不会进行复制,但是我测试的时候好像可以复制的,至少queues队列是可以的,先添上吧.
在这里边添加的时候你是可以指定Node选项也就是把这个queues放在哪个node节点上,不过做镜像的时候就没有必要了,呵呵
添加完成后你会看到这个效果

简要说明一下
aa这个是刚才添加的 Arguments 参数指定了 x-ha-policy = all
ab这个是没有指定Arguments参数的,这个可以看出差距的
ba和bb是为了做演示效果对比的,这两个是没有符合同步策略的,所以Node后边没有+1的标识,你把鼠标放在+1的标识上就能看到他在另一台机器上也有一个.
Q:你说要是我重启rabbitmq2的话会出现什么效果….
A:aa和ab的+1标识消失,启动后重新恢复.
Q:要是重启rabbitmq1的话出现什么效果….
A:在rabbitmq2上aa和ab的+1标识消失且Node选项中的rabbit@rabbitmq1变成rabbit@rabbitmq2,同时ba和bb消失,重启后依旧消失,哈哈,因为这两个没做镜像哦~

这里的镜像队列的集群介绍就到这里,要想做到高可用,需要HA软件的配合哦~ 这里先不做赘述,下篇文章再说吧….

报错处理
要是错误信息中提示有主节点冲突的话,可以进入到一下目录修改相应的文件
1 cd /usr/local/rabbitmq_server-3.1.3/var/lib/rabbitmq/mnesia
2 vim rabbit\@rabbitmq2/cluster_nodes.config
或者直接将这个目录里的文件全都删除,这个是集群的配置文件和持久化的数据存储位置,能改则改实在是迫不得已再删除

八、用户管理
用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。
相应的命令
(1) 新增一个用户
rabbitmqctl add_user Username Password
(2) 删除一个用户
rabbitmqctl delete_user Username
(3) 修改用户的密码
rabbitmqctl change_password Username Newpassword
(4) 查看当前用户列表
rabbitmqctl list_users

九、用户角色
按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(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

十、用户权限
用户权限指的是用户对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

十一、日志查看
查看路径:
tail -f /var/log/rabbitmq/rabbit\@pre-mq.log