概述:
RabbitMQ 是由 Erlang 语言开发的,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。
Erlang 是一种通用的并发程序设计语言,它由乔·阿姆斯特朗(Joe Armstrong)在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规模并发活动的程序设计语言和运行环境。
特性
响应速度是微秒级,非常快。
轻量级,易于在操作系统和云中部署运行。
有强大的管理插件,方便用户在浏览器中管理RabbitMQ。
不支持分布式,但可以以镜像集群模式保证高可用。
开发社区非常活跃,文档完善,易于后期维护。
单机版
!!!关闭防火墙和selinux
需要解决的依赖关系
- erlang: 相关版本对应关系 | GitHub下载地址
- socat
- logrotate
安装方式
这里选择YUM方式安装便于升级,也可以使用RPM包离线安装。
#导入秘钥
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
# 新建repo库
vim /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
#安装
yum install -y rabbitmq-server
#设置系统最大打开文件
echo "ulimit -SHn 65535" >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
#设置rabbitMQ的最大文件句柄数
#创建/etc/systemd/system/rabbitmq-server.service.d/limits.conf文件覆盖默认值
[Service]
LimitNOFILE=64000
#可能需要重新加载服务
systemctl daemon-reload
#启动并设置开机服务
systemctl start rabbitmq-server && systemctl enable rabbitmq-server
#开启web UI
rabbitmq-plugins enable rabbitmq_management
#添加用户
#./rabbitmqctl add_user 账号 密码
./rabbitmqctl add_user admin admin
#分配用户标签(admin为要赋予administrator权限的刚创建的那个账号的名字)
./rabbitmqctl set_user_tags admin administrator
#设置权限<即开启远程访问>(如果需要远程连接,例如java项目中需要调用mq,则一定要配置,否则无法连接到mq,admin为要赋予远程访问权限的刚创建的那个账号的名字,必须运行着rabbitmq此命令才能执行)
./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#web访问地址
http://ip:15672 admin admin
常用的配置参数
tcp_listerners : #设置rabbimq的监听端口,默认为[5672]。
disk_free_limit : #磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0},即与内存相关联1:1,也可定制为多少byte.
vm_memory_high_watermark : #设置内存低水位线,若低于该水位线,则开启流控机制,默认值是0.4,即内存总量的40%。
vm_memory_high_watermark_paging_ratio : #设置内存低水位线消息开始持久化到磁盘,默认50%
force_fine_statistics : #该参数属于rabbimq_management,若为true则进行精细化的统计,但会影响性能。
frame_max : #与客户端协商的允许最大包大小,若包太大会拆分成多次发送,默认是131072=128K。
heartbeat : #客户端与服务端心跳间隔,设置为0则关闭心跳,默认是60秒。
log_level : #控制日志的粒度,'none' (不记录日志事件), 'error' (只记录错误), 'warning' (只记录错误和警告), 'info' (记录错误,警告和信息), or 'debug' (记录错误,警告,信息以及调试信息).
channel_max:#与客户端协商的允许最大chanel大小. 设置为0表示无限制.该数值越大,则broker使用的内存就越高,Default: 0
cluster_nodes: #当节点第一次启动的时候,设置此选项会导致集群动作自动发生. 元组的第一个元素是其它节点想与其建立集群的节点. 第二个元素是节点的类型,要么是disc,要么是ram,Default: {[], disc}
collect_statistics_interval: #统计收集时间间隔(毫秒为单位),主要针对于 management plugin.Default: 5000
集群版
集群节点使用奇数
设置时间同步
#设置为上海
timedatectl set-timezone Asia/Shanghai
yum -y install ntp
#通过阿里云时间服务器校准时间
ntpdate ntp1.aliyun.com
写入hosts
vim /etc/hosts
192.168.6.101 mq-1
192.168.6.102 mq-2
192.168.6.103 mq-3
复制erlang.cookie保持一致
RabbitMQ集群通信是建立在Erlang通信上的,Erlang通信是通过.erlang.cookie文件通信的,编辑 RabbitMQ的cookie 文件,以确保各个节点的cookie文件使用的是同一个值,cookie文件在$HOME目录下,cookie相当于密钥令牌,集群中的RbbitMQ节点需要通过交换密钥令牌以获得相互认证,如果节点的密钥令牌不一致,那么在配置节点时就会报错
cookie通常位于/var/lib/rabbitmq/.erlang.cookie和$HOME / .erlang.cookie
# 复制到其他节点上
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/.erlang.cookie
创建集群
#先查看各节点的状态主机名和节点名称是否一致
rabbitmqctl cluster_status
#以加入mq-1节点为例,在mq-2和mq-3执行加入集群操作
# 停止rabbitmq应用
rabbitmqctl stop_app
#重置
rabbitmqctl reset
#加入mq-1
rabbitmqctl join_cluster [email protected]
#再启动并查看集群状态
rabbitmqctl start_app
rabbitmqctl cluster_status
#最后再添加用户并授权,生产删除guest用户
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
集群节点类型
RAM node #内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node #将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
在使用rabbitmqctl cluster_status命令来查看节点类型
Cluster name: [email protected]
Disk Nodes
[email protected]
[email protected]
[email protected]
目前来看集群中所有的节点都为磁盘节点,我们可以将mq-3修改为内存节点,
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
再次查看
rabbitmqctl cluster_status
Cluster name: [email protected]
Disk Nodes
[email protected]
[email protected]
RAM Nodes
[email protected]
Running Nodes