中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker中怎么搭建RabbitMQ集群

發布時間:2021-07-30 16:40:38 來源:億速云 閱讀:392 作者:Leah 欄目:大數據

本篇文章為大家展示了docker中怎么搭建RabbitMQ集群,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

使用docker 搭建RabbitMQ集群

RabbitMQ集群中節點包含內存節點(RAM)、磁盤節點(Disk,消息持久化)、集群中至少有一個Disk節點。集群分為兩種集群模式普通模式鏡像模式

  • 普通模式(默認)

    對于普通模式,集群中各節點有相同的隊列結構,但消息只會存在于集群中的一個節點,對于消費者來說,若消息進入A節點的Queue中,當從B節點拉取時,RabbitMQ會將消息從A中取出,并經過B發送給消費者。

    **應用場景:**該模式更適合于消息無需持久化的場景,如日志隊列。當隊列非持久化,且創建該隊列的節點宕機,客戶端才可以重連集群其他節點,并重新創建隊列。若為持久化,只能等故障節點恢復。缺點:無法解決單點故障問題。

  • 鏡像模式

    與普通模式不同之處時消息實體會主動在鏡像節點見同步,而不是在取數據時臨時拉取,高可用;該模式下 鏡像隊列(mirror queue)有一套選舉算法,即1個master、n個slaver。 生產者、消費者的請求都會轉至master。

    **應用場景:**可靠性要求較高場合,如下單、庫存隊列。缺點:若鏡像隊列過多,且消息體量大,集群內部網絡帶寬將會被此種同步通訊所消耗。

環境搭建

創建三個RabbitMQ節點

#創建RabbitMQ目錄
mkdir ~/mydata/rabbitmq
cd ~/mydata/rabbitmq
#創建三個rabbitmq 目錄,存儲三個節點配置信息
mkdir rabbitmq01 rabbitmq02 rabbitmq03

#創建rabbitmq01節點容器
docker run -d --hostname rabbitmq01 --name rabbitmq01 \
-v ~/mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq \
-p 15672:15672 -p 5672:5672 \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management

#創建rabbitmq02節點容器
docker run -d --hostname rabbitmq02 --name rabbitmq02 \
-v ~/mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq \
-p 15673:15672 -p 5673:5672 \
--link rabbitmq01:rabbitmq01 \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management


#創建rabbitmq03節點容器
docker run -d --hostname rabbitmq03 --name rabbitmq03 \
-v ~/mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq \
-p 15674:15672 -p 5674:5672 \
--link rabbitmq01:rabbitmq01 --link rabbitmq02:rabbitmq02 \
-e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management

##注意:--hostname 設置容器主機名,RABBITMQ_ERLANG_COOKIE 節點認證作用,集群部署需要同步該值,且值必須相同。
##多個容器之間使用“--link”連接,此屬性不能少;

安裝好后訪問測試,使用http://192.168.0.100:15672 進行訪問了,默認賬號密碼是guest/guest,其中192.168.0.100 是我的宿主機IP。顯示還未加入任何集群信息,只能看到我訪問的該一個節點信息。

docker中怎么搭建RabbitMQ集群

將RabbitMQ節點加入到集群

#進入rabbitmq01容器,重新初始化一下,如果是新安裝則reset可以忽略重置。
docker exec -it rabbitmq01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

#進入rabbitmq02容器,重新初始化一下,將02節點加入到集群中
docker exec -it rabbitmq02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01 #參數“--ram”表示設置為內存節點,忽略該參數默認為磁盤節點。
rabbitmqctl start_app
exit

#進入rabbitmq03容器,重新初始化一下,將03節點加入到集群中
docker exec -it rabbitmq03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

集群測試訪問

設置好之后,使用http://192.168.0.100:15672 進行訪問了,默認賬號密碼是guest/guest,其中192.168.0.100 是我的宿主機IP。啟動了3個節點,到此為止,我們已經完成了RabbitMQ普通模式集群的建立,啟動了3個節點,1個磁盤節點和2個內存節點。但是如果磁盤節點掛掉后,數據就丟失了。所以我們這個集群方案需要進一步改造為鏡像模式集群

docker中怎么搭建RabbitMQ集群

鏡像模式集群改造

鏡像隊列是Rabbit2.6.0版本帶來的一個新功能,允許內建雙活冗余選項,與普通隊列不同,鏡像節點在集群中的其他節點擁有從隊列拷貝,一旦主節點不可用,最老的從隊列將被選舉為新的主隊列。

**鏡像隊列的工作原理:**在某種程度上你可以將鏡像隊列視為,擁有一個隱藏的fanout交換器,它指示者信道將消息分發到從隊列上。

設置鏡像隊列

設置鏡像隊列命令:“rabbitmqctl set_policy 名稱 匹配模式(正則) 鏡像定義”, 例如,設置名稱為ha的鏡像隊列,匹配所有名稱是amp開頭的隊列都存儲在2個節點上的命令如下:

#隨便進入一個容器
docker exec -it rabbitmq01 bash
#設置策略匹配所有名稱是amp開頭的隊列都存儲在2個節點上的命令如下
rabbitmqctl set_policy -p / ha "^amp*" '{"ha-mode":"exactly","ha-params":2}'
#或者
#設置策略匹配所有名稱的隊列都進行高可用配置
rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

#查詢策略
rabbitmqctl list_policies -p / #查看vhost下的所有的策略(policies )

可以看出設置鏡像隊列,一共有四個參數,每個參數用空格分割

  1. 參數一:策略名稱,可以隨便填,此外我們命名為ha(高可用);

  2. 參考二:-p / 設置哪個虛擬主機,可以使用rabbitmqctl list_policies -p / 查看vhost 下所有的策略(policies )。

  3. 參數三:隊列名稱的匹配規則,使用正則表達式表示;

  4. 參數四:為鏡像隊列的主體規則,是json字符串,分為三個屬性:ha-mode | ha-params | ha-sync-mode,分別的解釋如下:

  • ha-mode:鏡像模式,分類:all/exactly/nodes,all存儲在所有節點;exactly存儲x個節點,節點的個數由ha-params指定;nodes指定存儲的節點上名稱,通過ha-params指定;

  • ha-params:作為參數,為ha-mode的補充;

  • ha-sync-mode:鏡像消息同步方式:automatic(自動),manually(手動);

至此rabbitmq集群算是搭建完畢,訪問創建一個隊列測試一下!如圖所示!

docker中怎么搭建RabbitMQ集群

查看鏡像隊列

rabbitmqctl list_policies

刪除鏡像隊列

rabbitmqctl clear_policy

總結

各位可以自己在docker容器搭建試試。最后大家在生產環境下使用也不用自己搭建,目前市面上阿里云、騰訊云 也提高比較優秀成熟的開箱即用 消息中間件 供大家選擇使用,如RocketMQ、Kafka、RabbitMQ;

  • 阿里云 · 消息隊列 MQ 消息隊列(Message Queue,簡稱 MQ)是構建分布式互聯網應用的基礎設施,通過 MQ 實現的松耦合架構設計可以提高系統可用性以及可擴展性,是適用于現代應用的最佳設計方案。如有消息隊列 RocketMQ 版 阿里巴巴官方指定消息產品,成熟、穩定、先進的技術體系打造金融級消息服務,感受雙十一產品的完美體驗。

  • 騰訊云消息隊列 TDMQ(Tencent Distributed Message Queue,下文中簡稱TDMQ)是一款基于 Apache 頂級開源項目 Pulsar 自研的金融級分布式消息中間件。其計算與存儲分離的架構設計,使得它具備極好的云原生和 Serverless 特性,用戶按量使用,無需關心底層資源。它擁有原生 Java 、 C++、Python、GO 等多種 API,同時支持 kafka 協議以及 HTTP 協議方式接入,可為分布式應用系統提供異步解耦和削峰填谷的能力,具備互聯網應用所需的海量消息堆積、高吞吐、可靠重試等特性。TDMQ 目前已應用在騰訊計費絕大部分場景,包括支付主路徑、實時對賬、實時監控、大數據實時分析等方面。

其他問題

如出現改過期警告:RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.

配置相同Erlang Cookie

有些特殊的情況,比如已經運行了一段時間的幾個單個物理機,我們在之前沒有設置過相同的Erlang Cookie值,現在我們要把單個的物理機部署成集群,實現我們需要同步Erlang的Cookie值。

1.為什么要配置相同的erlang cookie?

因為RabbitMQ是用Erlang實現的,Erlang Cookie相當于不同節點之間相互通訊的秘鑰,Erlang節點通過交換Erlang Cookie獲得認證。

2.Erlang Cookie的位置

要想知道Erlang Cookie位置,首先要取得RabbitMQ啟動日志里面的home dir路徑,作為根路徑。使用:“docker logs 容器名稱”查看,如下圖:

docker中怎么搭建RabbitMQ集群

所以Erlang Cookie的全部路徑就是“/var/lib/rabbitmq/.erlang.cookie”。

注意:每個人的erlang cookie位置可能不同,一定要查看自己的home dir路徑。

3.復制Erlang Cookie到其他RabbitMQ節點

獲取到第一個RabbitMQ的Erlang Cookie之后,只需要把這個文件復制到其他RabbitMQ節點即可。

物理機和容器之間復制命令如下:

  • 容器復制文件到物理機:docker cp 容器名稱:容器目錄 物理機目錄

  • 物理機復制文件到容器:docker cp 物理機目錄 容器名稱:容器目錄

設置Erlang Cookie文件權限:“chmod 600 /var/lib/rabbitmq/.erlang.cookie”。

上述內容就是docker中怎么搭建RabbitMQ集群,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

且末县| 沁源县| 黄浦区| 前郭尔| 新平| 平武县| 白玉县| 绥宁县| 水富县| 德江县| 太仓市| 阜新| 溆浦县| 兴宁市| 威远县| 安义县| 宜州市| 石河子市| 永昌县| 镇康县| 彭水| 新郑市| 渑池县| 宣汉县| 十堰市| 班戈县| 英吉沙县| 江城| 金阳县| 环江| 陆良县| 南澳县| 友谊县| 常山县| 梅河口市| 神池县| 泸定县| 宁津县| 邯郸县| 赤水市| 赣榆县|