全部rpm版本的列表
http://www.rabbitmq.com/releases/rabbitmq-server/
1、安装:
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 html
yum localinstall rabbitmq-server-3.4.1-1.noarch.rpm -ynode
2、增长增长两台服务器hosts配置、
sudo sed '2a192.168.60.239 rabbitmq1\n192.168.60.240 rabbitmq2' /etc/hosts
注意:hosts的当中127.0.0.1对应的也是上面的主机名称。还要修改/etc/sysconfig/network对应的主机名称的,最后使用hostname也修改一下(若是不修改的话,加入到集群会有问题)web
3、配置:
启动服务
[root@rabbitmq2 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.vim
开启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.cookie
4、普通集群配置
一、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节点恢复,而后才可被消费;若是没有持久化的话,而后就没有而后了……app
二、实践证实 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 三、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 四、主服务配置脚本 [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 ...
五、节点服务配置脚本
[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 ...ide
六、 查看集群的运行状况
[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,[]}]
5、添加用户、角色赋予权限
[root@rabbitmq1 ~]# rabbitmqctl add_user admin admin
Creating user "admin" ...spa
给用户添加角色
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 "/" ...
6、web访问接口
http://172.16.3.149:15672
注意:使用系统默认的用户guest密码也为guest不能登陆。使用上面受权的admin进行登陆
7、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
或者直接将这个目录里的文件全都删除,这个是集群的配置文件和持久化的数据存储位置,能改则改实在是无可奈何再删除
8、用户管理
用户管理包括增长用户,删除用户,查看用户列表,修改用户密码。
相应的命令
(1) 新增一个用户
rabbitmqctl add_user Username Password
(2) 删除一个用户
rabbitmqctl delete_user Username
(3) 修改用户的密码
rabbitmqctl change_password Username Newpassword
(4) 查看当前用户列表
rabbitmqctl list_users
9、用户角色
按照我的理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其余。
(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
10、用户权限
用户权限指的是用户对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
11、日志查看查看路径:tail -f /var/log/rabbitmq/rabbit\@pre-mq.log