首页
运维
编程

小布江

首页
运维
编程
  • Kubernetes

  • 日常

    • K8s-Minio集群迁移
    • Docker构建多架构镜像
    • Minio备份及恢复
    • cert-manager自动签发Lets Encrypt
    • Ansible批量发送密钥
    • Containerd配置私有Harbor镜像仓库
    • kvm虚拟机修改密码
    • Nexus
    • Nginx之tcp转发
    • Arthas
    • 开启telnet登录
    • CPU亲和
    • Harbor复制镜像
    • KVM虚拟机根目录扩容
    • RabbitMQ RPM部署
      • 1. 基础环境
      • 2. 添加hosts解析
      • 3.安装erlang环境,RabbitMQ 安装需要依赖 Erlang 环境,版本对应
      • 4.rabbitmq 安装
      • 5.创建集群
        • 5.1 配置 erlang cookie
        • 5.2授权erlang.cookie,在 node2、node3中分别执行以下命令
        • 5.3重启服务,三个节点依次执行
        • 5.4 将 node2、node3 节点加入 node1 节点集群中,在 node2、node3中分别执行以下命令,默认的是作为磁盘节点
        • 5.5 验证是否加入成功
        • 5.6将集群设为镜像模式
      • 6.集群验证
        • 6.1 开启插件
        • 6.2 设置用户
        • 6.3 登录 http://172.16.5.83:15672 用户:admin 密码:123,创建demo队列验证
        • 6.4 查看镜像集群
        • 6.6 测试---首先关闭node1 节点
      • 7.调优
    • RabbitMQ Docker-Compose部署
    • RocketMQ二进制部署
    • RocketMQ Docker-Compose部署
    • Nginx版本升级
    • kvm虚拟机磁盘扩容
    • kafka双写
    • linux挂盘分区
    • Oracle-11g单机部署
    • GlusterFS部署
    • 主机磁盘管理
    • SSL自签证书管理
    • PicGo自建图床
    • Docker Mirrors
  • Prometheus

  • Cl

  • 运维
  • 日常
小布江
2024-07-14
目录

RabbitMQ RPM部署

系统 架构 IP 主机 内核 数据目录
Anolis OS(8.6) x86_64 172.16.5.81 node1 4.19.91-26 /data
Anolis OS(8.6) x86_64 172.16.5.82 node2 4.19.91-26 /data
Anolis OS(8.6) x86_64 172.16.5.83 node3 4.19.91-26 /data

# 1. 基础环境

# 修改主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service

# 关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
1
2
3
4
5
6
7
8
9
10
11
12

# 2. 添加hosts解析

cat >> /etc/hosts << EOF
172.16.5.81 node1
172.16.5.82 node2
172.16.5.83 node3
EOF
1
2
3
4
5

# 3.安装erlang环境,RabbitMQ 安装需要依赖 Erlang 环境,版本对应 (opens new window)

# 三台节点都执行
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.14/erlang-23.3.4.14-1.el8.x86_64.rpm
yum -y install erlang-23.3.4.14-1.el8.x86_64.rpm
1
2
3

# 4.rabbitmq 安装

# 三台节点都执行
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.16/rabbitmq-server-3.9.16-1.el7.noarch.rpm
yum install -y rabbitmq-server-3.9.16-1.el7.noarch.rpm
1
2
3

# 5.创建集群

# 5.1 配置 erlang cookie

[root@node1 rabbitmq]# scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
[root@node1 rabbitmq]# scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/
1
2

# 5.2授权erlang.cookie,在 node2、node3中分别执行以下命令

[root@node2 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
[root@node2 ~]# chmod 400  /var/lib/rabbitmq/.erlang.cookie
------------------------------------------------------------------------------------
[root@node3 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
[root@node3 ~]# chmod 400  /var/lib/rabbitmq/.erlang.cookie
1
2
3
4
5

# 5.3重启服务,三个节点依次执行

# 创建数据目录
mkdir -p /data/rabbitmq/{data,log}
chown -R rabbitmq:rabbitmq /data/rabbitmq

# 编辑配置文件
cat >/etc/rabbitmq/rabbitmq-env.conf<<EOF
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
EOF

# 开启插件
cat >/etc/rabbitmq/enabled_plugins<<EOF 
[rabbitmq_management,rabbitmq_stomp,rabbitmq_web_stomp,rabbitmq_web_stomp_examples,rabbitmq_prometheus].
EOF

systemctl restart rabbitmq-server
systemctl status  rabbitmq-server
systemctl enable  rabbitmq-server

# 使用 rabbitmq-diagnostics 验证
rabbitmq-diagnostics environment | grep mnesia
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 5.4 将 node2、node3 节点加入 node1 节点集群中,在 node2、node3中分别执行以下命令,默认的是作为磁盘节点

[root@node2 ~]# rabbitmqctl stop_app # 停止服务
[root@node2 ~]# rabbitmqctl join_cluster rabbit@node1 # 加入节点
[root@node2 ~]# rabbitmqctl start_app # 启动服务
Starting node rabbit@node2 ...
----------------------------------------------------------------------------------------
[root@node3 ~]# rabbitmqctl stop_app
[root@node3 ~]# rabbitmqctl join_cluster rabbit@node1
[root@node3 ~]# rabbitmqctl start_app
Starting node rabbit@node3 ...

1
2
3
4
5
6
7
8
9
10

# 5.5 验证是否加入成功

[root@node1 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
Basics

Cluster name: rabbit@node1

Disk Nodes

rabbit@node1
rabbit@node2
rabbit@node3

Running Nodes

rabbit@node1
rabbit@node2
rabbit@node3

Versions

rabbit@node1: RabbitMQ 3.9.16 on Erlang 23.3.4.14
rabbit@node2: RabbitMQ 3.9.16 on Erlang 23.3.4.14
rabbit@node3: RabbitMQ 3.9.16 on Erlang 23.3.4.14

Maintenance status

Node: rabbit@node1, status: not under maintenance
Node: rabbit@node2, status: not under maintenance
Node: rabbit@node3, status: not under maintenance

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@node1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@node1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

# 5.6将集群设为镜像模式

# 所有队列exchangess 或者 queue都为镜像模式
[root@node1 rabbitmq]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
[root@node1 rabbitmq]# echo $?
0
注: 该策略仅对新队列生效,若要应用到已有队列,需手动删除并重建
1
2
3
4
5
6

# 6.集群验证

# 6.1 开启插件

rabbitmq-plugins enable rabbitmq_managemen
1

# 6.2 设置用户

# 添加用户名/密码
[root@node1 rabbitmq]# rabbitmqctl add_user admin 123  

# 提升管理员
[root@node1 rabbitmq]# rabbitmqctl set_user_tags admin administrator 

# 给admin用户授权
[root@node1 rabbitmq]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 
Setting permissions for user "admin" in vhost "/" ... 
1
2
3
4
5
6
7
8
9

# 6.3 登录 http://172.16.5.83:15672 用户:admin 密码:123,创建demo队列验证


image-20250708143620544


# 6.4 查看镜像集群

image-20250708143730397

可以看到我们创建了demo队列,Node中的+2表示备份,下图中的Mirrors就是备份的节点,若node1宕机了node2,node3就会代替node1继续提供服务
1

image-20250708143824637


# 6.6 测试---首先关闭node1 节点

image-20250708144039445


然后查看node2,node3 节点上的镜像状态,发现在node2,node3节点也进行了备份,以此说明:就算整个集群只剩下一台机器了,依然能消费队列里面的消息
1

image-20250708144138557


# 7.调优

# 创建配置文件 
cat>/etc/rabbitmq/rabbitmq.conf<<EOF
# 当占用的内存超过这个阈值时,会暂停接收新消息(即:生产者被阻塞),只允许消费者把消息消费掉,从而降低内存使用 
vm_memory_high_watermark.relative = 0.7
# 磁盘可用空间少于 3GB 时,RabbitMQ 会自动阻止新的消息写入磁盘,防止磁盘被写满导致服务异常或崩溃
disk_free_limit.absolute = 3GB
# 检测消费者长时间未响应,自动关闭无响应的消费者连接,避免资源浪费
consumer_timeout = 300000
# 调整日志级别,避免日志过多导致性能下降
log.console.level = warning
EOF

# 重启服务
systemctl restart rabbitmq-server

# 验证
rabbitmqctl environment | grep disk_free_limit
rabbitmqctl environment | grep vm_memory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#RabbitMQ
上次更新: 2026/05/31, 03:30:34
KVM虚拟机根目录扩容
RabbitMQ Docker-Compose部署

← KVM虚拟机根目录扩容 RabbitMQ Docker-Compose部署→

最近更新
01
Coredns自定义参数
05-18
02
Docker Mirrors
04-24
03
SSL自签证书管理
02-10
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式