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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


本文出自 “dotlim的博客” 博客,请务必保留此出处http://dotlim.blog.51cto.com/12633007/1956374

以上是关于Linux CentOS6.5下RabbitMQ集群部署配置的主要内容,如果未能解决你的问题,请参考以下文章

Centos6.5 安装 RabbitMQ3.6.1

centos6.5 安装rabbitMQ3.6.6

rabbitmq集群搭建(centos6.5)

centos6.5安装rabbitmq3.6.14

centos6.5 已 zero-dependency Erlang from RabbitMQ 搭建环境

linux下centOS6.5下安装jdk