RabbitMQ docker部署鏡像隊列


一、鏡像模式

docker pull rabbitmq:3-management

容器間建立連接,不使用--link,推薦使用 network

創建橋接網絡

docker network create rabbitmanet

啟動並創建容器master72、slave73、slave74

docker run -d --name=master72 -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=master72 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h master72 --net=rabbitmanet rabbitmq:3-management
docker run -d --name=slave73 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=slave73 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h slave73 --net=rabbitmanet rabbitmq:3-management 
docker run -d --name=slave74 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=slave74 -e RABBITMQ_ERLANG_COOKIE='YAOZH' -h slave74 --net=rabbitmanet rabbitmq:3-management
RABBITMQ_ERLANG_COOKIE:通過Erlang Cookie,相當於共享秘鑰的概念,長度任意,只要所有容器都一致即可。
-h: 設置容器hostname名稱
–net: 設置所屬網絡

訪問:IP:15672

遇到問題,阿里雲服務器需要創建安全組才能訪問

默認賬戶密碼:guest

基礎了解:https://blog.csdn.net/lobber1987/article/details/79045494

新增用戶密碼(可以跳過):

在添加用戶時,我們選擇了Tags,Tags也就是用戶角色,它有如下五種:

超級管理員(administrator):可登陸管理控制台(啟用management plugin的情況下),可查看所有的信息,並且可以對用戶,策略(policy)進行操作。

監控者(monitoring):可登陸管理控制台(啟用management plugin的情況下),同時可以查看rabbitmq節點的相關信息(進程數,內存使用情況,磁盤使用情況等)。

策略制定者(policymaker):可登陸管理控制台(啟用management plugin的情況下), 同時可以對policy進行管理。但無法查看節點的相關信息。

普通管理者(management):僅可登陸管理控制台(啟用management plugin的情況下),無法看到節點信息,也無法對策略進行管理。

其他:無法登陸管理控制台,通常就是普通的生產者和消費者。

通過命令的方式

  1.  
    # 設置用戶為administrator角色
  2.  
    rabbitmqctl set_user_tags username administrator

添加用戶

docker exec -it myrabbit1 bash

rabbitmqctl list_users

rabbitmqctl add_user username passwd
rabbitmqctl set_user_tags newadmin administrator 
rabbitmqctl set_permissions -p / newadmin "." "." ".*" (這個沒有執行,也能登陸,等遇到問題在說)

刪除用戶

rabbitmqctl delete_user username

修改用戶密碼

rabbitmqctl change_password username newpasswd

查看用戶列表

rabbitmqctl list_users

 

salve加入集群操作(注意做這個步驟的時候:需要配置/etc/hosts必須相互能夠尋地到 我們已通過-h指定hostname)
分別進入slave73、slave73容器(docker exec -it 容器id /bin/bash),執行一下:

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram master72@master72

//(--ram:內存存儲方式,默認磁盤存儲 master72磁盤存儲,用於數據存儲和交換)

rabbitmqctl start_app 

ex:

[root@iZuf6f9ue9eyhx2y1892nhZ ~]# docker exec -it 5ba894a93d6a /bin/bash
root@slave74:/# rabbitmqctl stop_app
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.
Stopping rabbit application on node slave74@slave74 ...
root@slave74:/# rabbitmqctl join_cluster --ram master72@master72
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.
Clustering node slave74@slave74 with master72@master72
root@slave74:/# rabbitmqctl start_app
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.
Starting node slave74@slave74 ...

訪問任意一個節點:

//其他基本操作 // 在另外其他節點上操作要移除的集群節點 rabbitmqctl forget_cluster_node master73@master73

//集群名稱(默認為第一個node名稱)修改(任意節點): rabbitmqctl set_cluster_name rabbitmq_cluster1

//查看集群狀態(任意節點) rabbitmqctl cluster_status

 

配置鏡像隊列:

//設置鏡像隊列策略(在任意一個節點上執行) rabbitmqctl set_policy ha-all "^node." '{"ha-mode":"all"}'

 

其他問題

如出現改過期警告: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值。

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

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

2.Erlang Cookie的位置

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

注意:每個人的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”。

二、HaProxy

HaProxy是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HaProxy特別適用於負載特大的web站點,這些站點通常又需要會話保持或七層處理。HaProxy運行在時下的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以簡單安全整合進您當前框架中,同時可以保護你的web服務器不被暴露到網絡上

獲取最新鏡像:

sudo docker pull haproxy

創建容器rabbitmq-haproxy8100掛載的配置文件haproxy.cfg

[root@iZuf6f9ue9eyhx2y1892nhZ 8100]# pwd
/home/haproxy/8100

[root@iZuf6f9ue9eyhx2y1892nhZ 8100]# cat haproxy.cfg

#logging options
global
    log 127.0.0.1 local0 info
    maxconn 5120
    chroot /usr/local/etc/haproxy
    uid 99
    gid 99
    daemon
    quiet
    nbproc 20
    pidfile /var/run/haproxy.pid

defaults
    log global
    #使用4層代理模式,”mode http”為7層代理模式
    mode tcp
    #if you set mode to tcp,then you nust change tcplog into httplog
    option tcplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    timeout connect 5s
    #客戶端空閑超時時間為 60秒 則HA 發起重連機制
    timeout client 60s
    #服務器端鏈接超時時間為 15秒 則HA 發起重連機制
    timeout server 15s
#front-end IP for consumers and producters
listen rabbitmq_cluster
    bind 0.0.0.0:5678
    #配置TCP模式
    mode tcp
    #balance url_param userid
    #balance url_param session_id check_post 64
    #balance hdr(User-Agent)
    #balance hdr(host)
    #balance hdr(Host) use_domain_only
    #balance rdp-cookie
    #balance leastconn
    #balance source //ip
    #簡單的輪詢
    balance roundrobin
    #rabbitmq集群節點配置 
    #inter 每隔五秒對mq集群做健康檢查, 2次正確證明服務器可用,2次失敗證明服務器不可用,並且配置主備機制
    server master72 11.111.11.11:5672 check inter 5000 rise 2 fall 2
    server slave73 11.111.11.11:5673 check inter 5000 rise 2 fall 2
    server slave74 11.111.11.11:5674 check inter 5000 rise 2 fall 2
#配置haproxy web監控,查看統計信息
listen stats
    bind 0.0.0.0:8101
    mode http
    option httplog
    stats enable
    #設置haproxy監控地址為http://localhost:8100/rabbitmq-stats
    stats uri /rabbitmq-stats
    stats refresh 5s
    stats auth admin:admin@1234
listen rabbitmq_admin #監聽8000端口轉發到rabbitmq的客戶端
    bind 0.0.0.0:8001
    server master72 11.111.11.11:15672 check inter 5000 rise 2 fall 2
    server slave73 11.111.11.11:15673 check inter 5000 rise 2 fall 2
    server slave74 11.111.11.11:15674 check inter 5000 rise 2 fall 2

-----

運行容器:

docker run --name rabbitmq-haproxy8100 -p 5677:5677 -p 8100:8100 -p 8000:8000 --net=rabbitmanet -v /home/haproxy/8100/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest

 

 

后記:至於keppalived,后續再說

 

 
        

 




 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM