千万PV

RabbitMQ群集配置

(1)什么是RabbitMQ

RabbitMQ (Message Qucue, 消息队列)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用链接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。 排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求

(2)RabbitMQ应用场景

在项目中,将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大地节省了服务器的请求响应时间,从而提高了系统的吞吐量。 RabbitMQ支持消息的持久化,也就是数据写在磁盘上。为了数据安全考虑,大多数企业都会选择持久化。当然如果觉得不需要消息持久化,那么使用内存节点即可!其实最合适的方案就是既有内存节点,又有磁盘节点,下面的案例就是这样一个例子。 消息队列持久化包括了3个部分:

  • (1) Exchange持久化,在声明时指定durable=> 1。
  • (2) Queue持久化,在声明时指定durable=> 1。
  • (3)消息持久化,在投递时指定delivery. mode=>2 (1是非持久化)。

实现步骤

设计架构模式:

在一个集群里,有三台服务器,其中一台使用磁盘模式,另两台使用内存模式。两台内存模式的节点无疑速度更快,因此通过客户端连接访问它们。使用客户端不可能分别连接两个内存节点,肯定是通过前端反向代理左轮询分发请求。但是相心前端反向代理服务器故障,可以通过Kepint软件o一个离可用架构。 而磁盘模式的节点,由于磁盘I0相对较慢,因此仅作数据备份使用。注意这里请将三台服务器都连接上互联网并安装软件包。另外RabbitMQ集点必须在同一个网段里,如果是跨广域网,效果就会变差。

RabbitMQ群集具体配置信息表如下

IP地址 主机名 操作系统 防火墙和SElinux 用途
192.168.179.128 mq1 CentOS7 关闭 磁盘节点
192.168.179.129 mq2 CentOS7 关闭 内存节点
192.168.179.130 mq3 CentOS7 关闭 内存节点

配置RabbitMQ群集

(1)关闭防火墙和SElinux

#三台都要关
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

(2)修改主机名

[root@localhost ~]# vim /etc/hostname    //其他两台相同
  mq01.localdomain

(3)修改hosts文件

![image]千万PV,RabbitMQ群集配置

(4)安装yum源

[root@mq01 ~]# yum install -y epel-release
[root@mq01 yum.repos.d]# yum install -y rabbitmq-server

-----------如果安装不了请执行下列操作---------
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum -y install epel-release

yum clean all && yum makecache

查看配置

#//查看插件安装情况
[root@mq01 yum.repos.d]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list

#//启用rabbitmq_management服务
[root@mq01 yum.repos.d]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management

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

检查三台的集群状态,目前相互独立,没有形成集群。

千万PV,RabbitMQ群集配置

systemctl stop rabbitmq-server.service //停止三台服务器

#//三台值配置成一样的,复制内容到其他两台
vi /var/lib/rabbitmq/.erlang.cookie
千万PV,RabbitMQ群集配置

more /var/lib/rabbitmq/.erlang.cookie //验证三台服务器上的cookie,集群场景下,三台的值需要相同

systemctl start rabbitmq-server.service

netstat -anpt | grep 5672

在02和03上操作---内存节点

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盘节点

rabbitmqctl start_app 

验证群集状态

[root@mq01 ~]# rabbitmqctl cluster_status 
Cluster status of node rabbit@mq01 ...
[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]},
 {running_nodes,[rabbit@mq03,rabbit@mq02,rabbit@mq01]},
 {cluster_name,<<"rabbit@mq01">>},
 {partitions,[]}]
...done.

http://192.168.175.132:15672/ //默认用户名:guest 密码:guest
千万PV,RabbitMQ群集配置

登陆进入页面
千万PV,RabbitMQ群集配置

创建消息队列
千万PV,RabbitMQ群集配置

---------以下简单增加消息队列-----

queues->
name:aa  //消息队列的名称
durability:durable  //是否支持持久化
node:rabbit@mq01
arguments:x-ha-policy = all

add queue 完成

在新建一个bb队列。arguments项不填写。

add queue 完成

--------------以下在aa和bb队列中新建消息----

点aa->Publish message

mode:2-persistent
haders a = 123
properties message_id=1

payload:1234

publish message 

close 完成

---------------------------------------------
service rabbitmq-server stop //把mq01关闭

http://192.168.80.185:15672/ 在02或03上测试消息是否存在。

service rabbitmq-server stop //把02关闭在03上查看应该消息还在,注意地址

http://192.168.80.186:15672/

service rabbitmq-server start //把01和02都启动,消息不同步

rabbitmqctl sync_queue aa //在任意节点手动同步队列

ll /var/lib/rabbitmq

ll /var/lib/rabbitmq/mnesia/rabbit\@mq01/queues/  //在mq01上查看消息队列中的信息
ll /var/lib/rabbitmq/mnesia/rabbit\@mq02/queues/
ll /var/lib/rabbitmq/mnesia/rabbit\@mq03/queues/

-------------------以下JMeter压力测试软件----https://jmeter.apache.org/download_jmeter.cgi

下载-Binaries 包

-------在微软系统下配置JAVA环境---

安装jdk-8u161-windows-x64

右击电脑-》属性-》高级-》环境变量-》系统变量-》PATH-》编辑-》新建-》加入下面的路径-》确定

C:\Program Files\Java\jdk1.8.0_161\bin

cmd
java -version

解压JMeter,然后到解压目录中的bin目录下运行,jmeter.bat 启动程序

在选项中选择语言环境。

使用技巧,查找相关资料。