1. 程式人生 > >Docker中實現RabbitMQ叢集

Docker中實現RabbitMQ叢集

1. docker環境準備
1). 獲取docker所在centos7的hostname值
2). Docker版本1.7,erlang版本17.3,docker-compose版本1.5.2
3). 映象及配置準備: rabbitmq-base:所需配置見下面的Dockerfile內容。注意:Dockerfile檔案中FROM為基礎映象centos和rabbitmq,其他不變(可以直接從docker官方拉取). rabbitmq-server:所需配置見server中的Dockerfile, erlang.cookie,rabbitmq.config以及startrabbit.sh。注意:Dockerfile檔案中FROM為rabbitmq-base製作映象的name, EXPOSE為對外暴露的埠,可自行新增。Erlang.cookie中是erlang通訊的cookie值,必須按其規則寫死。Startrabbit.sh中hostname與本虛擬機器的hostname保持一致。(hostname命令可直接檢視,hostname newname指令可以修改,newname為修改hostname). RabbitMQ例項叢集:所需docker-compose執行cluster檔案中的yml檔案。注意:每個節點名稱自定,但是要保持一致,image映象必須制定為rabbitmq-server建立的映象name, ports左邊是容器暴露埠,客戶端訪問埠,可自定修改,不產生埠衝突即可。

2. 映象製作與docker-compose一鍵部署
1). 基礎映象匯入及docker-compose安裝
a). SSHClient工具上傳docker-compose-Linux-x86_64到/usr/local/bin目錄下
b). mv docker-compose-Linux-x86_64 docker-compose #修改名稱
c). chmod +x /usr/local/bin/docker-compose #設定檔案訪問許可權
d). docker-compose -version #檢視版本
e). docker-compose up -d #後臺模式被啟動
2). rabbitmq-base映象製作
在base資料夾執行命令 docker build -t rabbitmq-base:3.6.5 .(千萬別忘記空格”.”)
這裡寫圖片描述


3). rabbitmq-server映象製作:
同rabbitmq-base一樣設定,執行docker build -t rabbit-server:3.6.5

4). 檢視映象: docker images
5). 一鍵部署:
只需要在cluster檔案執行:-compose up -d
此命令會在當前目錄及父目錄中搜索yml,yaml等檔案,並自動執行。
這裡寫圖片描述 (成功建立三個節點)
6). 檢視例項
執行命令: docker ps
這裡寫圖片描述

至此,通過docker-compose建立例項完成。

3. 叢集及高可用實現
1). 實現rabbitmq叢集
a.首先進入每個容器,啟動客戶端管理外掛。
執行命令:docker exec -i -t ca9d909c529c bash進入ID為ca9d909c529c的容器。
執行命令: rabbitmq-plugins enable rabbitmq_management啟動外掛。
執行命令:exit退出容器(容器依舊工作,不會停止服務)
b. 在yml檔案中,已制定了三個節點之間的掛載管理,節點2掛載在節點1,節點3掛載叢集1, 2節點上。所以,再加入叢集操作時,也按照該順序執行。先進入節點2,執行命令:rabbitmqctl stop_app停止服務. 然後執行命令:rabbitmqctl join_cluster –ram [email protected]接著執行命令:rabbitmqctl start_app啟動服務.
這裡寫圖片描述(節點1和節點2實現了叢集), 同樣的操作在節點3操作,掛載的節點可以是1或者2。 –ram指定記憶體,如果不寫指定磁碟,其中記憶體在訊息吞吐上效能更加,磁碟可以保證訊息持久化。
c. 所有對外暴露的埠對外開放
開發埠:firewall-cmd –zone=public –add-port80/tcp –permanent (–permanent永久生效:firewall-cmd –reload)
d. 客戶端
在瀏覽器地址輸入ip:15672, 按照預設賬號密碼登陸, 可以看到三個節點實現”負載均衡”的叢集。
這裡寫圖片描述
2). 實現高可用
實現高可用的策略和普通Linux上一樣,詳見Linux部署手冊。
這裡寫圖片描述(黃色數量根據節點數目和策略自動映象的佇列,紅色是映象策略的一種。)

4. docker及rabbitmq常見操作命令

Docker:
版本檢視:docker version
服務啟動:service docker start
服務關閉:service docker stop
服務重啟:service docker restart
服務資訊:docker info

映象庫提供的多個映象:docker search redis      
拉取最後版本的docker-redis映象:docker pull redis         
檢視映象:docker images
啟動映象例項:docker run -d --name redis7001 -p 7001:6379 redis

檢視當前執行的dockerid:docker ps                               
檢視已有的可能狀態是停止:docker ps -a                           
開啟例項:docker start b193fbe1e400              #如重啟可能例項被關閉
停止例項:docker stop b193fbe1e400               
刪除執行的docker:docker rm –f 0cfc4932b9a0       # -f強制刪除

刪除映象:docker rmi xcfc4932b9a0                
建立映象:docker build -t jt-centos6:0.0.1 .
匯出映象:docker save -o jt-centos6.tar jt-centos6:0.0.1
匯入映象:docker load -i jt-centos6.tar
進入容器:docker exec -it 0cfc4932b9a0 bash
退出容器:exit

設定檔案許可權:chmod +x /usr/local/bin/docker-compose
檢視版本:docker-compose -version                            
後臺模式被啟動docker-compose up -d                             

檢視版本:COMPOSE_PROJECT_NAME=myzk docker-compose ps            
先停止:COMPOSE_PROJECT_NAME=myzk docker-compose stop       
後刪除:COMPOSE_PROJECT_NAME=myzk docker-compose rm         

Rabbitmq:
啟動服務:service rabbitmq-server start
停止服務:service rabbitmq-server stop
重啟服務:service rabbitmq-server restart
錯誤日誌目錄:/var/log/rabbitmq/startup_err
設定開機啟動:chkconfig rabbitmq-server on

啟動後臺管理:rabbitmq-plugins enable rabbitmq_management

叢集:
停止服務:rabbitmqctl stop_app
加入叢集:rabbitmqctl join_cluster --ram [email protected]
rabbitmqctl start_app

5. 要到的配置程式碼
Dockerfile

FROM jt-centos6:0.0.1

FROM rabbitmq:latest

RUN /usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt rabbitmq_stomp rabbitmq_management  rabbitmq_management_agent rabbitmq_management_visualiser rabbitmq_federation rabbitmq_federation_management sockjs

#CMD /usr/sbin/rabbitmq-server

server中的Dockerfile

FROM mq-base:latest

ADD rabbitmq.config /etc/rabbitmq/

RUN chmod u+rw /etc/rabbitmq/rabbitmq.config

ADD erlang.cookie /var/lib/rabbitmq/.erlang.cookie

RUN chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

RUN chmod 400 /var/lib/rabbitmq/.erlang.cookie

RUN mkdir /opt/rabbit

ADD startrabbit.sh /opt/rabbit/

RUN chmod a+x /opt/rabbit/startrabbit.sh


EXPOSE 5672
EXPOSE 15672
EXPOSE 25672
EXPOSE 4369
EXPOSE 9100
EXPOSE 9101
EXPOSE 9102
EXPOSE 9103
EXPOSE 9104
EXPOSE 9105

CMD /opt/rabbit/startrabbit.sh

server中的erlang.cookie

JHWMKVOYFWWBXWXOYXFQ

server中的rabbitmq.config

[{rabbit, [{loopback_users, []}]}].

server中的startrabbit.sh

#!/bin/bash

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie

RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server

 if [ -z "$CLUSTERED" ]; then
#       # if not clustered then start it normally as if it is a single server
        RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server
 else
        if [ -z "$CLUSTER_WITH" -o -z "$CLUSTER_NODENAME" ]; then
                # If clustered, but cluster with is not specified then again start normally, could be the first server in the
                # cluster
                RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server
        else
                RABBITMQ_NODENAME=$RABBITMQ_NODENAME /usr/sbin/rabbitmq-server -detached
                /usr/sbin/rabbitmqctl stop_app
                if [ -z "$RAM_NODE" ]; then
                        /usr/sbin/rabbitmqctl join_cluster $RABBITMQ_NODENAME@$CLUSTER_WITH
                else
                        /usr/sbin/rabbitmqctl join_cluster --ram $RABBITMQ_NODENAME@$CLUSTER_WITH
                fi
                /usr/sbin/rabbitmqctl start_app
                # /usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt rabbitmq_stomp rabbitmq_management  rabbitmq_management_agent rabbitmq_management_visualiser rabbitmq_federation rabbitmq_federation_management sockjs

                # Tail to keep the a foreground process active..
                #tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
                tail -f /etc/hosts
        fi
 fi

cluster中的compose.yml


rabbit1:
  image: mq-server:latest
  hostname: rabbit1
  ports:
    - "5672:5672"
    - "15672:15672"
  environment:
    - RABBITMQ_DEFAULT_USER=admin
    - RABBITMQ_DEFAULT_PASS=admin
rabbit2:
  image: mq-server:latest
  hostname: rabbit2
  links:
    - rabbit1
  environment:
   - CLUSTERED=true
   - CLUSTER_WITH=rabbit1
   - RAM_NODE=true
  ports:
      - "5673:5672"
      - "15673:15672"

rabbit3:
  image: mq-server:latest
  hostname: rabbit3
  links:
    - rabbit1
    - rabbit2
  environment:
   - CLUSTERED=true
   - CLUSTER_WITH=rabbit1
  ports:
        - "5674:5672"
        - "15674:15672"

相關推薦

Docker實現RabbitMQ叢集

1. docker環境準備 1). 獲取docker所在centos7的hostname值 2). Docker版本1.7,erlang版本17.3,docker-compose版本1.5.2 3). 映象及配置準備: rabb

Docker安裝rabbitmq並啟用插件

sea tex The daemon gen ef7 onf info shard 1.獲取rabbitmq鏡像,註意獲取鏡像的時候要獲取management,不要獲取last版本,management版本才是帶有管理界面的,結果如下 root@newings:/usr/

docker搭建Hadoop叢集

前提:jdk和ssh服務都已經安裝完成,如未完成,請參考博主所寫部落格 1、建立映象容器 -P將容器的所有埠對映到主機埠 docker run -itd -v /c/Users:/root/build -P -h master --name master --net mynetwork --

docker簡易搭建RabbitMQ叢集

寫在前面:rabbitmq叢集與其他叢集有些不同,rabbitmq叢集同步的指是複製佇列,元資料資訊的同步,即同步的是資料儲存資訊;訊息的存放只會儲存在建立該訊息佇列的那個節點上。並非在節點上都儲存一個完整的資料。在通過非資料所在節點獲取資料時,通過元資料資訊,路由轉發到儲存資料節點上,從而

docker安裝rabbitMQ

Docker下載RabbitMQ映象時需要知道rabbitmq的版本問題 rabbitmq:x-management : 安裝啟動後,可以使用rabbitmq管理介面 rabbitmq:x :不可以使用

使用Docker-Compose搭建Rabbitmq叢集

1.使用映象搭建叢集,docker-compose.xml配置見下面的github具體配置 2.如果需要跨伺服器,參考 具體變更如下: 說完埠,下面提供一個三節點的docker-compose檔案。 rabbit1(10.106.136.7) 1

docker部署redis叢集

第一步執行 docker run -itd --net shadownet --privileged=true --ip 172.18.0.20 -d -p 7003:7003 -p 7004:7004 -p 7005:7005 -p 17003:17003 -p 1700

如何在docker部署Elasticsearch叢集和kibana

做實驗時需要了解Elasticsearch叢集如何操作?通過使用docker-compose可以批量建立docker容器,啟動ES叢集。 先配置檔案docker-compose.yml檔案如下: 1 version: '2.2' 2 networks: 3 esnet: 4 services:

docker-compose安裝rabbitmq 叢集和管理工具

單機版 rabbit1: image: rabbitmq:management hostname: rabbit1 ports: - "4369:4369" - "56

Docker搭建zookeeper叢集

1.獲取官方映象 從dockerhub獲取官方的zookeeper映象: docker pull zookeeper 2.瞭解映象內容 拉取完映象後,通過 docker inspect zookeeper 我們可以檢視到關於該映象的一些基本資訊: ...... "Env": [ "PATH=/usr/

docker-compose配置rabbitmq叢集伺服器

交流QQ號:555913397 有什麼問題可以加群大家一起交流 Docker安裝 安裝環境:Centos7 1.安裝docker yum install -y docker 2.配置阿里雲docker映象服務 在阿里雲容器映象服務裡有個映象加速器,在裡

Docker執行consul叢集

前言 這篇部落格主要依賴上一篇文章,在阿里雲ECS中已經構建了consul映象,同樣的步驟,可以在騰訊雲中構建consul映象,用阿里雲和騰訊雲的主要原因就是新註冊使用者可以免費用一段時間的伺服器。 DNS設定 修改Docker守護程序的DNS查詢設定

在 Istio 實現 Redis 叢集的資料分片、讀寫分離和流量映象

Redis 是一個高效能的 key-value 儲存系統,被廣泛用於微服務架構中。如果我們想要使用 Redis 叢集模式提供的高階特性,則需要對客戶端程式碼進行改動,這帶來了應用升級和維護的一些困難。利用 Istio 和 Envoy ,我們可以在不修改客戶端程式碼的前提下實現客戶端無感知的 Redis Clu

Rabbitmqdocker的安裝

docker run -d --hostname my-rabbit --name some-rabbit -p 5672:15672 rabbitmq:3.7.7-management 說明: -hostname:必須的 --name:這個可以自定義(非必須) -p 5672

在windows環境單機搭建rabbitmq叢集

建議單機版叢集僅作為學習使用,生產環境最好使用多伺服器叢集來避免單點故障帶來的服務不可用,必竟單機版的集是偽叢集。 1:準備基礎檔案、環境變數   設定環境變數:   變數名:RABBITMQ_BASE   變數值:C:\Program Files\RabbitMQ Server(例:這個是安裝目錄的

RabbitMQ實戰篇8-在庫存服務配置RabbitMQ實現訊息接收

上節介紹瞭如何實現訊息的傳送,這節我們接著上節說說如何實現訊息的接收。 新增依賴,進行配置 同樣的,訊息消費者也需要新增RabbitMQ的依賴,配置連線資訊。 因為在上一節已經說過了,這裡過於依賴和連線資訊的配置就不在贅述了。 訂閱訊息 新建一個OrderConsumer,用於訂閱和消費訊

網路故障模擬,cpu高壓以及docker實現

利用tc進行丟包 通過網路丟包來模擬網路故障,是測試中一個重要的測試專案。這對服務來說可以測試其在網路故障時的異常處理的能力,對於服務的可靠性是一個相當嚴苛的測試。 網絡卡名為$netcard,丟包率為$Packet_loss,異常時間為$interval1.注入網路異常,使用robot framewor

docker swarm 實現叢集

(1) go 編寫 web 程式      主要實現 監聽 ip:9090/Source 瀏覽,並記錄 伺服器主機與訪問次數。     程式碼 package main import (

02 使用Docker部署RabbitMQ叢集

用Docker部署RabbitMQ叢集 Welcome to Alibaba Cloud Elastic Compute Service ! [[email protected] ~]# docker pull rabbitmq Using defa

docker實現redis叢集

1、下載redis作為製作映象前提準備wget http://download.redis.io/releases/redis-3.2.4.tar.gz2、Dockerfile製作(與redis-3.2.4.tar.gz同目錄--redis-cluster)FROM cent