通過自建鏡像方式搭建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.pswp.cn/web/10457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10457.shtml
英文地址,請注明出處:http://en.pswp.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;線段的起點和終點均為整數…