环境

10.0.0.20 node1
10.0.0.21 node2
10.0.0.22 node3

搭建(在所有节点执行)

添加EPEL源

[root@node1 ~]# rpm -Uvh https://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

添加Erlang

[root@node1 ~]# rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

安装RabbitMQ

[root@node1 ~]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
[root@node1 ~]# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
[root@node1 ~]# yum install -y rabbitmq-server-3.6.-.el7.noarch.rpm

启动服务

[root@node1 ~]# systemctl enable rabbitmq-server.service
[root@node1 ~]# systemctl start rabbitmq-server.service

查看端口监听状态 5672为集群间通信端口,15672为web端管理端口

[root@node1 ~]# netstat -atn |grep 

启用RabbitMQ监控插件

[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management

RabbitMQ用户管理

添加用户为:root ,密码为:admin)

[root@node1 ~]# rabbitmqctl add_user admin admin

设置用户角色(设置admin用户为管理员角色)

[root@node1 ~]# rabbitmqctl set_user_tags admin administrator

设置用户权限(设置admin用户配置、写、读的权限)

[root@node1 ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

删除用户(删除guest用户)

[root@node1 ~]# rabbitmqctl delete_user guest

RabbitMQ集群配置

设置hosts解析,所有节点配置相同

[root@node1 ~]# vim /etc/hosts
10.0.0.20 node1
10.0.0.21 node2
10.0.0.22 node3

设置节点间的认证 (Erlang Cookie)

Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie。这里将 node3 的该文件复制到 node1、node2,由于这个文件权限是 400,所以需要先修改 node1、node2 中的该文件权限为 777,然后将 node3 中的该文件拷贝到 node1、node2,最后将权限和所属用户/组修改回来。

将node3 的cookie发送到 node1和node2 上

[root@node1 ~]# chmod  /var/lib/rabbitmq/.erlang.cookie
[root@node2 ~]# chmod /var/lib/rabbitmq/.erlang.cookie
[root@node3 ~]# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.20:/var/lib/rabbitmq/.erlang.cookie
[root@node3 ~]# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.:/var/lib/rabbitmq/.erlang.cookie
[root@node1 ~]# chmod /var/lib/rabbitmq/.erlang.cookie
[root@node2 ~]# chmod /var/lib/rabbitmq/.erlang.cookie

分别启动独立的单机版rabbitmq broker节点

[root@node1 ~]# systemctl start rabbitmq-server.service
[root@node1 ~]# rabbitmq-server -detached
[root@node2 ~]# systemctl start rabbitmq-server.service
[root@node2 ~]# rabbitmq-server -detached
[root@node3 ~]# systemctl start rabbitmq-server.service
[root@node3 ~]# rabbitmq-server -detached

查看broker的状态

[root@node1 ~]# rabbitmqctl status
Status of node rabbit@node1 ...
[{pid,},
{running_applications,
[{rabbitmq_management,"RabbitMQ Management Console","3.6.6"},
{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.6"},

查看broker的集群状态

root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]}]},
{running_nodes,[rabbit@node1]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]}]

配置防火墙(如果开启)

[root@node1 ~]# firewall-cmd --permanent --add-port={/tcp,/tcp}
[root@node1 ~]# firewall-cmd --reload

配置集群

默认是磁盘节点,如果是内存节点的话,需要加--ram参数

将node1节点加入node3作为RAM类型节点

[root@node1 ~]#rabbitmqctl stop_app
[root@node1 ~]#rabbitmqctl reset
[root@node1 ~]#rabbitmqctl join_cluster root@node3 --ram
[root@node1 ~]#rabbitmqctl start_app
[root@node1 ~]# rabbitmqctl cluster_status

将node2节点加入node3 作为RAM类型节点

[root@node2 ~]#rabbitmq stop_app
[root@node2 ~]#rabbitmqctl reset
[root@node2 ~]#rabbitmqctl join_cluster root@node3 --rm
[root@node2 ~]#rabbitmqctl start_app
[root@node2 ~]# rabbitmqctl cluster_status
(rabbitmq集群节点有disc 和ram两种类型,一个集群中至少要有一个disc类型的节点,不指定默认加入为disc)

修改集群的名字

[root@node1 ~]#  rabbitmqctl set_cluster_name rabbitMQ
Setting cluster name to rabbitMQ ...
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node3]},{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node2,rabbit@node3,rabbit@node1]},
{cluster_name,<<"rabbitMQ">>},
{partitions,[]},
{alarms,[{rabbit@node2,[]},{rabbit@node3,[]},{rabbit@node1,[]}]}]

重要信息

(1)、当整个集群down掉时,最后一个down机的节点必须第一个启动到在线状态,如果不是这样,节点会等待30s等最后的磁盘节点恢复状态,然后失败。如果最后下线的节点不能上线,可以通过forget_cluster_node 指令来踢出集群

(2)、如果所有的节点不受控制的同时宕机,比如掉电,会进入所有的节点都会认为其他节点比自己宕机的要晚,即自己先宕机,这种情况下可以使用force_boot指令来启动一个节点

打破集群

当一个节点不属于这个集群的时候,我们需要显式的踢出,可以通过本地或者远程的方式

[root@node1 ~]# rabbitmqctl stop_app
[root@node1 ~]# rabbitmqctl reset
[root@node1 ~]# rabbitmqctl start_app
[root@node1 ~]# rabbitmqctl cluster_status

设置镜像队列策略

设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后会自动同步队列消息(我们生产环境采用这个方式)

[root@node1 ~]# rabbitmqctl set_policy ha-all-queue "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
查看状态

查看应用状态

[root@node3 ~]# rabbitmqctl status

查看集群信息

[root@node3 ~]# rabbitmqctl cluster_status

访问任意管理端界面查看

http://ip:15672

HAproxy+Keepalived 高可用

消息队列作为公司的关键基础服务,为给客户端提供稳定、透明的rabbitmq服务,现通过Haproxy+keepalived构建高可用的rabbitmq统一入口,及基本的负载均衡服务

安装

[root@node4 ~]# yum install haproxy keepalived -y

设置开机启动

CentOS 7 下 RabbitMQ 集群搭建的更多相关文章

  1. CentOS 7下ElasticSearch集群搭建案例

    最近在网上看到很多ElasticSearch集群的搭建方法,本人在这人使用Elasticsearch5.0.1版本,介绍如何搭建ElasticSearch集群并安装head插件和其他插件安装方法. 一 ...

  2. RabbitMQ集群搭建和使用

    一.环境准备 1.选择RabbitMQ的版本 http://www.rabbitmq.com/changelog.html 注: 不同版本的Linux选择的RabbitMQ版本也不同,参照 http: ...

  3. Centos6.9下RabbitMQ集群部署记录

    之前简单介绍了CentOS下单机部署RabbltMQ环境的操作记录,下面详细说下RabbitMQ集群知识,RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言, ...

  4. Linux环境下Hadoop集群搭建

    Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...

  5. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  6. Linux下zookeeper集群搭建

    Linux下zookeeper集群搭建 部署前准备 下载zookeeper的安装包 http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper ...

  7. windows下Nacos集群搭建与nginx集成

    前言: nacos集群至少需要三个(一般为奇数个)nacos实 例,其前面顶nginx,外界入口从nginx入 一.windows下Nacos集群搭建 将Nacos的解压包复制分成3份,分别是: na ...

  8. rabbitmq集群搭建方法简介(测试机linux centos)【转】

    本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...

  9. centos7 rabbitmq集群搭建+高可用

    环境 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -r -.el ...

随机推荐

  1. zabbix添加对自定义无规则的关键日志文件的监控

    zabbix添加对自定义无规则日志文件的监控 项目背景及思路: zabbix自带有针对日志文件的监控,自带的监控只能监控到指定文件或者正则匹配的固定日志文件,但当需要监控的文件名没有规律的时候自带监控 ...

  2. Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业

    设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间 ...

  3. Ex 6_17 数量无限的硬币兑换问题_第七次作业

    子问题定义:定义一个数组b,大小比兑换价格的大小多一个元素,其中b[i]表示是否能用面值为x1,x2,x3,..,xn的硬币兑换价格i. 递归关系: 初值设定:设b[0]=true 求解顺序:按下标从 ...

  4. Spark学习之概念了解

    Spark简介: Spark是一个快速且通用的集群计算模型: 1.Spark是快速的:快速是指处理几T到几批数据量的时候,他的处理时间是几秒钟或几分钟,相对于hadoop的几分钟到几小时是非常快速的, ...

  5. Python-bootstrap

    1 引入 如果想要用到BootStrap提供的js插件,那么还需要引入jQuery框架,因为BootStrap提供的js插件是依赖于jQuery的 <link type="text/c ...

  6. 目标检测的图像特征提取之(一)HOG特征(转)

    看过很多介绍HOG的博文,讲的最清楚的是这位博主:http://blog.csdn.net/zouxy09/article/details/7929348 代码如下: #include <ope ...

  7. jmeter参数化、添加变量、生成随机数和导入csv文件数据

    Remarks:本次使用jmeter版本为4.0 以下数据都在必应中演示: 添加普通变量 1.添加 User Defined Variables(用户自定义变量) 2.设置变量 3.使用变量 4.查看 ...

  8. sql如何截取字符

    ---MSSQL1 .SUBSTRING返回字符.binary.text 或 image 表达式的一部分.有关可与该函数一起使用的有效 Microsoft? SQL Server? 数据类型的更多信息 ...

  9. Highcharts实现图形报表(我主要实现javaweb开发的图形报表)

    官网网址:https://www.hcharts.cn/ 中文版的(参考起来方便,你懂的.):http://www.mamicode.com/info-detail-446038.html 网上已经有 ...

  10. 点分治 poj1741

    题意: 给出一颗树,询问有多少对点对距离<=k 链接: http://poj.org/problem?id=1741 题解: 点分治的模板题 点分治即采用分治思想分而治之 考虑一颗子树内距离&l ...