Linux CentOS6.5下RabbitMQ集群部署配置

一、服务器与主机名列表

环境:2台Linux主机,主机名和IP如下,rabbitmq执行用户为rabbitmq,所属组为rabbitmq

172.16.192.145   ecs003

172.16.192.146   ecs004

二、在个节点服务器上做好hosts解析

#cat>>/etc/hosts<

172.16.192.145   ecs003

172.16.192.146   ecs004

EOF

三、在各节点安装Rabbitmq

1、安装epel源和rabbit-relang源

[email protected]:~# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[email protected]:~# rpm -ivh epel-release-6-8.noarch.rpm

[email protected]:~# wget -O /etc/yum.repos.d/epel-erlang.repo [email protected]:~#http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo

2、安装erlang

[email protected]:~# yum install erlang xmlto git -y

[email protected]:~# rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

3、安装rabbitmq

[email protected]:~# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm

[email protected]:~#rpm -ivh rabbitmq-server-3.5.6-1.noarch.rpm

在ecs0004上做同样的安装操作

4、rabbitmq页面(web)管理

启用web插件:

[email protected]:~# rabbitmq-plugins enable rabbitmq_management

关闭web插件

[email protected]:~#rabbitmq-plugins disable rabbitmq_management

可以用默认账号guest,guest登陆http://主机IP:15672,如果要远程登录,需要先创建帐户,因为是集群,所以只要在一台主机设置即可,其它会自动同步。

[email protected]:~# rabbitmqctl add_user dtom 123456  #dtom为新建的用户,123456为密码

[email protected]:~# rabbitmqctl  set_user_tags dtom administrator  #将用户设置为管理员角色

[email protected]:~# rabbitmqctl set_permissions -p / iom “.*” “.*” “.*”    #在 / 虚拟主机里设置dtom用户配置权限,写权限,读权限。.*是正则表达式里用法。rabbitmq的权限是根据不同的虚拟主机(virtual hosts)配置的,同用户在不同的虚拟主机(virtual hosts)里可能不一样。

5、启动各节点rabiitmq,并验证启动情况

[email protected]:~# rabbitmq-server --detached &

[email protected]:~# ps -aux |grep rabbitmq

四、Rabbitmq集群环境配置

一个RABBITMQ集 群中可以共享user,virtualhosts,queues(开启Highly Available Queues),exchanges等。但message只会在创建的节点上传输。当message进入A节点的queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。

RABBITMQ的集群节点包括内存节点、磁盘节点。内存节点的元数据仅放在内存中,性能比磁盘节点会有所提升。不过,如果在投递message时,打开了message的持久化,那么内存节点的性能只能体现在资源管理上,比如增加或删除队列(queue),虚拟主机(vrtual hosts),交换机(exchange)等,发送和接受message速度同磁盘节点一样。一个集群至少要有一个磁盘节点。

集群环境说明:

ecs003作为磁盘节点,ecs004作为内存节点

1、同步erlang.cookie

杀掉ecs004的rabbitmq进程

[email protected]:~#/etc/rabbitmq# ps -ef|grep rabbitmq|awk ‘{print $2}‘|xarge kill -9

2、登录ecs003机器,执行:

[email protected]:~# cd /var/lib/rabbitmq/

[email protected]:~# /var/lib/rabbitmq# scp .erlang.cookie [email protected]:/var/lib/rabbitmq/

在ecs004上启动rabbitmq

[email protected]:~#/etc/rabbitmq# rabbitmq-server --detached & 或/etc/init.d/rabbitmq-server start

3、加入集群

查看ecs003集群状态

[email protected]:~# /var/lib/rabbitmq# rabbitmqctl cluster_status

Cluster status of node [email protected] ...

[{nodes,[{disc,[[email protected]]}]},

{running_nodes,[[email protected]]},

{cluster_name,<<"[email protected]">>},

{partitions,[]}]

4、ecs004加入ecs003集群:

[email protected]:~# rabbitmqctl stop_app    #关闭ecs004中rabbitmq服务

[email protected]:~# rabbitmqctl stop_app    #初始化node状态,会从集群中删除该节点,从管理数据库中删除所有数据,例如vhosts等等。在初始化之前rabbitmq的应用必须先停止

[email protected]:~# /etc/rabbitmq# rabbitmqctl join_cluster [email protected]  #ecs004加入ecs003集群

Clustering node [email protected] with [email protected] ...

[email protected]:~# /etc/rabbitmq# rabbitmqctl start_app   #启动rabbitmq服务

Starting node [email protected] ...

RabbitMQ 3.5.6. Copyright (C) 2007-2015 Pivotal Software, Inc.

##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/

##  ##

##########  Logs: /var/log/rabbitmq/[email protected]

######  ##        /var/log/rabbitmq/[email protected]

##########

Starting broker... completed with 6 plugins.

[email protected]:~# /var/lib/rabbitmq# rabbitmqctl cluster_status   #再次查看集群状态

Cluster status of node [email protected] ...

[{nodes,[{disc,[[email protected]]},{ram,[[email protected]]}]},

{running_nodes,[[email protected],[email protected]]},

{cluster_name,<<"[email protected]">>},

{partitions,[]}]

–第一行是集群中的节点成员,disc表示这些都是磁盘节点,ram表示为内存节点。

–第二行是正在运行的节点成员

5、更改节点属性:

[email protected]:~# rabbitmqctl stop_app   –停止rabbitmq服务

[email protected]:~# rabbitmqctl change_cluster_node_type disc/ram   –更改节点为磁盘或内存节点

[email protected]:~# rabbitmqtl start_app    –开启rabbitmq服务

6、rabbitmq退出集群

假设要把ecs004退出集群,在ecs004上执行:

[email protected]:~# rabbitmqctl stop_app

[email protected]:~# rabbitmqctl reset

[email protected]:~# rabbitmqctl start_app

在集群主节点上执行

[email protected]:~# rabbitmqctl forget_cluster_node [email protected]ecs004

7、rabbitmq集群重启

集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启:

先在一个节点上执行

#rabbitmqctl force_boot

#service rabbitmq-server start

在其他节点上执行

#service rabbitmq-server start

查看cluster状态是否正常(要在所有节点上查询)。

#rabbitmqctl cluster_status

如果有节点没加入集群,可以先退出集群,然后再重新加入集群。

注意:上述方法不适合内存节点重启,内存节点重启的时候是会去磁盘节点同步数据,如果磁盘节点没起来,内存节点一直失败。

五、注意事项

  • cookie在所有节点上必须完全一样,同步时一定要注意。
  • erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。
  • 如果queue是非持久化queue,则如果创建queue的那个节点失败,发送方和接收方可以创建同样的queue继续运作。但如果是持久化queue,则只能等创建queue的那个节点恢复后才能继续服务。
  • 在集群元数据有变动的时候需要有disk node在线,但是在节点加入或退出的时候所有的disk node必须全部在线。如果没有正确退出disk node,集群会认为这个节点当掉了,在这个节点恢复之前不要加入其它节点。

六、安装过程中遇到的错误解决:

加入Rabbit集群时报错 - Error: mnesia_unexpectedly_running

[email protected]:~#rabbitmqctl stop_app

[email protected]:~#rabbitmqctl reset

[email protected]:~#rabbitmqctl cluster [email protected]

[email protected]:~#rabbitmqctl start_app

时间: 2024-12-24 19:17:09

Linux CentOS6.5下RabbitMQ集群部署配置的相关文章

Rabbitmq集群部署手册

一.Rabbitmq集群部署手册 1.环境介绍 系统环境:Red HatEnterprise Linux Server release 6.2 (Santiago) 内核版本:Linux zxt-02.com2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64GNU/Linux 软件版本:otp_src_17.3:rabbitmq-server-3.2.4:Python 2.6.6:simple

分布式rabbitmq集群部署

分布式rabbitmq集群部署本次部署使用的三台centos服务器安装的erlang 版本为 21.0.4安装的rabbitmq版本为3.7.8-rc.2在三台服务器中分别安装rabbitmq-serverrabbitmq通信是建立在erlang环境中 所以需要先安装erlang环境 因为国外的erlang官方地址中中国不能直接访问,所以我们使用第三方包https://github.com/rabbitmq/erlang-rpm 安装说明地址 修改系统repo包文件修改repo# In /etc

Ubuntu 下 rabbitmq集群配置

1,执行在host文件中配置主名字 192.168.1.21 <span style="font-family: Arial, Helvetica, sans-serif;">platform-api1</span> 192.168.1.22 <span style="font-family: Arial, Helvetica, sans-serif;">platform-api2</span> 2,分别启动21,22

Rabbitmq集群部署Haproxy

安装前的说明: 1.为了配合做rabbitmq的负载均衡,本次的安装包是安装的低版本1.5.8版本,下载包的地址:https://src.fedoraproject.org/repo/pkgs/haproxy/2.按照上两篇博客,先把rabbitmq集群装好:单机版Rabbitmq部署:http://blog.51cto.com/10950710/2135676Rabbitmq集群部署:http://blog.51cto.com/10950710/2135717 安装步骤: 1.将haproxy

高可用RabbitMQ集群安装配置

RabbitMQ集群安装配置+HAproxy+Keepalived高可用 rabbitmq 集群 消息队列 RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然.AMQP的主

redis集群部署配置

Redis集群部署配置 测试环境:服务器系统为centos6.5,redis版本为3.2.2,使用一台机器,模拟6个redis实例来创建redis集群,其中3主3从 分别建立redis的安装目录,并复制redis.conf到安装目录下. 2.修改每个目录下的redis.conf配置文件 port 7000   #端口 daemonize yes cluster-enabled yes   #开启集群模式 cluster-config-file nodes-7000.conf  #集群配置文件 c

RabbitMQ集群部署和高可用

RabbitMQ 安装和使用 1.安装依赖环境 在 http://www.rabbitmq.com/which-erlang.html 页面查看安装rabbitmq需要安装erlang对应的版本 在 https://github.com/rabbitmq/erlang-rpm/releases 页面找到需要下载的erlang版本,`erlang-*.centos.x86_64.rpm`就是centos版本的. 复制下载地址后,使用wget命令下载,wget -P /home/download h

私有云Rabbitmq 集群部署

默认openstack使用rabbitmq做信息队列,如果想要是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文介绍如何使用rabbitmq 做高可用 高可用方法 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收. 这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制.本方案中搭建 3 个节点,并且都是磁盘节点(所有节点

Windows环境下 RabbitMQ集群配置

一.在集群机器上安装erlang环境.安装rabbitmq; 二. 假设,192.168.10.111的节点名称为 [email protected],192.168.10.112的节点名称为 [email protected] 1.分别在两台机器的rabbitmq数据.日志文件所在路径下(本文为C:\Users\Administrator\AppData\Roaming\RabbitMQ),创建集群配置文件rabbitmq.config. rabbitmq.config是一个标准的erlang