引言:
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发。RabbitMQ据说具有良好的性能和时效性,同时还能够非常好的支持集群和负载部署,非常适合在较大规模的分布式系统中使用。
rabbitmq的安装:
1.介绍:
Rabbit模式大概分为以下三种:单一模式、普通模式、镜像模式 单一模式:
普通模式:默认的集群模式。 queue创建之后,如果没有其它policy,则queue就会按照普通模式集群。对于Queue来说,消息实体只存在于其中一个节点,A、B两个节点仅有相同的元数据,即队列结构,但队列的元数据仅保存有一份,即创建该队列的rabbitmq节点(A节点),当A节点宕机,你可以去其B节点查看,./rabbitmqctl list_queues 发现该队列已经丢失,但声明的exchange还存在。 当消息进入A节点的Queue中后,consumer从B节点拉取时,RabbitMQ会临时在A、B间进行消息传输,把A中的消息实体取出并经过B发送给consumer。 所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连A或B,出口总在A,会产生瓶颈。 该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体。 如果做了消息持久化,那么得等A节点恢复,然后才可被消费;如果没有持久化的话,队列数据就丢失了。
镜像模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。 该模式解决了上述问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在consumer取数据时临时拉取。 该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。 所以在对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置policy,然后客户端创建队列的时候,rabbitmq集群根据“队列名称”自动设置是普通集群模式或镜像队列。具体如下: 队列通过策略来使能镜像。策略能在任何时刻改变,rabbitmq队列也近可能的将队列随着策略变化而变化;非镜像队列和镜像队列之间是有区别的,前者缺乏额外的镜像基础设施,没有任何slave,因此会运行得更快。 为了使队列称为镜像队列,你将会创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。
2.单机安装:
准备工作: 安装时请注意: 因为rabbtmq是基于erlang语言开发,所以安装之前需要安装erlang环境,本节采用rabbimq3.7.x为演示版本(后面会有专门一节介绍3.8系列版本,为了稳定,我采用3.7来搭建环境,因为还要搭建集群环境)。
rabbitmq官网:https://www.rabbitmq.com/
erlang下载:
官网下载 : http://erlang.org/download/
github 下载: https://github.com/rabbitmq/erlang-rpm/releases
rabbitmq系列版本下载:https://github.com/rabbitmq/rabbitmq-server/releases
rabbitmq3.6.15版本之前下载:https://www.rabbitmq.com/releases/rabbitmq-server/
# 注意:
rabbitmq的安装和erlang的版本有一定的匹配对应关系,如果安装的版本不对会安装不了,这点请大家注意:
关于rabbitmq和erlang对应关系可以参考:https://www.rabbitmq.com/which-erlang.html
2.1 下载:
我准备的版本如下:
2.2 安装步骤:
2.2.1:准备一台机器,设置好ip,关闭防火墙,使用我们的远程工具xshell或者secureCRT连接上去
2.2.2: 把上面下载的安装包上传到指定目录,或者家目录下。我是以root用户登录,在root家目录创建了mq文件夹(注意:我的虚拟机系统都是centos7的,所以我选择的安装包都是el7的)
2.2.3 安装erlang和socat
rpm -ivh erlang-22.3-1.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
2.2.4 安装rabbitmq:
rpm -ivh rabbitmq-server-3.7.23-1.el7.noarch.rpm
** 安装rabbitmq, 配置文件模板的位置需要修改
默认配置文件模板会在/usr/share/doc/rabbitmq-server-3.7.23/rabbitmq.config.example 。需要把配置文件copy到/etc/rabbimq/下
2.2.5 修改配置文件到/etc/rabbimq/下
cp /usr/share/doc/rabbitmq-server-3.7.23/rabbitmq.config.example /etc/rabbitmq/
mv rabbitmq.config.example rabbitmq.config --修改配置文件名字 rabbitmq.config才是系统识别的名字
2.2.6修改配置文件,打开来宾账户。默认是关闭的。
vim rabbitmq.config
修改前: %% {loopback_users, []},
修改后: {loopback_users, []}
注意,%% 和 , 都要去除
2.2.7 安装rabbitmq的桌面插件:
rabbitmq-plugins enable rabbitmq_management
2.2.8 启动rabbitmq
## 安装rabbitmq的后,这个服务会自动生成,rabbitmq-server可以直接使用
systemctl start rabbitmq-server --启动
systemctl stop rabbimq-server --停止服务
systemctl status rabbitmq-server --查看启动状态
2.2.9 可视化链接测试:
到步骤2.2.8 我们已经完成了rabbitmq单机版的安装,它可以满足一般业务请求。
访问:http://192.168.236.139:15672/#/ 注意:我自己搭建的主机是192.168.236.139,可视化端口是15672
默认账户密码是 guest / guest -- 这步是因为我打开来宾账户才允许登录,不打开是不允许登录的。进去主页面如下:
3.集群安装:
## 集群搭建和单机搭建步骤都差不多。大家在搭建的时候注意一些小细节就可以了
安装步骤:
1.准备三台主机,ip对应关系如下
192.168.236.138 mq1-master
192.168.236.136 mq2-slave1
192.168.236.137 mq3-slave2
2.修改/etc/hosts文件 主机之间识别
2.1.先修改mq1-master节点
192.168.236.138 mq1-master
192.168.236.136 mq2-slave1
192.168.236.137 mq3-slave2
保存退出:
scp /etc/hosts root@mq2-slave1:/etc/
scp /etc/hosts root@mq3-slave3:/etc/
## 使用scp命令吧hosts文件同步到其他两台主机,不需要重启。
2.2 关闭三台机器的防火墙:
systemctl stop firewalld --关闭
3.上传安装包
mkdir mq -- 在这我创建了一个mq来保存安装包
erlang-22.3-1.el7.x86_64.rpm
rabbitmq-server-3.7.23-1.el7.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
## 使用scp命令同步到另外两台主机
cd -- 先回到家目录
scp -r mq/ root@mq2-slave1:/root/
scp -r mq/ root@mq3-slave2:/root/
4.安装。同单机安装顺序
rpm -ivh erlang-22.3-1.el7.x86_64.rpm
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh rabbitmq-server-3.7.23-1.el7.noarch.rpm
## 在mq2-slave1和mq3-slave2机器上也执行上述操作
5.复制配置文件到/etc/rabbitmq/下
cp /usr/share/doc/rabbitmq-