[尚硅谷RabbitMQ笔记](https://blog.zs-fighting.cn/upload/2021/07/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6RabbitMQ-bc12c20619414228b0a289d1457d6d76.pdf)
![image.png](https://blog.zs-fighting.cn/upload/2022/03/image-245dbb2e3e4a4e5ca078652aa41f0ce7.png)
# 常用命令
---
```bash
# 关闭应用
rabbitmqctl stop_app
# 启动应用
rabbitmqctl start_app
# 查看所有的队列
rabbitmqctl list_queues
# 删除队列
rabbitmqctl delete_queue queue1
# 清空队列中消息
rabbitmqctl purge_queue queue1
# 清除所有的队列
rabbitmqctl reset
# 查看所有用户
rabbitmqctl list_users
# 查看状态
rabbitmqctl status
# 查看集群状态
rabbitmqctl cluster_status
# 加入集群
rabbitmqctl -n rabbit join_cluster rabbit@$rabbit_hostname1
# 踢出集群
rabbitmqctl forget_cluster_node rabbit@$NodeName
# 新增用户
rabbitmqctl add_user $user $passwd
# 删除用户
rabbitmqctl delete_user admin
# 修改密码
rabbitmqctl change_password admin admin123
# 设置角色
rabbitmqctl set_user_tags admin administrator 【monitoring 【policymaker【 management】】】
# 设置用户权限
rabbitmqctl set_permissions -p VHostPath admin ConfP WriteP ReadP
# 查询所有权限
rabbitmqctl list_permissions [-p VHostPath]
# 指定用户权限
rabbitmqctl list_user_permissions admin
# 清除用户权限
rabbitmqctl clear_permissions [-p VHostPath] admin
# 创建虚拟主机
rabbitmqctl add_vhost vhostpath
# 删除虚拟主机
rabbitmqctl delete_vhost vhostpath
# 列出所有虚拟主机
rabbitmqctl list_vhosts
# 查看哪些slave已经完成同步
rabbitmqctl list_queues name slave_pids synchronised_slave_pids
# 手动方式同步一个队列
rabbitmqctl sync_queue $queue_name
# 修改集群节点的存储形式
rabbitmqctl change_cluster_node_type disc|ram
```
# 两种模式
---
## 普通集群模式
普通集群模式,就是将 RabbitMQ 部署到多台服务器上,每个服务器启动一个 RabbitMQ 实例,多个实例之间进行消息通信。
这种集群可以提高 RabbitMQ 的消息吞吐能力,但是无法保证高可用,因为一旦一个 RabbitMQ 实例挂了,消息就没法访问了,如果消息队列做了持久化,那么等 RabbitMQ 实例恢复后,就可以继续访问了;如果消息队列没做持久化,那么消息就丢了。
## 镜像模式
镜像机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ集群的整体高可用性。
```bash
# 策略说明
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括五个部分ha-mode, ha-params, ha-sync-mode, ha-promote-on-shutdown, ha-promote-on-failure
ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
all:表示在集群中所有的节点上进行镜像
exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params:ha-mode模式需要用到的参数
ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
ha-promote-on-shutdown:主节点选择参数配置,在可控的主节点关闭时(比如停止RabbitMQ服务或者关闭操作系统),其它节点如何替代主节点,选取主节点的行为。
when-syned(默认): 如果是主动停止主节点,如果salve未同步,此时不会接管master.优先保证消息可靠不丢失,放弃可用性。
always: 不论master因为何种原因停止,非同步的slave都有机会接管master。优先保证可用性。
ha-promote-on-failure:表示异常情况下其它节点如何替代主节点,比如Crash、断网等。
when-syned: 如果是主动停止主节点,如果salve未同步,此时不会接管master.优先保证消息可靠不丢失,放弃可用性。
always(默认): 不论master因为何种原因停止,非同步的slave都有机会接管master。优先保证可用性。
priority:可选参数,policy的优先级
# 示例
rabbitmqctl set_policy ha-two "^.*" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}'
```
# 安装
---
```bash
# 安装版本:
rabbitmq: rabbitmq-server-3.6.14 erlang-20.1-1
# 操作系统:
CentOS Linux release 7.5.1804 (Core)
# /etc/hosts:
1.1.1.1 rabbitmq01
2.2.2.2 rabbitmq02
3.3.3.3 rabbitmq03
# 关闭防火墙:
systemctl stop firewalld;setenforce 0
systemctl disable firewalld
# 关闭selinux:
修改/etc/sysconfig/selinux文件,将SELINUX项值修改为disabled
# 开启内核日志,/etc/sysctl.conf:
# 开启内核日志
vm.panic_on_oom = 1
kernel.hung_task_panic = 1
kernel.softlockup_panic = 1
# 安装依赖包
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel openssl-dev socat unixODBC-devel unixODBC ncurses-devel
# 添加EPEL源
yum install epel-release 或者 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# 更新erlang仓库
wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm && rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
rpm --import http://binaries.erlang-solutions.com/debian/erlang_solutions.asc
# 安装 rpmfusion
rpm -ivh https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
# 安装erlang (20.1版本)
wget https://erlang.org/download/otp_src_20.1.tar.gz
tar -zxvf otp_src_20.1.tar.gz
cd otp_src_20.1 && ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll --without-javac
make && make install (耗时较长)
ln -s /usr/local/erlang/bin/erl /usr/local/bin/
# 环境变量:vim /etc/profile
#erlang path
ERL_HOME=/usr/local/erlang
export PATH=$ERL_HOME/bin:$PATH
# 安装rabbitmq
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_14/rabbitmq-server-3.6.14-1.el7.noarch.rpm
rpm -ivh --nodeps rabbitmq-server-3.6.14-1.el7.noarch.rpm
# 启动rabbitmq
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmq-plugins enable rabbitmq_management #启动管理插件
# 配置rabbitmq
cat /etc/rabbitmq/rabbitmq.config
[
{ rabbit, [
{ loopback_users, [ ] },
{log_levels, [{connection, error}]},
{vm_memory_high_watermark, 0.7},
{vm_memory_high_watermark_paging_ratio, 0.8},
{cluster_partition_handling, ignore},
{ tcp_listeners, [ 5672 ] },
{ ssl_listeners, [ ] },
{ default_pass, <<"passwd">> },
{ default_user, <<"user">> },
{ default_vhost, <<"/">> },
{ hipe_compile, false }
] },
{ rabbitmq_management, [ { listener, [
{ port, 15672 },
{ ssl, false }
] } ] }
].
# 参数调优 vim /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
vim /usr/lib/systemd/system/rabbitmq-server.service
LimitNOFILE = 655360
# 重启rabbitmq服务
systemctl daemon-reload
systemctl restart rabbitmq-server.service
# 创建集群
建立rabbitmq集群,只在在相应三个节点,主节点不执行任何命令,从节点上执行以下命令;(一般默认01是主节点)
/var/lib/rabbitmq/.erlang.cookie 三台保持一致,一般01主节点一致,赋权限 chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
systemctl restart rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
rabbitmqctl cluster_status
# 添加策略
执行创建rabbitmq 高可用规则
rabbitmqctl set_policy ha-two "^.*" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic","ha-promote-on-shutdown":"always"}'
# 设置登录账号
rabbitmqctl add_user admin passwd
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
# 添加插件步骤(每个节点都执行)
链接: https://pan.baidu.com/s/1Kprn_4Z-G2vpMSNGqQVQHg
提取码: g3n2
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.14/plugins
wget rabbitmq.install.download.hualala.com/download/rabbitmq_delayed_message_exchange-0.0.1.ez
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
rabbitmq-plugins enable rabbitmq_tracing
```
RabbitMQ笔记