通过自建镜像方式搭建RabbitMQ集群

通过自建镜像方式搭建RabbitMQ集群

  • 1. 应用准备
    • 1.1 应用目录结构
    • 1.2 配置文件
      • 1.2.1 .erlang.cookie
      • 1.2.2 hosts
      • 1.2.3 rabbitmq.conf
      • 1.2.4 rabbitmq-env.conf
  • 2. 编写DockerFile
    • 2.1 将所有本地文件拷贝到工作目录
    • 2.2 拷贝文件到源目录&增加执行权限
    • 2.3 安装Erlang & rabbitmq-server
    • 2.4 暴露rabbitmq端口
    • 2.5 设置entrypoint
  • 3. 执行脚本
    • 3.1 update_hosts.sh
    • 3.2 start_rabbitmq.sh
      • 3.2.1 获取本机hostname
      • 3.2.2 设置环境变量
      • 3.2.3 启动rabbitmq-server和rabbitmq_management
  • 4. 构建集群
    • 4.1 将node2,node3加入node1
    • 4.2 创建用户、授权远程访问
  • 5. 验证
  • 参考

在这里插入图片描述

1. 应用准备

  • 需考虑rabbitmq-server和erlang版本的兼容性。参考which-erlang
  • Centos建议使用Centos8

1.1 应用目录结构

在这里插入图片描述

1.2 配置文件

1.2.1 .erlang.cookie

.erlang.cookie的要求

.erlang.cookie 文件是用于 Erlang 节点之间进行安全通信的共享秘钥文件。它的要求如下:

  1. 权限要求: 文件权限应该设置为只有对应用户可以读取和写入,通常设置为 400 或 600。

  2. 内容要求: 文件中应包含一个随机生成的字符串,通常是由系统生成的随机字符。这个字符串必须在集群中的所有节点上保持一致。

  3. 位置要求: 在运行RabbitMQ的每个节点上,.erlang.cookie 文件都必须位于相同的位置,并且文件内容必须相同。

确保这些要求可以确保Erlang节点之间的通信是安全的,同时也可以防止未经授权的节点加入集群。

对随机字符串的长度有要求吗?

对于 .erlang.cookie 文件中的随机字符串,Erlang
并没有明确规定其长度的要求。然而,建议生成一个足够长的随机字符串,通常建议长度在 20 到 40
个字符之间,以确保安全性。更长的字符串长度可以提供更高的安全性,但同时也需要确保在集群中所有节点上保持一致。

示例:

ABCDEABCDEABCDEABCDE

1.2.2 hosts

该hosts文件内容会追加到容器的/etc/hosts文件,示例

172.16.100.10  rabbitmq-node1
172.16.100.20  rabbitmq-node2
172.16.100.30  rabbitmq-node3

1.2.3 rabbitmq.conf

该配置文件用于rabbitmq集群的节点配置,示例

cluster_formation.classic_config.nodes.1=rabbit@rabbitmq-node1
cluster_formation.classic_config.nodes.2=rabbit@rabbitmq-node2
cluster_formation.classic_config.nodes.3=rabbit@rabbitmq-node3

1.2.4 rabbitmq-env.conf

该配置文件用于配置rabbitmq的环境变量配置,示例

# Specifies new style config file location
CONFIG_FILE=/export/App/rabbitmq/conf/rabbitmq.conf
# 日志文件根目录
RABBITMQ_LOG_BASE=/export/Logs/rabbitmq
# 默认用户
DEFAULT_USER=admin
# 默认密码
DEFAULT_PASS=your_password

2. 编写DockerFile

2.1 将所有本地文件拷贝到工作目录

# 文件拷贝:将所有本地文件拷贝到工作目录
COPY ./rabbitmq ${WORK_DIR}/rabbitmq

2.2 拷贝文件到源目录&增加执行权限

# 拷贝文件到源目录&增加执行权限
RUN mkdir ${SRC_APP_DIR}/rabbitmq && \cp -r ${WORK_DIR}/rabbitmq/* ${SRC_APP_DIR}/rabbitmq && \chmod +x ${SRC_APP_DIR}/rabbitmq/bin/start_rabbitmq.sh && \chmod +x ${SRC_APP_DIR}/rabbitmq/bin/update_host.sh && \chmod +x ${SRC_APP_DIR}/rabbitmq/app/rabbitmq-server-3.13.0-1.el8.noarch.rpm && \

2.3 安装Erlang & rabbitmq-server

# 安装Erlang & rabbitmq-serveryum -y install epel-release && \yum -y install socat && \yum -y localinstall ${SRC_APP_DIR}/rabbitmq/app/erlang-26.2.3-1.el8.x86_64.rpm && \yum -y localinstall ${SRC_APP_DIR}/rabbitmq/app/rabbitmq-server-3.13.0-1.el8.noarch.rpm

2.4 暴露rabbitmq端口

# 暴露RabbitMQ端口
EXPOSE 5672 15672 25672

2.5 设置entrypoint

# 将SRC拷贝到TARGET目录
ENV COPY_EXPORT="cp -r -t $TGT_DIR $SRC_DIR/*"
# CHOWN
ENV CHOWN_ADMIN="chown -R $SYS_USER_GROUP:$SYS_USER $TGT_DIR $SRC_DIR"
# 增加hosts配置
ENV UPDATE_HOSTS="$TGT_APP_DIR/rabbitmq/bin/update_host.sh"
# 启动脚本
ENV START_RABBITMQ="$TGT_APP_DIR/rabbitmq/bin/start_rabbitmq.sh"# 启动 RabbitMQ 服务
# 进入容器时默认执行的命令
ENTRYPOINT /usr/sbin/sshd && \/usr/sbin/crond && \echo $COPY_EXPORT && $COPY_EXPORT && \echo $CHOWN_ADMIN && $CHOWN_ADMIN && \echo $UPDATE_HOSTS && $UPDATE_HOSTS && \echo $START_RABBITMQ && $START_RABBITMQ && \sleep 9999999d

3. 执行脚本

3.1 update_hosts.sh

cat $TGT_APP_DIR/rabbitmq/conf/hosts >> /etc/hosts &

3.2 start_rabbitmq.sh

3.2.1 获取本机hostname

# 获取ip
container_ip=$(hostname -i)
echo container_ip:"$container_ip"
# 获取域名
container_domain_name=$(grep -w "$container_ip" $TGT_APP_DIR/rabbitmq/conf/hosts | awk '{print $2}')
# 如果域名不为空,设置变更域名
if [ -n "$container_domain_name" ]; thenecho "IP $container_ip domain name: $container_domain_name"sudo hostname $container_domain_namedomain_name=$container_domain_name
else# 如果域名为空,使用原先域名domain_name=$(hostname)
fi

3.2.2 设置环境变量

# RABBITMQ环境变量
export RABBITMQ_NODENAME=rabbit@$domain_name
export HOSTNAME=$domain_name
export RABBITMQ_CONFIG_FILE=$TGT_APP_DIR/rabbitmq/conf/rabbitmq.conf
export RABBITMQ_CONF_ENV_FILE=$TGT_APP_DIR/rabbitmq/conf/rabbitmq-env.conf

3.2.3 启动rabbitmq-server和rabbitmq_management

cp -f $TGT_APP_DIR/rabbitmq/conf/.erlang.cookie /var/lib/rabbitmq/
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
/usr/sbin/rabbitmq-server &
sleep 5
rabbitmq-plugins enable rabbitmq_management &

4. 构建集群

4.1 将node2,node3加入node1

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app

4.2 创建用户、授权远程访问

rabbitmqctl add_user <用户名> <密码>
rabbitmqctl set_user_tags <用户名> <角色>

支持的角色列表

  • administrator
  • management
  • policymaker
  • monitoring
  • none

5. 验证

访问 http://172.16.100.10:15672,输入用户名、密码。
在这里插入图片描述

参考

Clustering Guide
Cluster Formation and Peer Discovery
RabbitMQ Configuration
rabbitmq.conf.example
Environment Variable Interpolation in rabbitmq.conf
安装包下载地址
rabbitMQ配置文件
java rabbitmq新建项目 rabbitmq如何搭建集群 转载
RabbitMQ创建新用户,并给用户添加角色和授权

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/689295.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端常用技能:基于easy-poi实现excel一对多、多对多导入导出【附带源码】

0. 引言 在业务系统开发中&#xff0c;我们经常遇到excel导入导出的业务场景&#xff0c;普通的excel导入导出我们可以利用 apache poi、jxl以及阿里开源的easyexcel来实现&#xff0c;特别easyexcel更是将excel的导入导出极大简化&#xff0c;但是对于一些负载的表格形式&…

设计模式2——原则篇:依赖倒转原则、单一职责原则、合成|聚合复用原则、开放-封闭原则、迪米特法则、里氏代换原则

设计模式2——设计原则篇 目录 一、依赖倒转原则 二、单一职责原则&#xff08;SRP&#xff09; 三、合成|聚合复用原则&#xff08;CARP&#xff09; 四、开放-封闭原则 五、迪米特法则&#xff08;LoD&#xff09; 六、里氏代换原则 七、接口隔离原则 八、总结 一、依赖…

力扣70 爬楼梯 C语言 动态规划 递归

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2…

通义灵码企业版正式发布,满足企业私域知识检索、数据合规、统一管理等需求

5 月 9 日阿里云 AI 峰会&#xff0c;阿里云智能集团首席技术官周靖人宣布&#xff0c;通义灵码企业版正式发布&#xff0c;满足企业用户的定制化需求&#xff0c;帮助企业提升研发效率。 通义灵码是国内用户规模第一的智能编码助手&#xff0c;基于 SOTA 水准的通义千问代码模…

QT day5 作业

服务器头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QList> //链表类 #include <QMessageBox> //消息对话框类 #include <QDebu…

论文阅读_RAG融合现有知识树_T-RAG

英文名称: T-RAG: LESSONS FROM THE LLM TRENCHES 中文名称: T-RAG&#xff1a;来自LLM战壕的经验教训 链接: https://arxiv.org/abs/2402.07483 作者: Masoomali Fatehkia, Ji Kim Lucas, Sanjay Chawla 机构: 卡塔尔计算研究所, 哈马德本哈利法大学 日期: 2024-02-12 引用次数…

零基础HTML教程(32)--HTML5语义化标签

文章目录 1. div时代2. div的缺点3. 语义化标签4. 语义化标签有哪些5. 实战演练6. 小结 1. div时代 我是2009年开始学习网页开发的&#xff0c;那时候HTML里面到处是div。 这么说吧&#xff0c;那时候div就是网页的骨架&#xff0c;支撑着网页的主结构。 2. div的缺点 div作…

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为&#xff1a; Recommen…

Raspberry Pi Connect 官方树莓派远程连接新方式

系列文章目录 前言 2024 年 5 月 7 日 戈登-霍林沃思 今天&#xff0c;我们很高兴地宣布 Raspberry Pi Connect 测试版发布&#xff1a;这是一种安全、易用的方法&#xff0c;只需使用网络浏览器&#xff0c;就能从地球上的任何地方远程访问您的 Raspberry Pi。 远程访问 Rasp…

数据结构----二叉树

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1. 树型结构 1.1 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上…

Git克隆仓库报错:HTTP/2 stream 1 was not closed

报错及原因 fatal: unable to access ‘https://github.com/xxx/’: HTTP/2 stream 1 was not closed cleanly before end of the underlying stream http/2 和 http/1.1之间有个区别是“HTTP2 基于 SPDY&#xff0c;专注于性能&#xff0c;最大的一个目标是在用户和网站间只…

[leetcode] 68. 文本左右对齐

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff…