首页天道酬勤rabbitmq集群架构,rabbitmq集群搭建

rabbitmq集群架构,rabbitmq集群搭建

张世龙 05-12 07:52 48次浏览

在Linux上安装RabbitMq 关闭防火墙这里主要为以后创建RabbitMq群集和主机访问管理页面做准备

#关闭防火墙systemctl stop firewall d.service # #禁止启动systemctldisablefirewalld.service http://www.Sina.com/rabit MQ为erlabit

安装erlang

wget 3358 www.rabbit MQ.com/releases/Erlang/Erlang-18.2-1.el6.x 8664.rpm http://ww.Sina.com /

Erlang rpm-ihv http://www.rabbit MQ.com/releases/Erlang/Erlang-18.2-1.el6.x 8664.rpm http://www.Sina.com/3http://

rpm-- import https://dl.bin tray.com/rabbit MQ/keys/rabbit MQ-release-signing-key.ASC http://www.Sina.com /

wget 3358 www.rabbit MQ.com/releases/rabbit MQ-server/v3.6.6.6-1. el7.noarcy

rpm-ihvrabbitmq-server-3.6.6-1.el7.noarch.rpm安装过程中可能会提示需要一个名为socat的插件。 如果提示,请安装socat,然后安装RabbitMQ。 以下是socat的安装

yuminstallsocat http://www.Sina.com /现在安装了rabbitmq。 可以通过执行以下命令启动rabbitmq

在service rabbitmq-server start中,与windows环境一样,rabbitmq为linux提供管理插件,并安装rabbitmq管理插件

安装rabbit MQ-pluginsenablerabbitmq _ management管理插件后,如果安装了浏览器,例如火狐、windows一样,可以使用localhost 33601567777

如果安装在虚拟机上,也可以直接从主机访问

rabbitmq集群构建概述由于rabbitmq是用erlang语言开发的,所以erlang天生就支持分布式,当然rabbitmq也充分支持集群模式的执行。

rabbitmq的集群分为下载erlang安装erlang两种模式。 当然,镜像模式是在默认模式的基础上添加了一定的结构。

在rabbitmq群集中,所有节点(一个rabbitmq服务器)分为两类:安装rabbitmq装Rabbitmq之前先装一个公钥

下载rabbitmq将群集的所有信息(如交换机、队列等)持久化到磁盘。安装只要把这些信息保存在内存中,说白了,再重新启动就会消失。 为了考虑可用性,rabbitmq正式强调群集环境至少需要一个磁盘节点。 如果只有一个启动rabbitmq磁盘节点,且该唯一磁盘节点正好关闭,则群集可以正常工作,但不能执行更改操作,如添加队列、添加交换机或添加/删除新节点。

集群的构建默认模式具体来说,我想让rabbitmq实现集群,但是首先需要更改系统的hostname。 (因为rabbitmq集群的节点名称正在读取hostname。)

这里要构建具有三个节点的集群,所以需要三个hostname。 为便于记录每个节点上系统的hostname,请重命名为

rabbitmq1

rabbitmq2

rabbitmq3

在linux上修改hostname的命令如下

hostnamectl set-hostname [name]记得修改完成后,rabbitmq必须重新启动服务器才能获取节点的名称

最后修改所有节点的hostname后,可以将所有节点的hostname和相应的IP地址写入每个节点的ho’s’t中

2. 镜像模式

由于群集中的每个节点之间需要通信,因此必须关闭防火墙

#关闭防火墙systemctl stop firewalld.servic

e #禁止开机自启 systemctl disable firewalld.service 修改.erlang.cookie文件

这个文件中存着的是erlang对这个机器的一个标识,所以为了让erlang将这些节点做集群,必须让这个文件保持一致。

这个文件的路径是/var/lib/rabbitmq/.erlang.cookie

启动节点

首先需要将节点的RabbitMq服务启动起来

service rabbit-server start

不过需要将app应用关闭,在将集群搭建好后在启动,关闭应用

rabbitmqctl stop_app 搭建集群

只需要将其中其他的节点加入到一个节点形成集群。

下面是让rabbitmq2加入rabbitmq1形成一个集群,这时在rabbitmq2端的操作

# 最后面的参数-ram是使该节点成为一个内存结点# -disk是磁盘节点 rabbitmqctl joincluster rabbit@rabbitmq1 --ram# 启动应用rabbitmqctl start_app

在加入节点后就可以启动应用了,后面再让rabbitmq3也加入到集群中,还是同样的命令。

rabbitmqctl joincluster rabbit@rabbitmq1 --diskrabbitmqctl start_app

这样三个节点组成的rabbitmq集群就搭建好了

访问管理页面

现在不论是访问哪一个节点的管理页面都是一样的,显示的内容也是同步的,也可以查看各个节点的状态。

集群相关的命令

启动RabbitMQ节点

rabbitmq-server -detached

启动RabbitMQ应用,而不是节点

rabbitmqctl startapp

停止应用

rabbitmqctl stopapp

查看状态

rabbitmqctl status

新增账户

rabbitmqctl adduser mq 123456 rabbitmqctl setusertags mq administrator

启用RabbitMQManagement

rabbitmq-plugins enable rabbitmqmanagement

集群状态

rabbitmqctl clusterstatus

节点摘除

rabbitmqctl forgetclusternode rabbit@[nodeName]

重置

rabbitmqctl reset application 镜像模式

再介绍镜像模式之前,我们先说说默认普通模式的特点。

在普通模式下的rabbitmq集群,会把所有节点的交换机信息和队列的元数据(队列数据分为两种,一种为队列里面的消息, 另外一种是队列本身的信息,比如队列的最大容量,队列的名称,等等配置信息, 后者称之为元数据) 进行复制,确保所有节点都有一份。

而镜像模式,则是把所有的队列数据完全同步(元数据和队列中的消息,当然对性能肯定会有一定影响),当对数据可靠性要求高时,可以使用镜像模式。

镜像模式的搭建

实现镜像模式也非常简单,有2种方式,一种是直接在管理台控制,另外一种是在声明队列的时候控制

声明队列控制

声明队列的时候可以加入镜像队列参数

参数名配置作用x-ha-policy创建HA队列x-ha-nodesHA队列的分布节点管理台控制

只需要在节点端上输入下面的命令即可

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

下面是对这些配置的解释

-p Vhost:可选参数,针对指定vhost下的queue进行设置Name:policy的名称Pattern:queue的匹配模式(正则表达式)Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes all:表示在集群中所有的节点上进行镜像exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定 ha-params:ha-mode模式需要用到的参数ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual

假如想配置所有名字开头为policy的队列进行镜像,镜像数量为1那么命令如下

rabbitmqctl setpolicy hapolicy "^policy_" '{"ha-mode":"exactly","ha-params":1,"ha-sync-mode":"automatic"}'

所有节都有一份队列和交换机的信息
不过队列的信息有两种
队列的元数据(队列的配置)
队列中的消息
对于所有节点都有一份队列的元数据,但队列的中的消息只存在一个节点中
但某一节点接收到某个队列的消息,它非根据队列的元数据将消息发送到真正存有队列的消息的节点

扩展

HAProxy是RabbitMq做负载均衡的插件

rabbitmq镜像集群,java实现消息队列 rabbitmq脱离集群,rabbitmq集群需要几台机器