rabbitmq集群安装与配置(故障恢复)
0、首先按照http://www.cnblogs.com/zhjh256/p/5922562.html在至少两个节点安装好(不建议单机,没什么意义)
1、先了解rabbitmq集群架构,http://www.cnblogs.com/zhjh256/p/6368288.html
2、vi /etc/hosts 在两个节点分别添加别名,互ping对方,确保通。确保防火墙没有开或者相应的端口开放
3、设置erlang集群通信用的cookie,通常每种集群都有一种机制,可能是共享磁盘比如rac或者session比如tomcat亦或是token比如分布式系统
RabbitMQ节点之间和命令行工具 (e.g. rabbitmqctl)是使用Cookie互通的,Cookie是一组随机的数字+字母的字符串。当RabbitMQ服务器启动的时候,Erlang VM会自动创建一个随机内容的Cookie文件。如果是通过rpm安装RabbitMQ的话,Erlang Cookie 文件在/var/lib/rabbitmq/.erlang.cookie。如果是通过源码或者二进制解压安装的RabbitMQ,Erlang Cookie文件$HOME/.erlang.cookie。确保组成集群的每个erlang节点的cookie相同。
[root@dev3 ~]# scp .erlang.cookie devel2:/root/
The authenticity of host 'devel2 (172.18.30.192)' can't be established.
RSA key fingerprint is e3:76:d5:eb:d3:7d:86:43:de:bc:5d:31:cb:21:0d:d2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'devel2,172.18.30.192' (RSA) to the list of known hosts.
root@devel2's password:
.erlang.cookie 100% 20 0.0KB/s 00:00
[root@dev3 ~]# cat .erlang.cookie
YQSISAMKQWVOZMRQZJDV
[root@dev3 ~]# chmod 400 .erlang.cookie
# 必须确保.erlang.cookie的权限位400,否则启动的时候会报“{error_logger,{{2017,2,27},{20,11,25}},"Cookie file /root/.erlang.cookie must be accessible by owner only",[]}”
[root@devel2 ~]# chmod 400 .erlang.cookie
4、后台模式启动rabbitmq
[root@dev3 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@devel2 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@devel2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@devel2 ...
[{nodes,[{disc,[rabbit@devel2]}]},
{running_nodes,[rabbit@devel2]},
{cluster_name,<<"rabbit@devel2">>},
{partitions,[]}]
[root@devel2 ~]# rabbitmqctl stop_app
Stopping node rabbit@devel2 ...
[root@devel2 ~]# rabbitmqctl join_cluster rabbit@dev3
Clustering node rabbit@devel2 with rabbit@dev3 ...
[root@devel2 ~]# rabbitmqctl start_app
Starting node rabbit@devel2 ...
[root@devel2 ~]# rabbitmqctl cluster_status ##默认都是disk模式,如果要ram模式,则加上--ram选项
Cluster status of node rabbit@devel2 ...
[{nodes,[{disc,[rabbit@dev3,rabbit@devel2]}]},
{running_nodes,[rabbit@dev3,rabbit@devel2]},
{cluster_name,<<"rabbit@dev3">>},
{partitions,[]}]
5、启用控制台插件
[root@devel2 ~]# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@devel2
|/
[ ] amqp_client 3.5.7
[ ] cowboy 0.5.0-rmq3.5.7-git4b93c2d
[ ] mochiweb 2.7.0-rmq3.5.7-git680dba8
[ ] rabbitmq_amqp1_0 3.5.7
[ ] rabbitmq_auth_backend_ldap 3.5.7
[ ] rabbitmq_auth_mechanism_ssl 3.5.7
[ ] rabbitmq_consistent_hash_exchange 3.5.7
[ ] rabbitmq_federation 3.5.7
[ ] rabbitmq_federation_management 3.5.7
[ ] rabbitmq_management 3.5.7
[ ] rabbitmq_management_agent 3.5.7
[ ] rabbitmq_management_visualiser 3.5.7
[ ] rabbitmq_mqtt 3.5.7
[ ] rabbitmq_shovel 3.5.7
[ ] rabbitmq_shovel_management 3.5.7
[ ] rabbitmq_stomp 3.5.7
[ ] rabbitmq_test 3.5.7
[ ] rabbitmq_tracing 3.5.7
[ ] rabbitmq_web_dispatch 3.5.7
[ ] rabbitmq_web_stomp 3.5.7
[ ] rabbitmq_web_stomp_examples 3.5.7
[ ] sockjs 0.3.4-rmq3.5.7-git3132eb9
[ ] webmachine 1.10.3-rmq3.5.7-gite9359c7
[root@devel2 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@devel2... started 6 plugins.
6、创建用户。默认情况下,内置的guest只能通过localhost访问,通常我们都是在linux服务器上安装rabbitmq,在本地客户端操作,所以需要创建管理用户。
[root@devel2 ~]# rabbitmqctl add_user admin admin
Creating user "admin" ..
[root@devel2 ~]# rabbitmqctl set_permissions -p / admin '.*' '.*' '.*' ##仅仅设置权限是不足以登录服务器进行管理的,还需要为用户分配user_tag,简单理解就是角色
Setting permissions for user "admin" in vhost "/" ...
当前有如下tag:

[root@devel2 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
[root@devel2 ~]# rabbitmqctl add_user monitor monitor
Creating user "monitor" ...
[root@devel2 ~]# rabbitmqctl set_user_tags monitor monitoring
Setting tags for user "monitor" to [monitoring] ...
7、登录控制台查看状态

每个节点都需要启用manage插件才能显示统计信息。
8、设置mirror,一般来说应该在设计阶段或者开发早期根据应用模块或者子系统规划exchange/queue的命名规范,这样便于从维护的角度进行统一处理,而不是将MQ作为一个临时补充。
比如,设置sys开头的队列复制到所有节点:
[root@dev3 ~]# rabbitmqctl set_policy -p / ha-allqueue "^sys" '{"ha-mode":"all"}'
Setting policy "ha-allqueue" for pattern "^sys" to "{\"ha-mode\":\"all\"}" with priority "0" ...

9、测试某节点宕机。
[root@dev3 ~]# kill -9 19496

宕机期间消费消息/并生成新的消息:

重启宕机的节点:
[root@dev3 ~]# rabbitmq-server -detached #因为已经是cluster的一部分,所以就不需要重新join了,启动的时候会自动join。否则会出错如下:
[root@dev3 ~]# rabbitmqctl join_cluster rabbit@devel2
Clustering node rabbit@dev3 with rabbit@devel2 ...
{"init terminating in do_boot",{function_clause,[{rabbit_ctl_misc,print_cmd_result,[join_cluster,already_member],[]},{rabbit_cli,main,,[]},{init,start_it,,[]},{init,start_em,,[]}]}} Crash dump is being written to: erl_crash.dump...done
init terminating in do_boot ()
启动后,可以发现有些queue没有同步,需要人工进行同步。

同步后可见消息都是正确的,已经消费的会删掉,新增的会拷贝过去。
10、如果某些时候因为过去时间较长、消息较多,不想同步,而是作为新节点重新join,怎么办?
可以在目标节点执行
rabbitmqctl reset

然后重新执行加入节点的步骤即可。
11、rabbitmq集群日常维护的注意事项和故障恢复可参考rabbitmq集群故障恢复详解。
rabbitmq集群安装与配置(故障恢复)的更多相关文章
- Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置
RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...
- Rabbitmq集群安装配置
Rabbitmq集群安装与配置 一.rabbitmq安装环境准备 1.安装环境准备 这里,我们以两个节点为例进行安装,一个节点为内存节点,另一个节点为硬盘节点,具体可根据自己需要分配节点. 安装系统 ...
- RabbitMQ集群安装配置+HAproxy+Keepalived高可用
RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...
- 1.rabbitmq 集群安装及负载均衡设置
标题 : 1.rabbitmq 集群安装及负载均衡设置 目录 : RabbitMQ 序号 : 1 vim /etc/pam.d/login #对于64位系统,在文件中添加如下行 session req ...
- Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
Redis简介 Redis是一个基于C语言开发的开源(BSD许可),开源高性能的高级内存数据结构存储,用作数据库.缓存和消息代理.它支持数据结构,如 字符串.散列.列表.集合,带有范围查询的排序集,位 ...
- ActiveMQ 高可用集群安装、配置(ZooKeeper + LevelDB)
ActiveMQ 高可用集群安装.配置(ZooKeeper + LevelDB) 1.ActiveMQ 集群部署规划: 环境: JDK7 版本:ActiveMQ 5.11.1 ZooKeeper 集群 ...
- MySQL集群安装与配置
MySQL集群安装与配置 文章目录 [隐藏] 一.mysql集群安装 二.节点配置 三.首次启动节点 四.测试服务是否正常 五.安全关闭和重启 MySQL Cluster 是 MySQL 适合于分 ...
- rabbitmq集群部署及配置
消息中间件rabbitmq,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步.本篇将以rabbitmq+HA方式进行部署. 一.原理介绍 rabbitmq是依据erlang的分 ...
- rabbitmq 集群安装
1.安装模式分为三种:单主机模式.普通集群模式.镜像集群模式. 单主机模式:rabbitmq运行在一台主机上,生产环境不建议使用该模式,性能有限.如果该台主机down机,整个服务将不可用. 普通集群模 ...
随机推荐
- Linux开机自启配置
1.将自己写好的脚本或命令写入/etc/rc.local文件中.系统会根据该文件来启动所指定的脚本或命令. 例:我有一个脚本:/root/usr/local/scripts/1234.sh 那么直接将 ...
- Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
1. 已经安装cuda但是tensorflow仍然使用cpu加速的问题 电脑上同时安装了GPU和CPU版本的TensorFlow,本来想用下面代码测试一下GPU程序,但无奈老是没有调用GPU. imp ...
- Tensorflow实现手写体分类(含dropout)
一.手写体分类 1. 数据集 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data im ...
- 移动端--touch事件与点透问题
也来说说touch事件与点击穿透问题: http://blog.csdn.net/alex8046/article/details/52299785
- Python解决乱码问题
解决python乱码问题 字符串在python的内部采用unicode的编码方式,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode ...
- 【cocos2d-js官方文档】事件分发监听机制(摘录)
简介 游戏开发中一个很重要的功能就是交互,如果没有与用户的交互,那么游戏将变成动画,而处理用户交互就需要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件处理逻 ...
- JavaScript学习笔记之call和apply
前端的知识面太广了,想要记住所有知识点是不可能的,所以将这些学过的记录下来,随时都可以翻开来参考 1.call方法 调用一个对象的一个方法,call(this, arg1, arg2,argN);用来 ...
- caffe的运行create_data.sh前对VOC2007图片格式的更改
运用caffe进行深度学习之前需要对图片进行预处理,将图片的大小,格式等进行修改 将300*300的图片改为256*256格式 则将以下参数改为: min_dim=256 max_dim=256 wi ...
- 爬取笔下wenxue小说
import urllib.request from bs4 import BeautifulSoup import re def gethtml(url): page=urllib.request. ...
- JavaScript--函数、匿名函数和自执行函数详解
函数的声明及调用 1.函数的声明格式: function 函数名([参数1],[参数2],.....){ //函数体代码 [return 返回值 ...