千万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
#三台都要关
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
(2)修改主机名
[[email protected] ~]# vim /etc/hostname //其他两台相同
mq01.localdomain
(3)修改hosts文件
![image]
(4)安装yum源
[[email protected] ~]# yum install -y epel-release
[[email protected] 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
查看配置
#//查看插件安装情况
[[email protected] yum.repos.d]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
#//启用rabbitmq_management服务
[[email protected] yum.repos.d]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
[[email protected] ~]# systemctl start rabbitmq-server.service
检查三台的集群状态,目前相互独立,没有形成集群。
systemctl stop rabbitmq-server.service //停止三台服务器
#//三台值配置成一样的,复制内容到其他两台
vi /var/lib/rabbitmq/.erlang.cookie
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 [email protected] //加入到磁盘节点
rabbitmqctl start_app
验证群集状态
[[email protected] ~]# rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]},{ram,[[email protected],[email protected]]}]},
{running_nodes,[[email protected],[email protected],[email protected]]},
{cluster_name,<<"[email protected]">>},
{partitions,[]}]
...done.
http://192.168.175.132:15672/ //默认用户名:guest 密码:guest
登陆进入页面
创建消息队列
---------以下简单增加消息队列-----
queues->
name:aa //消息队列的名称
durability:durable //是否支持持久化
node:[email protected]
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 启动程序
在选项中选择语言环境。
使用技巧,查找相关资料。
原文地址:http://blog.51cto.com/13645280/2155033