欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker搭建RabbitMq的普通集群和鏡像集群的詳細(xì)操作

 更新時(shí)間:2021年11月18日 08:35:23   作者:我什么時(shí)候能變強(qiáng)啊!  
這篇文章主要介紹了Docker搭建RabbitMq的普通集群和鏡像集群,我本機(jī)是window10,通過docker搭建兩個(gè)rabbitmq節(jié)點(diǎn),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

普通集群:多個(gè)節(jié)點(diǎn)組成的普通集群,消息隨機(jī)發(fā)送到其中一個(gè)節(jié)點(diǎn)的隊(duì)列上,其他節(jié)點(diǎn)僅保留元數(shù)據(jù),各個(gè)節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列結(jié)構(gòu)、交換器結(jié)構(gòu)、vhost等。消費(fèi)者消費(fèi)消息時(shí),會(huì)從各個(gè)節(jié)點(diǎn)拉取消息,如果保存消息的節(jié)點(diǎn)故障,則無(wú)法消費(fèi)消息,如果做了消息持久化,那么得等該節(jié)點(diǎn)恢復(fù),然后才可被消費(fèi);如果沒有持久化的話,就會(huì)產(chǎn)生消息丟失的現(xiàn)象。

鏡像集群:它是在普通模式的基礎(chǔ)上,把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個(gè)節(jié)點(diǎn)來(lái)實(shí)現(xiàn)高可用(HA)。該模式解決了上述問題,Broker會(huì)主動(dòng)地將消息實(shí)體在各鏡像節(jié)點(diǎn)間同步,在consumer取數(shù)據(jù)時(shí)無(wú)需臨時(shí)拉取。該模式帶來(lái)的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)被大量消耗。通常地,對(duì)可靠性要求較高的場(chǎng)景建議采用鏡像模式。

一、搭建RabbitMq的運(yùn)行環(huán)境

我本機(jī)是window10,通過docker搭建兩個(gè)rabbitmq節(jié)點(diǎn)。

1.通過search查詢r(jià)abbitmq鏡像

docker search rabbitmq

2.通過pull拉取rabbitmq的官方最新鏡像

這里最好帶上tag為management的版本,否則拉最新的latest,web管理頁(yè)無(wú)法顯示全,會(huì)提示overview:management only mode

docker pull rabbitmq:3.8.25-management

3.創(chuàng)建容器

 docker run -d --name rabbitmq1 -p 5672:5672 -p 15672:15672 --hostname myRabbit1 -e RABBITMQ_DEFAULT_VHOST=my_vhost1  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin a4eb038c2ecb

--name:容器名稱

-p:端點(diǎn)映射

--hostname:rabbitmq的節(jié)點(diǎn)名稱

-e RABBITMQ_DEFAULT_VHOST:虛擬主機(jī)名稱

-e RABBITMQ_DEFAULT_USER:登錄賬號(hào)

-e RABBITMQ_DEFAULT_PASS:登錄密碼

a4eb038c2ecb是鏡像id,根據(jù)自己情況替換。

4.啟動(dòng)管理頁(yè)面

我們的鏡像默認(rèn)沒有開啟web管理頁(yè)面,所以我們通過exec命令進(jìn)入容器啟動(dòng),這個(gè)鏡像的環(huán)境是ubuntu的

PS C:\> docker exec -it 639a151c5440 /bin/bash
root@myRabbit:/# rabbitmq-plugins enable rabbitmq_management

瀏覽器中訪問http://localhost:15672/即可打開,另一個(gè)rabbitmq如法炮制,區(qū)別之處在于更換端口為5673和15673等,并且創(chuàng)建容器時(shí)使用--link連接第一個(gè)rabbitmq節(jié)點(diǎn)(也可創(chuàng)建橋接網(wǎng)絡(luò)network連接),如下

docker run -d --name rabbitmq2 -p 5673:5672 -p 15673:15672 --hostname myRabbit2 -e RABBITMQ_DEFAULT_VHOST=my_vhost2  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --link rabbitmq1:myRabbit1 a4eb038c2ecb

5.設(shè)置erlang cookie

erlang cookie原本可以通過run容器時(shí)設(shè)置參數(shù)-e RABBITMQ_ERLANG_COOKIE,但是現(xiàn)在過期棄用了。

我們先通過docker logs命令查看容器的運(yùn)行日志,尋找home dir參數(shù)如下

PS D:\> docker logs rabbitmq1
//.....這里省略
  Starting broker...2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  node           : rabbit@myRabbit1
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  home dir       : /var/lib/rabbitmq
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  config file(s) : /etc/rabbitmq/conf.d/10-default-guest-user.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>                 : /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  cookie hash    : Aed9pjd9vYWw3hng7Gjmkg==
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  log(s)         : /var/log/rabbitmq/rabbit@myRabbit1_upgrade.log
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>                 : <stdout>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>  database dir   : /var/lib/rabbitmq/mnesia/rabbit@myRabbit1

所以.erlang.cookie文件在此路徑下,我們進(jìn)入容器可以看到此文件

root@myRabbit1:~# ls -a /var/lib/rabbitmq
.  ..  .bash_history  .erlang.cookie  mnesia

我們?cè)僭O(shè)置erlang cookie的權(quán)限,在容器內(nèi)運(yùn)行如下代碼,如果權(quán)限不夠后續(xù)操作會(huì)報(bào)錯(cuò)

chmod 600 /var/lib/rabbitmq/.erlang.cookie

之后我們通過docker cp命令將rabbitmq1中的.erlang.cookie文件拷到物理機(jī)上再拷貝到rabbitmq2的容器中,物理機(jī)和容器之間復(fù)制命令如下:

  • 容器復(fù)制文件到物理機(jī):docker cp 容器名稱:容器目錄
  • 物理機(jī)目錄物理機(jī)復(fù)制文件到容器:docker cp 物理機(jī)目錄 容器名稱:容器目錄

具體代碼如下:

docker cp rabbitmq1:/var/lib/rabbitmq/  d:\workspace\
docker cp d:\workspace\rabbitmq\.erlang.cookie rabbitmq2:/var/lib/rabbitmq/

復(fù)制之后需要重啟rabbitmq2容器,否則執(zhí)行rabbitmqctl命令報(bào)如下錯(cuò)誤:

[error] Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only

二、普通模式

重啟后進(jìn)入容器將rabbitmq2的節(jié)點(diǎn)加入rabbitmq1中創(chuàng)建普通集群,分別執(zhí)行如下代碼即可:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@myRabbit1    //myRabbitmq1為rabbitmq1容器中rabbitmq的hostname
rabbitmqctl start_app

之后我們?cè)賥eb管理頁(yè)可以看到兩個(gè)節(jié)點(diǎn)了。

在任意一個(gè)節(jié)點(diǎn)創(chuàng)建一個(gè)隊(duì)列,另一個(gè)節(jié)點(diǎn)也會(huì)生成相同的隊(duì)列。而且可以發(fā)現(xiàn)rabbitmq2的vhost從my_vhost2變?yōu)榱薽y_vhost1與rabbitmq相同了。

三、鏡像模式

鏡像模式就是在普通模式的基礎(chǔ)上進(jìn)入rabbitmq1容器輸入如下命令即可:

rabbitmqctl set_policy -p my_vhost1 ha-all "^" '{"ha-mode":"all"}' --apply-to all

具體的格式為

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可選參數(shù),針對(duì)指定vhost下的queue進(jìn)行設(shè)置
Name: policy的名稱
Pattern: queue的匹配模式(正則表達(dá)式)
Definition:鏡像定義,包括三個(gè)部分ha-mode, ha-params, ha-sync-mode
        ha-mode:指明鏡像隊(duì)列的模式,有效值為 all/exactly/nodes
            all:表示在集群中所有的節(jié)點(diǎn)上進(jìn)行鏡像
            exactly:表示在指定個(gè)數(shù)的節(jié)點(diǎn)上進(jìn)行鏡像,節(jié)點(diǎn)的個(gè)數(shù)由ha-params指定
            nodes:表示在指定的節(jié)點(diǎn)上進(jìn)行鏡像,節(jié)點(diǎn)名稱通過ha-params指定
        ha-params:作為參數(shù),為ha-mode的補(bǔ)充
        ha-sync-mode:進(jìn)行隊(duì)列中消息的同步方式,有效值為automatic和manual
priority:可選參數(shù),policy的優(yōu)先級(jí)

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' --apply-to all

或者登錄rabbitmq管理頁(yè)面 ——> Admin ——> Policies ——> Add / update a policy

name:策略名稱

Pattern:^ 匹配符,只有一個(gè)^代表匹配所有。^message指同步“message”開頭的隊(duì)列名稱

Definition:ha-mode=all 為匹配類型,分為3種模式:all(表示所有的queue)

Priority:優(yōu)先級(jí),首先根據(jù)priority排序,值越大的優(yōu)先級(jí)越高;相同priority則根據(jù)創(chuàng)建時(shí)間排序,越晚創(chuàng)建的優(yōu)先級(jí)越高。

簡(jiǎn)單說(shuō)明一下 Operator Policy 和 User Policy 的區(qū)別:

  • Operator Policy 是給服務(wù)提供商或公司基礎(chǔ)設(shè)施部門用來(lái)設(shè)置某些需要強(qiáng)制執(zhí)行的通用規(guī)則
  • User Policy 是給業(yè)務(wù)應(yīng)用用來(lái)設(shè)置的規(guī)則

Operator Policy 和 User Policy 會(huì)合并后作用于隊(duì)列,并且為防止 Operator Policy 對(duì)隊(duì)列某些關(guān)鍵屬性例如死信隊(duì)列交換器Dead Letter Exchange的覆蓋導(dǎo)致業(yè)務(wù)應(yīng)用產(chǎn)生非預(yù)期的結(jié)果,Operator Policy 只支持expiremessage-ttl、max-length、max-length-bytes4個(gè)參數(shù)。

參考學(xué)習(xí):

https://www.cnblogs.com/knowledgesea/p/6535766.html

https://blog.csdn.net/belonghuang157405/article/details/83540148

到此這篇關(guān)于Docker搭建RabbitMq的普通集群和鏡像集群的文章就介紹到這了,更多相關(guān)Docker搭建RabbitMq集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker上實(shí)現(xiàn)Redis集群搭建

    Docker上實(shí)現(xiàn)Redis集群搭建

    redis集群對(duì)于很多人來(lái)說(shuō)非常熟悉,雖然集群搭建的文章在網(wǎng)上很多,但是今天給大家介紹的是在docker上實(shí)現(xiàn)Redis集群搭建,感興趣的可以了解下
    2021-05-05
  • 詳解使用?docker?compose?部署?golang?的?Athens?私有代理問題

    詳解使用?docker?compose?部署?golang?的?Athens?私有代理問題

    這篇文章主要介紹了使用?docker-compose?部署?golang?的?Athens?私有代理,幫助大家快速學(xué)習(xí)athens 如何構(gòu)建私有代理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Docker容器之間數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)

    Docker容器之間數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)

    本文主要介紹了Docker容器之間數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • CentOS?7安裝Docker

    CentOS?7安裝Docker

    這篇文章介紹了CentOS?7安裝Docker的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Docker 使用國(guó)內(nèi)鏡像倉(cāng)庫(kù)的方法

    Docker 使用國(guó)內(nèi)鏡像倉(cāng)庫(kù)的方法

    這篇文章主要介紹了Docker 使用國(guó)內(nèi)鏡像倉(cāng)庫(kù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • docker?compose運(yùn)行微服務(wù)項(xiàng)目的方法

    docker?compose運(yùn)行微服務(wù)項(xiàng)目的方法

    這篇文章主要介紹了docker?compose運(yùn)行微服務(wù)項(xiàng)目?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 詳解Docker在哪里保存日志文件

    詳解Docker在哪里保存日志文件

    本文主要介紹了Docker在哪里保存日志文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用docker的python基礎(chǔ)鏡像時(shí)要指定patch版本原理

    使用docker的python基礎(chǔ)鏡像時(shí)要指定patch版本原理

    這篇文章主要為大家介紹了使用docker的python基礎(chǔ)鏡像時(shí)要指定patch版本原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • idea集合docker實(shí)現(xiàn)鏡像打包一鍵部署

    idea集合docker實(shí)現(xiàn)鏡像打包一鍵部署

    這篇文章主要介紹了idea集合docker實(shí)現(xiàn)鏡像打包一鍵部署
    2021-02-02
  • 你可能不知道的docker命令奇淫怪巧

    你可能不知道的docker命令奇淫怪巧

    這篇文章主要介紹了你可能不知道的docker命令的奇淫怪巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評(píng)論