千万 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]
(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
检查三台的集群状态, 目前相互独立, 没有形成集群.
- 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 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
登陆进入页面
创建消息队列
--------- 以下简单增加消息队列 -----
- 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 启动程序
在选项中选择语言环境.
使用技巧, 查找相关资料.
来源: http://blog.51cto.com/13645280/2155033