@cdmonkey
2016-06-28T11:29:07.000000Z
字数 6863
阅读 1488
MQ
http://note.youdao.com/share/web/file.html?id=f6aa7ec5ce69fea14c679c17fbc75624&type=note
http://www.iyunv.com/thread-23885-1-1.html
[root@Node-A5 ~]# yum install -y rabbitmq-server
[root@Node-A5 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
[ ] amqp_client 3.1.5
[ ] cowboy 0.5.0-rmq3.1.5-git4b93c2d
[ ] eldap 3.1.5-gite309de4
[ ] mochiweb 2.7.0-rmq3.1.5-git680dba8
[ ] rabbitmq_amqp1_0 3.1.5
[ ] rabbitmq_auth_backend_ldap 3.1.5
[ ] rabbitmq_auth_mechanism_ssl 3.1.5
[ ] rabbitmq_consistent_hash_exchange 3.1.5
[ ] rabbitmq_federation 3.1.5
[ ] rabbitmq_federation_management 3.1.5
[ ] rabbitmq_jsonrpc 3.1.5
[ ] rabbitmq_jsonrpc_channel 3.1.5
...
# Install the management GUI plugin:
[root@Node-A5 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
# Start the service:
[root@Node-A5 ~]# /etc/init.d/rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
# Check
[root@Node-A5 ~]# lsof -i:55672
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam 7044 rabbitmq 16u IPv4 32446 0t0 TCP *:55672 (LISTEN)
-----------------
# Start the service on boot:
[root@Node-A5 ~]# chkconfig rabbitmq-server on
[root@Node-A5 ~]# chkconfig --list|grep rabbit
rabbitmq-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off
-----------------
# Check the status:
[root@Node-A5 ~]# rabbitmqctl status
# rabbitmqctl add_vhost <vhostname>
[root@Node-A5 ~]# rabbitmqctl add_vhost test
Creating vhost "test" ...
...done.
# List all virtual host:
[root@Node-A5 ~]# rabbitmqctl list_vhosts
Listing vhosts ...
/
test
...done.
# Add an user:
# rabbitmqctl add_user <username> <password>
[root@Node-A5 ~]# rabbitmqctl add_user cdmonkey 123456
Creating user "cdmonkey" ...
...done.
# Modify the password:
# rabbitmqctl change_password <username> <newpassword>
#绑定权限,并且具备读写的权限:
[root@Node-A5 ~]# rabbitmqctl set_permissions -p test cdmonkey ".*" ".*" ".*"
Setting permissions for user "cdmonkey" in vhost "test" ...
...done.
至此,我们为指定用户于指定虚拟主机上授权成功。
# List all message queue:
[root@Node-A5 ~]# rabbitmqctl list_queues -p test
Listing queues ...
...
...done.
http://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html
首选需要确保集群内所有节点的hosts
的文件设定正确,能够“ping”自身及集群内任意其他节点。此外还确保集群节点间的时间是同步的。
172.16.1.25 Node-A5
172.16.1.26 Node-A6
172.16.1.27 Node-A7
同时需要注意,集群是依赖于“erlang”的集群来进行工作的,所以必须先创建它的集群场景。Erlang
的集群中各节点的结合是通过一个magic cookie
来实施的,该文件存放于:
[root@Node-A5 ~]# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Jan 27 00:00 /var/lib/rabbitmq/.erlang.cookie
[root@Node-A5 ~]# cat /var/lib/rabbitmq/.erlang.cookie
TBBKNXDWJTTXKIZTYLSA
可以将其中一个节点上的.erlang.cookie
值复制下来保存到其他节点上(该文件是节点间进行通信时使用的密钥,所有的节点必须确保一致)。当然也可使用scp
的方法将该文件推送至其他节点内的相同位置,且操作中请留意该文件的权限以及属主属组不应产生变化。操作完毕后重启服务:
# 这里请注意重启的操作步骤。这步很关键,尤其增加节点停止节点后再次启动遇到无法启动都可参照这个顺序。
# Stop the service:
[root@Node-A5 ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@Node-A5' ...
...done.
# Start the service:
[root@Node-A5 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
注意:如果是于rabbitmq
服务运行时修改的.erlang.cookie
文件,那么就无法正常的停止服务(正常情况应该是先修改该文件,再启动服务),需要将相关进程强行的杀掉,然后再正常的后台启动服务:
[root@Node-A7 ~]# kill -9 ...
[root@Node-A7 ~]# rabbitmq-server -detached
https://www.zybuluo.com/zhaikun/note/253376
http://88250.b3log.org/rabbitmq-clustering-ha
http://www.cnblogs.com/me-sa/archive/2012/11/12/2766700.html
http://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html
我们将Node-A5
及Node-A7
两个节点与Node-A5
(主节点)组成集群:
# Node-A5
# 以下的三个指令也可以不执行,而直接于其他的节点上执行相关的指令,但前提是得保证该主节点的服务是正常启动的。
[root@Node-A5 ~]# rabbitmqctl stop_app # Stop the application
Stopping node 'rabbit@Node-A5' ...
...done.
[root@Node-A5 ~]# rabbitmqctl reset # Empty all message queues
[root@Node-A5 ~]# rabbitmqctl start_app # Start the application
注意:执行指令时必须小心,特别是关闭应用的指令为stop_app
,如果执行的是stop
指令,则整个节点都会关闭,后续的操作就错了。
分别于两外两个节点执行下列的指令:
# Node-A6:
[root@Node-A6 ~]# rabbitmqctl stop_app
Stopping node 'rabbit@Node-A6' ...
...done.
[root@Node-A6 ~]# rabbitmqctl reset
[root@Node-A6 ~]# rabbitmqctl join_cluster rabbit@Node-A5
Clustering node 'rabbit@Node-A6' with 'rabbit@Node-A5' ...
...done.
[root@Node-A6 ~]# rabbitmqctl start_app
-----------------
# Node-A7:
[root@Node-A7 ~]# rabbitmqctl stop_app
[root@Node-A7 ~]# rabbitmqctl reset
[root@Node-A7 ~]# rabbitmqctl join_cluster rabbit@Node-A5
[root@Node-A7 ~]# rabbitmqctl start_app
# 能够看到,和主节点的配置脚本的唯一区别是多了第三行的加入集群指令。
操作完成后,上面两个节点间也会自动的创建连接。我们可以于任意的节点上查看集群的状态信息:
# 因为我们创建集群时并未指定内存节点,因而所有的节点默认都是硬盘节点:
[root@Node-A6 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@Node-A6' ...
[{nodes,[{disc,['rabbit@Node-A5','rabbit@Node-A6','rabbit@Node-A7']}]},
{running_nodes,['rabbit@Node-A5','rabbit@Node-A7','rabbit@Node-A6']},
{partitions,[]}]
...done.
目前三个节点都是硬盘节点,我们可将Node-A6
及Node-A7
两个节设定为“RAM”节点(需要保留至少一个硬盘节点用以保存状态信息):
# Node-A6:
[root@Node-A6 ~]# rabbitmqctl stop_app
[root@Node-A6 ~]# rabbitmqctl reset
[root@Node-A6 ~]# rabbitmqctl join_cluster --ram rabbit@Node-A5
Clustering node 'rabbit@Node-A6' with 'rabbit@Node-A5' ...
...done.
[root@Node-A6 ~]# rabbitmqctl start_app
# Node-A7:
[root@Node-A7 ~]# rabbitmqctl stop_app
[root@Node-A7 ~]# rabbitmqctl reset
[root@Node-A7 ~]# rabbitmqctl join_cluster --ram rabbit@Node-A5
[root@Node-A7 ~]# rabbitmqctl start_app
-----------------
# Check the status of cluster:
[root@Node-A7 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@Node-A7' ...
[{nodes,[{disc,['rabbit@Node-A5']},{ram,['rabbit@Node-A7','rabbit@Node-A6']}]},
{running_nodes,['rabbit@Node-A6','rabbit@Node-A5','rabbit@Node-A7']},
{partitions,[]}]
...done.
目前创建的为默认的普通集群,要确保高可用还需要创建镜像集群(创建镜像集群的前提是先要创建普通集群)。
使用镜像功能,需要使用RabbitMQ
的策略来实现,策略是用来控制及修改群集范围的某个虚拟主机队列行为和交换机行为的。
http://www.rabbitmq.com/ha.html
http://www.cnblogs.com/DanielChow/p/3373518.html
# Create mirror cluster:
[root@Node-A5 ~]# rabbitmqctl set_policy ha-allqueue "^" '{"ha-mode":"all"}'
Setting policy "ha-allqueue" for pattern "^" to "{\"ha-mode\":\"all\"}" ...
...done.
# 我们能够使用下列指令将Node-A7节点从集群中退出:
[root@Node-A7 ~]# rabbitmqctl stop_app
[root@Node-A7 ~]# rabbitmqctl reset
[root@Node-A7 ~]# rabbitmqctl start_app
注意:从版本3.3.0
开始就不允许使用“guest”权限通过除localhost
以外的远端进行访问。想开启该权限,需要修改主设定文件中的相关内容:
# 首次编辑配置文件时需要手动进行创建:
[root@Node-A5 ~]# vim /etc/rabbitmq/rabbitmq.config
[{rabbit, [{loopback_users, []}]}].
# 修改完配置文件后需要重启服务:
[root@Node-A5 ~]# rabbitmqctl stop
[root@Node-A5 ~]# rabbitmq-server -detached
一般情况下,RabbitMQ
其默认的设定就足够了。如果需要进行特别设定的话,有两个方法(下面所列的两个文件默认是没有的,如有需要必须手动进行创建):
该文件为“env”变量的设定文件,存放地点是确定和不能改变的,位于:/etc/rabbitmq
目录下(该目录有可能也需要自行创建)。具体的设定内容请见:
http://www.rabbitmq.com/configure.html#define-environment-variables
该文件是一个标准的erlang
设定文件,因而它必须符合erlang
设定文件的标准。该文件有其默认的目录,也可于上面的变量设定文件中进行设定。文件的内容请见:
http://www.rabbitmq.com/configure.html#config-items
# 需要注意配置文件的语法格式,比较的坑,而且其注释符号是两个百分号:%%
[
{rabbit,[{loopback_users, []}]},
{rabbit,[{tcp_listeners,[5672]},
{cluster_partition_handling, ignore}]}
].
# Check the exchange info:
[root@Node-A5 ~]# rabbitmqctl list_exchanges
Listing exchanges ...
direct
amq.direct direct
amq.fanout fanout
amq.headers headers
amq.match headers
amq.rabbitmq.log topic
amq.rabbitmq.trace topic
amq.topic topic
...done.