官网:https://www.rabbitmq.com/

官方提供的脚本(单节点部署)

#!/bin/sh

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null

## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Modern Erlang/OTP releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/jammy jammy main

## Latest RabbitMQ releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/jammy jammy main
EOF

## Update package indices
sudo apt-get update -y

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
开启管理界面
rabbitmq-plugins enable rabbitmq_management

访问:http://IP:15672

创建管理员
rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
rabbitmq-server的基础使用
启动
systemctl start rabbitmq-server
停止
systemctl stop rabbitmq-server
开机自启
systemctl enable --now rabbitmq-server
取消开机自启
systemctl disable rabbitmq-server

停止 RabbitMQ 应用(RabbitMQ进程还在,只是停止MQ服务)
rabbitmqctl stop_app
启动 RabbitMQ 应用
rabbitmqctl start_app
完全停止 RabbitMQ(关闭整个节点)
rabbitmqctl stop
查看节点状态
rabbitmqctl status

RabbitMQ 管理插件控制:
查看rabbitMQ所有插件
rabbitmq-plugins list
开启管理界面
rabbitmq-plugins enable rabbitmq_management
关闭管理界面
rabbitmq-plugins disable rabbitmq_management

RabbitMQ 用户管理:
查看用户:sudo rabbitmqctl list_users
创建用户:sudo rabbitmqctl add_user user1 password123
设置管理员:sudo rabbitmqctl set_user_tags user1 administrator
删除用户:sudo rabbitmqctl delete_user user1
修改密码:sudo rabbitmqctl change_password user1 newpassword

RabbitMQ 权限管理
RabbitMQ权限是 vhost级别,默认 vhost:/
sudo rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*"    #含义分别是configure、write、read    
查看权限
sudo rabbitmqctl list_permissions

RabbitMQ 队列管理
查看所有队列:sudo rabbitmqctl list_queues
查看 exchange:sudo rabbitmqctl list_exchanges
查看绑定关系:sudo rabbitmqctl list_bindings

RabbitMQ 日志
日志路径:/var/log/rabbitmq/
常见的日志文件:
rabbit@hostname.log
rabbit@hostname_upgrade.log

RabbitMQ 网络端口
| 端口  | 用途      |
| ----- | ------   |
| 5672  | AMQP协议  |
| 15672 | Web管理   |
| 25672 | 集群通信  |

RabbitMQ 三个常见CLI工具区别
| 工具                 | 作用         						 |
| -------------------- | -----------             |
| rabbitmqctl          | 节点管理,本质是curl 封装 |
| rabbitmq-diagnostics | 故障诊断      				  	|
| rabbitmqadmin        | HTTP API 管理					 |

测试rabbitMQ(部署成功了,但要怎么测试?)
确认 RabbitMQ 已经安装成功:rabbitmqctl status
安装 rabbitmqadmin:wget http://你服务器的IP地址:15672/cli/rabbitmqadmin
赋予执行权限:chmod +x rabbitmqadmin
移动到系统路径:sudo mv rabbitmqadmin /usr/local/bin/

测试:rabbitmqadmin -u admin -p admin123 list queues
创建队列:创建队列:rabbitmqadmin -u admin -p admin123 declare queue name=test durable=true
发送测试消息:rabbitmqadmin -u admin -p admin123 publish routing_key=test payload="hello"
查看队列消息:rabbitmqadmin -u admin -p admin123 get queue=test

官方集群部署方案

参考链接:https://www.rabbitmq.com/docs/clustering

将多个单节点部署成集群,官方明确说了RabbitMQ 节点的识别方式:节点名称

当前环境:
[root@test01 ~]# rabbitmqctl status
Status of node rabbit@test01 ...
Runtime

OS PID: 49791
OS: Linux
Uptime (seconds): 2734
Is under maintenance?: false
RabbitMQ version: 4.2.4
RabbitMQ release series support status: see https://www.rabbitmq.com/release-information
Node name: rabbit@test01

设置主机名(非常重要)
123节点:sudo hostnamectl set-hostname rabbit1
124节点:sudo hostnamectl set-hostname rabbit2
125节点:sudo hostnamectl set-hostname rabbit3

配置 hosts 解析
三台机器都写:
cat >> /etc/hosts <<EOF
10.0.0.123 rabbit1
10.0.0.124 rabbit2
10.0.0.125 rabbit3
EOF

测试一下:ping rabbit1

同步 Erlang Cookie(最关键)
实现RabbitMQ 节点之间认证靠:在 rabbit1查看:
cat /var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@10.0.0.124:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@10.0.0.125:/var/lib/rabbitmq/
修改权限:sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
重启服务:systemctl restart rabbitmq-server

其它节点加入集群
在 rabbit2 执行:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app

在 rabbit3 执行:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app

查看集群状态:rabbitmqctl cluster_status
[root@test01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@test01 ...
Basics

Cluster name: rabbit@test01
Total CPU cores available cluster-wide: 6

Cluster Tags

(none)

Disk Nodes

rabbit@test01
rabbit@test02
rabbit@test03

Running Nodes

rabbit@test01
rabbit@test02
rabbit@test03

Versions

rabbit@test01: RabbitMQ 4.2.4 on Erlang 27.3.4.6
rabbit@test02: RabbitMQ 4.2.4 on Erlang 27.3.4.6
rabbit@test03: RabbitMQ 4.2.4 on Erlang 27.3.4.6

CPU Cores

Node: rabbit@test01, available CPU cores: 2
Node: rabbit@test02, available CPU cores: 2
Node: rabbit@test03, available CPU cores: 2

Maintenance status

Node: rabbit@test01, status: not under maintenance
Node: rabbit@test02, status: not under maintenance
Node: rabbit@test03, status: not under maintenance

Web UI 也可以看到集群:http://ip:15672

其他节点没有启用 rabbitmq_management_agent 这个插件,就会出现: Node statistics not available

ubt 以 apt 部署方式(可能版本旧)

1 安装 Erlang

RabbitMQ必须依赖 Erlang。

Ubuntu:

apt update
apt install erlang -y
apt install curl gnupg apt-transport-https -y
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/setup.deb.sh' | sudo -E bash
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.deb.sh' | sudo -E bash

CentOS:

yum install erlang -y

2 安装 RabbitMQ

Ubuntu:

apt install rabbitmq-server -y
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
systemctl status rabbitmq-server

CentOS:

yum install rabbitmq-server -y

启动:

systemctl enable rabbitmq-server
systemctl start rabbitmq-server

3 开启管理界面

rabbitmq-plugins enable rabbitmq_management

访问:

http://IP:15672

默认账号:

guest / guest

配置高可用队列

RabbitMQ默认:

队列只在一个节点

需要配置:

镜像队列 / Quorum Queue

推荐:

Quorum Queue

创建策略:

rabbitmqctl set_policy ha-all "^log." \
'{"ha-mode":"all"}'

Logstash连接RabbitMQ

Logstash配置:

input {
  rabbitmq {
    host => "10.0.0.123"
    queue => "logs"
    user => "log"
    password => "log123"
  }
}

Filebeat可以用:

output.rabbitmq

生产环境建议

一定要做:

1 负载均衡

前面加:

HAProxy

Nginx stream

2 监控

建议:

Prometheus + Grafana

3 磁盘

RabbitMQ是 磁盘IO敏感

建议:SSD

合理架构

           +--------------+
           |   Filebeat   |
           +--------------+
                  |
                  |
           +--------------+
           |  RabbitMQ    |
           |  Cluster     |
           |123 124 125   |
           +--------------+
                  |
          +---------------+
          |  Logstash x3  |
          +---------------+
                  |
          +---------------+
          | Elasticsearch |
          +---------------+
                  |
               Kibana