RabbitMQ是咩???
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现, 能够实现异步消息处理
言简意赅的讲:RabbitMQ是一个消息代理:它接受和转发消息
rabbitmq 优势: 基于 erlang 语言开发, 具有高并发优点、 支持分布式 具有消息确认机制、 消息持久化机制, 消息可靠性和集群可靠性高 简单易用、 运行稳定、 跨平台、 多语言 开源
Queue 的特性: 消息基于先进先出的原则进行顺序消费 消息可以持久化到磁盘节点服务器 消息可以缓存到内存节点服务器提高性能
一.RabbitMQ 单机部署
官方版本 https:
https:
https:
服务器环境:
Ubuntu 1804 安装单机版 RabbitMQ:
https:
第一种方式:apt直接安装 (版本不可选,默认安装)
1.查看当前系统内软件的版本
apt-cache madison rabbitmq-server
2.配置主机名解析
[root@mq-sever1 ~]
10.0.0.101 mq-sever1 mq
3.执行安装
apt -y install rabbitmq-server
4.RabbitMQ 插件管理 端口使用说明
5672
15672
25672
查看有哪些插件
rabbitmq-plugins list
开启web界面管理插件
rabbitmq-plugins enable rabbitmq_management
(3.8.4版本之前账号密码默认是guest登录的)
第二种方式:(可以选择版本) https://www.rabbitmq.com/download.html 1.安装依赖
apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y
2.导入签名的key
apt-key adv --keyserver "hkps://keys.openpgp.org" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
3.添加一个erlang仓库
curl -1sLf https:
Cloudsmith:RabbitMQ 存储库
curl -1sLf https:
4.添加apt源 直接在命令行添加 回车即可
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb https:
deb-src https:
deb https:
deb-src https:
EOF
查看 5.执行更新;
apt update
6.执行安装
apt-cache madison rabbitmq-server查看
7.开启web界面管理插件
rabbitmq-plugins enable rabbitmq_management
8.设置登录账户
设置账号密码 rabbitmqctl add_user smart 12345678
给账户设置权限 rabbitmqctl set_user_tags smart administrator
登录web界面 查看基本信息 Admin-Add a user 可以创建账号 点击用户名可以做修改权限; 第一种方法 点击创建的用户名smart 点击set permission 第二种方法
执行rabbitmqctl set_permissions smart ".*" ".*" ".*"
验证结果; 创建用户名密码以及授权总结三个命令:
rabbitmqctl add_user smart 12345678
rabbitmqctl set_user_tags smart administrator
rabbitmqctl set_permissions smart ".*" ".*" ".*"
二.rabbitmq的集群部署
普通模式: 创建好 RabbitMQ 集群之后的默认模式。(只同步源数据) queue创建后,消息只存在一个节点,其他节点仅有相同的元数据,即队列结构,队列数据保存一部分,该模式存在一个问题就是当 A 节点故障后,B 节点无法取到 A 节点中还未消费的消息实体
镜像模式: 把需要的队列做成镜像队列。(数据会同步) 把需要的队列做成镜像队列, 存在于多个节点, 属于 RabbitMQ 的 HA 方案(镜像模式是在普通模式的基础上, 增加一些镜像策略)该模式解决了普通模式中的数据丢失问题, 消息实体会主动在镜像节点间同步, 而不是在 consumer 取数据时临时拉取 缺点是:降低系统性能,要先设置policy
集群中有两种节点类型:
内存节点: 只将数据保存到内存;
磁盘节点: 保存数据到内存和磁盘。
内存节点虽然不写入磁盘, 但是它执行比磁盘节点要好, 集群中, 只需要一个磁 盘节点来保存数据就足够了如果集群中只有内存节点, 那么不能全部停止它们, 否则所有数据消息在服务器全部停机之后都会丢失。
推荐设计架构: 在一个 rabbitmq 集群里, 有 3 台或以上机器, 其中 1 台使用磁盘模式, 其它节 点使用内存模式, 内存节点无访问速度更快, 由于磁盘 IO 相对较慢, 因此可作 为数据备份使用。 环境准备:
3台安装rabbitmq的机器;安装步骤参考上面单机部署过程; mq1: 10.0.0.101 mq2: 10.0.0.102 mq3:10.0.0.103
1.主机名解析配置
vim /etc/hosts
10.0.0.101 mq-server1 mq1
10.0.0.102 mq-server2 mq2
10.0.0.103 mq-server3 mq3
改完后重启;systemctl restart rabbitmq-server.service
先知:
Rabbitmq 的集群是依赖于 erlang 的集群来工作的, 所以必须先构建起 erlang 的集群环境,而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的, 这个cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中, 文件是 400 的权限,所以必须保证各节点 cookie 保持一致, 否则节点之间就无法通信
集群原理示意图:
1.三台cookie不一样 为了要保证cookie保持一致,将其中一台的cookie 同步到另外两台
[root@mq-server1 ~]
CHMPABUQTTUBQKOOREBF
scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.102:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.103:/var/lib/rabbitmq/.erlang.cookie
systemctl restart rabbitmq-server.service
2.查看当前集群状态
rabbitmqctl cluster_status
以mq3为目标,将两个两个服务器添加
3.创建 RabbitMQ 集群:
mq1和mq2上操作
rabbitmqctl stop_app
rabbitmqctl reset
#将rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点
rabbitmqctl join_cluster rabbit@mq-server3 --ram
rabbitmqctl start_app
在任何一台主机查看 结果一样rabbitmqctl cluster_status 4.将集群设置为镜像模式 :只要在其中一台节点执行以下命令即可:
rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'
5.验证当前集群状态
rabbitmqctl cluster_status
6.页面验证; 由于刚刚执行了rabbitmqctl reset #清空元数据 操作,没有账户密码了。重新设置
rabbitmqctl add_user smart 12345678
rabbitmqctl set_user_tags smart administrator
rabbitmqctl set_permissions smart ".*" ".*" ".*"
7.web 界面验证集群状态出错情况: 不启用 web 插件的 rabbitmq 服务器, 会在 web 节点提示节点统计信息不可用
rabbitmq-plugins enable rabbitmq_management
设置完成,谢谢观赏
|