在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服务启动起来
不过需要将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种方式,一种是直接在管理台控制,另外一种是在声明队列的时候控制。
声明队列控制声明队列的时候可以加入镜像队列参数
只需要在节点端上输入下面的命令即可
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做负载均衡的插件