1.rabbitmq组建集群
yum install rabbitmq-server
2)在一个节点上面启动
service rabbitmq-server start
3)拷贝/var/lib/rabbitmq/.erlang.cookie 到其他节点的/var/lib/rabbitmq/目录下,注意保持权限一致。
所有节点重启服务:service rabbitmq restart
4)查看节点信息,正常情况如下:
rabbitmqctl cluster_status
Cluster status of node rabbit@control ...
[{nodes,[{disc,[rabbit@control]}]},
{running_nodes,[rabbit@control]},
{partitions,[]}]
...done.
5)将node-3连接到control节点 #测试能否在线水平扩容
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@control
rabbitmqctl start_app
6)再查看下所有节点集群信息
[root@control ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@control ...
[{nodes,[{disc,[rabbit@control,'rabbit@node-3']}]},
{running_nodes,['rabbit@node-3',rabbit@control]},
{cluster_name,<<"rabbit@control">>},
{partitions,[]}]
...done.
表示加入集群成功
7)创建用户和配置权限,在任意节点即可
#创建用户和密码
rabbitmqctl add_user openstack openstack
#给用户配置角色
rabbitmqctl set_user_tags openstack administrator
#给用户配置权限
rabbitmqctl set_permissions -p / openstack ".*" ".*" ".*"
8)开启rabbitmq镜像功能,需要基于rabbitmq策略来实现。
rabbitmqctl set_policy -p / ha-allqueue "." '{"ha-mode":"all"}'
# -p 表示命名空间,/ 表示根目录
#对队列名称以 ’hello‘ 开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha "^hello" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
2、Rabbitmq相关命令
####命令###
rabbitmqctl list_users #查看当前用户
rabbitmqctl list_policies #查看策略
rabbitmqctl list_queues #查看消息队列
3、其他资料
OpenStack 官方建议至少使用三节点 RabbitMQ 集群,而且推荐配置是使用镜像队列。对于测试和演示环境,使用两节点也是可以。以下OpenStack 服务都支持这种 A/A 形式的 RabbitMQ:
- 计算服务
- 块设备存储服务
- 网络服务
- Telemetry
rabbit_hosts=rabbit1:5672,rabbit2:5672,rabbit3:5672:所有RabbitMQ 服务列表
rabbit_retry_interval=1: 连接失败时候的重试间隔
rabbit_retry_backoff=2: How long to back-off for between retries when connecting to RabbitMQ。不太明白其含义。
rabbit_max_retries=0:最大重试次数。0 表示一直重试
rabbit_durable_queues=true:true 的话表示使用持久性队列,Kilo 中默认为 false。
rabbit_ha_queues=true: 设置为 true 的话则使用镜像队列,并设置 x-ha-policy 为 all;但是 Kilo 中其默认值为 false。
**************
4、问题解决:
1.rabbitmq重启失败,看日志提示如下信息
=INFO REPORT==== 20-Sep-2016::23:32:41 ===
Error description:
{could_not_start,rabbit,
{bad_return,
{{rabbit,start,[normal,[]]},
{'EXIT',
{rabbit,failure_during_boot,
{error,
{timeout_waiting_for_tables,
[rabbit_user,rabbit_user_permission,rabbit_vhost,
rabbit_durable_route,rabbit_durable_exchange,
rabbit_runtime_parameters,
rabbit_durable_queue]}}}}}}}
解决办法:
应该是mnesia数据库出现了问题,清除/var/lib/rabbitmq/mnesia/rabbit@node-3目录下所有文件,然后重启成功
参考文档:
1. http://www.cnblogs.com/sammyliu/p/4730517.html
2. http://www.rabbitmq.com/clustering.html 官方文档