赞
踩
RabbitMQ是咩???
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,
能够实现异步消息处理
言简意赅的讲:RabbitMQ是一个消息代理:它接受和转发消息
rabbitmq 优势:
基于 erlang 语言开发, 具有高并发优点、 支持分布式
具有消息确认机制、 消息持久化机制, 消息可靠性和集群可靠性高
简单易用、 运行稳定、 跨平台、 多语言
开源
Queue 的特性:
消息基于先进先出的原则进行顺序消费
消息可以持久化到磁盘节点服务器
消息可以缓存到内存节点服务器提高性能
官方版本 https://www.rabbitmq.com/
https://www.rabbitmq.com/download.html #官网下载地址
https://github.com/rabbitmq/rabbitmq-server/releases #github 下载地址
服务器环境:
Ubuntu 1804 安装单机版 RabbitMQ:
https://www.rabbitmq.com/install-debian.html#apt
第一种方式:apt直接安装 (版本不可选,默认安装)
1.查看当前系统内软件的版本
apt-cache madison rabbitmq-server
2.配置主机名解析
[root@mq-sever1 ~]#cat /etc/hosts
10.0.0.101 mq-sever1 mq
3.执行安装
apt -y install rabbitmq-server
4.RabbitMQ 插件管理
端口使用说明
5672 #客户端使用,类似于mysql 3306
15672 #web界面,可以显示rabbitmq的运行状态
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://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo apt-key add -
Cloudsmith:RabbitMQ 存储库
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo apt-key add -
4.添加apt源
直接在命令行添加 回车即可
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
## Provides RabbitMQ
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
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 集群之后的默认模式。(只同步源数据)
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 ~]#cat /var/lib/rabbitmq/.erlang.cookie
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 #停止mq1和mq2的写入服务
rabbitmqctl reset #清空元数据
#将rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点
rabbitmqctl join_cluster rabbit@mq-server3 --ram
#添加完成后开启app
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 #执行后即可解决
设置完成,谢谢观赏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。