通过自建镜像方式搭建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.mzph.cn/web/10457.shtml

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

相关文章

Leedcode题目:移除链表元素

题目&#xff1a; 这个题目就是要我们将我们的链表中的值是val的节点删除。 我们题目提供的接口是 传入了指向一个链表的第一个节点的指针&#xff0c;和我们要删除的元素的值val&#xff0c;不只要删除第一个&#xff0c; 思路 我们这里可以创建一个新的链表&#xff0c;…

【C++】学习笔记——模板进阶

文章目录 十一、模板进阶1. 非类型模板参数2. 按需实例化3. 模板的特化类模板的特化 4. 模板的分离编译 未完待续 十一、模板进阶 1. 非类型模板参数 模板参数分为类型形参和非类型形参 。类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的…

掌握SEO优化的关键:提升网站排名的秘籍(如何提高网站seo排名)

你是否曾经在搜索引擎上搜索过一个关键词&#xff0c;然后点击了排在前几位的网站&#xff1f;如果是&#xff0c;那么你已经体会到了SEO&#xff08;搜索引擎优化&#xff09;的威力。SEO是一项关键的网络营销策略&#xff0c;它能够让你的网站在搜索引擎中获得更高的排名&…

Apache ECharts

Apache ECharts介绍&#xff1a; Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html Apache ECh…

Stable Diffusion写真完整教程

前言 最近自己对AI非常痴迷&#xff0c;并且今后也会一直在这个领域深耕&#xff0c;所以就想着先入门&#xff0c;因此花时间研究了一番&#xff0c;还好&#xff0c;出了点小成果&#xff0c;接下来给大家汇报一下。 AI绘画 提到AI绘画&#xff0c;大家可能立马会想到made…

A-loam建图算法

A-LOAM构建3d点云地图并实时转存二维栅格地图 A-loam算法。源代码用的是velodyne雷达话题&#xff0c;但是现在用rslidar来处理。所以也会遇到另外一个包来转换相关的数据。 git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.githttps://github.com/HViktorTsoi/r…

重庆市工程技术生态环境专业职称申报条件

重庆市工程技术生态环境专业职称申报条件链接重庆市人力资源和社会保障局 重庆市生态环境局关于印发重庆市工程技术生态环境专业职称申报条件的通知_重庆市人力资源和社会保障局类别基本条件业绩成果备注工程师具备博士学位&#xff1b;或具备硕士学位或第二学士学位&#xff0…

cin.ignore()函数和stoll函数

cin.ignore()函数 cin.ignore() 是一个非常实用的函数&#xff0c;主要用于控制输入流 cin 的行为 cin.ignore(int n 1, char delimiter EOF); n&#xff1a;一个整数参数&#xff0c;表示要忽略的字符数量。默认值是1&#xff0c;意味着只忽略下一个字符。delimiter&#x…

Android 屏幕适配全攻略(下)-百变屏幕无压力,这才是Android屏幕适配的终极解决方案

在上一篇文章中&#xff0c;我们介绍了Android屏幕适配的基本方法&#xff0c;比如使用限定符资源、图片适配、矢量图等。 感兴趣的朋友&#xff0c;请前往查阅&#xff1a;Android 屏幕适配全攻略&#xff08;中&#xff09;-从九宫格到矢量图&#xff0c;揭秘Android多屏幕适…

模拟集成电路(3)----单级放大器(共源极)

模拟集成电路(3)----单级放大器&#xff08;共源极&#xff09; 放大是模拟电路的基本功能 大多数自然模拟信号太小而无法处理需要足够的信噪比 理想的放大器 线性&#xff1a;无限的幅度和频率范围 输入阻抗无限大 输出阻抗无限小 共源放大器 共源放大器就是将源极接A…

01面向类的讲解

指针指向类成员使用 代码&#xff1a; #include<iostream> using namespace std;class Test { public:void func() { cout << "call Test::func" << endl; }static void static_func();int ma;static int mb; //不依赖对象 }; void Test::static…

JavaScript 动态网页实例 —— 事件处理应用

前言 事件处理的应用很广泛。在事件处理的应用中,鼠标事件的应用是最常用到的。本章给出几个鼠标事件处理应用的示例,包括:页面预览、图像切换、点亮文本、鼠标跟随、鼠标感应和禁用鼠标按键。在这些示例中,有的可以直接拿来应用,有的则只提供了一种应用的方法,稍加拓展,…

示例十一、声音传感器

通过以下几个示例来具体展开学习,了解声音传感器原理及特性&#xff0c;学习声音传感器的应用&#xff08;干货版&#xff09;&#xff1a; 示例十一、声音传感器 ino文件源码&#xff1a; //Arduino C demo void setup() {Serial.begin(9600);pinMode(5, OUTPUT); }void loo…

机器学习-无监督学习

无监督学习是机器学习和人工智能的另一个重要分支&#xff0c;它主要处理没有标签的数据集&#xff0c;目的是发现数据中的隐藏模式、结构或异常。无监督学习不依赖于预先定义的输出&#xff0c;而是让算法自己揭示数据的本质特征。 无监督学习的过程通常包括以下几个步骤&…

标准服务器控件

文本类型控件 通常指的是用于输入或显示文本的控件。 TextBox&#xff1a;这是最基本的文本输入控件。它允许用户在页面上输入文本。你可以设置它的属性来控制其行为&#xff0c;如MaxLength&#xff08;限制输入的最大字符数&#xff09;、ReadOnly&#xff08;是否只读&…

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS设置文件&#xff08;2&#xff09;应用层&#xff08;3&#xff09;Dos攻击&#xff08;4&#xff09;DNS服务&#xff08;5&#xff09;DNS&#xff08;6&#xff09;子网划分&#xff08;7&#xff09;http状态&am…

docker01-简介和概述

什么是docker&#xff1f; 我们现在开发项目是在windows操作系统使用idea开发&#xff0c;本地windows操作系统上有我们项目所需的jdk&#xff0c;mysql&#xff0c;redis&#xff0c;tomcat等环境&#xff0c;如果我们想打包我们的项目到一个别的服务器上&#xff0c;在别的服…

【Apache POI】Apache POI-操作Excel表格-简易版

Catalog Apache POI-操作Excel表格1. 需求2. 优点3. 缺点4. 应用场景5. 使用方法6. SpringBoot工程中处理Excel表格7. Demo示例 Apache POI-操作Excel表格 1. 需求 大多数项目的在运营过程中&#xff0c;会产生运营数据&#xff0c;如外卖系统中需要统计每日的订单完成数、每…

SpringBoot实现图片验证码

引入依赖 <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version> </dependency>代码实现 package com.qiangesoft.captcha.controller;import com.wf.captcha.*…

最少数量线段覆盖-华为OD

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给定坐标轴上的一组线段&#xff0c;线段的起点和终点均为整数…