RabbitMQ集群部署

本文介绍了RabbitMQ的集群部署过程,包括计算服务、块设备存储服务、网络服务和Telemetry的配置。在部署过程中遇到mnesia数据库问题,通过清除节点数据并重启成功解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.rabbitmq组建集群


1)安装rabbitmq-server
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
OpenStack 支持如下的 RabbitMQ 配置:


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  官方文档

RabbitMQ是一款基于AMQP协议的开源消息队列系统,它可以让应用程序之间进行可靠的异步消息传递。 RabbitMQ支持多个节点的分布式部署,以提高可用性和性能。 以下是RabbitMQ集群部署的步骤: 1. 安装Erlang和RabbitMQ 首先需要安装Erlang和RabbitMQ。可以从官方网站下载安装包并按照说明进行安装。 2. 创建配置文件 在每个节点上,需要创建一个配置文件,该文件将指定节点的名称、IP地址、端口、群集节点等信息。可以使用默认配置文件,并在该文件中添加以下内容: ``` cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config cluster_formation.classic_config.nodes.1 = rabbit@node1 cluster_formation.classic_config.nodes.2 = rabbit@node2 cluster_formation.classic_config.nodes.3 = rabbit@node3 ``` 其中,`rabbit@node1`、`rabbit@node2`、`rabbit@node3`是节点的名称,需要根据实际情况进行更改。 3. 启动节点 在每个节点上启动RabbitMQ服务: ``` rabbitmq-server -detached ``` 4. 加入群集 在每个节点上,使用以下命令将节点加入群集: ``` rabbitmqctl join_cluster rabbit@node1 ``` 其中,`rabbit@node1`是群集中的一个节点,需要根据实际情况进行更改。 5. 启动群集 在任一节点上,使用以下命令启动群集: ``` rabbitmqctl start_app ``` 6. 验证群集状态 使用以下命令验证群集状态: ``` rabbitmqctl cluster_status ``` 如果输出内容包含所有节点的名称,则表示群集已经成功部署。 注意:在RabbitMQ集群中,每个队列都将在某个节点上运行。如果某个节点宕机,该节点上的队列将无法访问。因此,需要使用镜像队列来确保数据的可靠性。具体的做法是将队列的镜像复制到其他节点上,以确保在某个节点宕机时,队列可以在其他节点上运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值