1. 程式人生 > >RabbitMQ 高可用叢集

RabbitMQ 高可用叢集

  1. 基本概念

    • 記憶體節點

      只儲存狀態到記憶體,例外情況是:持久的 queue 的內容將被儲存到磁碟。
      
    • 磁碟節點

      儲存狀態到記憶體和磁碟。
      
    • 記憶體節點由於不進行磁碟讀寫,它的效能比磁碟節點高。

    • 叢集中可以存在多個磁碟節點,磁碟節點越多整個叢集可用性越好,但是叢集整體效能不會線性增加,需要權衡考慮。

    • 如果叢集中只有記憶體節點,那麼不能停止它們,否則所有狀態和訊息都會丟失。

  2. 安裝 RabbitMQ

    • 準備四臺主機,我是用 Docker 來建立的,命令如下:

      ➜  ~ docker run -i -d --name rabbitmq1 --hostname rabbitmq1 registry.docker-cn.com/library/erlang:latest
      0823993f94d732b9e501ff62920ed0149cb33bcea1992e73f054b79fad5747c0
      ➜  ~ docker run -i -d --name rabbitmq2 --hostname rabbitmq2 registry.docker-cn.com/library/erlang:latest
      961e45d0a3219e43887866eea39b3d68aeb6ea81c78cf5bf6006be5483930e68
      ➜  ~ docker run -i -d --name rabbitmq3 --hostname rabbitmq3 registry.docker-cn.com/library/erlang:latest
      ef08f580066489465f5fd6201455a4680954cfa3e0591e36346a6e610c7cd82c
      ➜  ~ docker run -i -d --name haproxy --hostname haproxy -p 8100:8100 -p 8101:8101 -p 8102:8102 registry.docker-cn.com/library/ubuntu:14.04
      f05a01380908ca639004e11bef0ce3bb38c0a6485d2ffb16f30ad62dedca9647
      ➜  ~ docker ps
      CONTAINER ID        IMAGE                                          COMMAND             CREATED              STATUS              PORTS                              NAMES
      f05a01380908        registry.docker-cn.com/library/ubuntu:14.04    "/bin/bash"
      About a minute ago Up About a minute 0.0.0.0:8100-8102->8100-8102/tcp haproxy ef08f5800664 registry.docker-cn.com/library/erlang:latest "erl" 2 minutes ago Up 2 minutes rabbitmq3 961e45d0a321 registry.docker-cn.com/library/erlang:latest "erl"
      2 minutes ago Up 2 minutes rabbitmq2 0823993f94d7 registry.docker-cn.com/library/erlang:latest "erl" 3 minutes ago Up 2 minutes rabbitmq1 ➜ ~ docker inspect --format='{{.NetworkSettings.IPAddress}}'
      rabbitmq1 172.17.0.2 ➜ ~ docker inspect --format='{{.NetworkSettings.IPAddress}}' rabbitmq2 172.17.0.3 ➜ ~ docker inspect --format='{{.NetworkSettings.IPAddress}}' rabbitmq3 172.17.0.4 ➜ ~ docker inspect --format='{{.NetworkSettings.IPAddress}}' haproxy 172.17.0.5

      haproxy 主機開了三個埠,後面講到 HAProxy 負載均衡時再解釋這三個埠的作用。

    • 安裝 RabbitMQ

      • 下面是每一步的命令:

        root@rabbitmq1:~# wget https://dl.bintray.com/rabbitmq/binaries/rabbitmq-server-generic-unix-3.6.14.tar.xz
        root@rabbitmq1:~# xz -d rabbitmq-server-generic-unix-3.6.14.tar.xz
        root@rabbitmq1:~# tar -xvf rabbitmq-server-generic-unix-3.6.14.tar
        root@rabbitmq1:~# cd rabbitmq_server-3.6.14/
        root@rabbitmq1:~/rabbitmq_server-3.6.14# ls -l
        total 248
        -rw-r--r-- 1 1023 1023    93 Nov  7 07:46 INSTALL
        -rw-r--r-- 1 1023 1023 28247 Nov  7 07:46 LICENSE
        -rw-r--r-- 1 1023 1023 11425 Nov  7 07:46 LICENSE-APACHE2
        -rw-r--r-- 1 1023 1023 11358 Nov  7 07:46 LICENSE-APACHE2-ExplorerCanvas
        -rw-r--r-- 1 1023 1023 11358 Nov  7 07:46 LICENSE-APACHE2-excanvas
        -rw-r--r-- 1 1023 1023 10175 Nov  7 07:46 LICENSE-APL2-Rebar
        -rw-r--r-- 1 1023 1023 10851 Nov  7 07:46 LICENSE-APL2-Stomp-Websocket
        -rw-r--r-- 1 1023 1023  1206 Nov  7 07:46 LICENSE-BSD-base64js
        -rw-r--r-- 1 1023 1023  1304 Nov  7 07:46 LICENSE-BSD-glMatrix
        -rw-r--r-- 1 1023 1023  1469 Nov  7 07:46 LICENSE-BSD-recon
        -rw-r--r-- 1 1023 1023 14041 Nov  7 07:46 LICENSE-EPL-OTP
        -rw-r--r-- 1 1023 1023   757 Nov  7 07:46 LICENSE-ISC-cowboy
        -rw-r--r-- 1 1023 1023  1084 Nov  7 07:46 LICENSE-MIT-EJS
        -rw-r--r-- 1 1023 1023  1087 Nov  7 07:46 LICENSE-MIT-EJS10
        -rw-r--r-- 1 1023 1023  1057 Nov  7 07:46 LICENSE-MIT-Erlware-Commons
        -rw-r--r-- 1 1023 1023  1069 Nov  7 07:46 LICENSE-MIT-Flot
        -rw-r--r-- 1 1023 1023  1087 Nov  7 07:46 LICENSE-MIT-Mochi
        -rw-r--r-- 1 1023 1023  1087 Nov  7 07:46 LICENSE-MIT-Mochiweb
        -rw-r--r-- 1 1023 1023  1073 Nov  7 07:46 LICENSE-MIT-Sammy
        -rw-r--r-- 1 1023 1023  1076 Nov  7 07:46 LICENSE-MIT-Sammy060
        -rw-r--r-- 1 1023 1023  1056 Nov  7 07:46 LICENSE-MIT-SockJS
        -rw-r--r-- 1 1023 1023  1074 Nov  7 07:46 LICENSE-MIT-jQuery
        -rw-r--r-- 1 1023 1023  1075 Nov  7 07:46 LICENSE-MIT-jQuery164
        -rw-r--r-- 1 1023 1023 24897 Nov  7 07:46 LICENSE-MPL-RabbitMQ
        -rw-r--r-- 1 1023 1023 16726 Nov  7 07:46 LICENSE-MPL2
        drwxr-xr-x 2 1023 1023 12288 Nov  7 07:46 ebin
        drwxr-xr-x 3 1023 1023  4096 Nov  7 07:46 etc
        drwxr-xr-x 2 1023 1023  4096 Nov  7 07:46 include
        drwxr-xr-x 2 1023 1023  4096 Nov  7 07:46 plugins
        drwxr-xr-x 2 1023 1023  4096 Nov  7 07:46 sbin
        drwxr-xr-x 3 1023 1023  4096 Nov  7 07:46 share
        

        在 rabbitmq2 和 rabbitmq3 同樣執行上面的步驟即可。

      • 執行 Rabbitmq

        root@rabbitmq1:~/rabbitmq_server-3.6.14# cd sbin/
        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ls -l
        total 36
        -rwxr-xr-x 1 1023 1023  1885 Nov  7 07:46 rabbitmq-defaults
        -rwxr-xr-x 1 1023 1023 12095 Nov  7 07:46 rabbitmq-env
        -rwxr-xr-x 1 1023 1023  1362 Nov  7 07:46 rabbitmq-plugins
        -rwxr-xr-x 1 1023 1023 10971 Nov  7 07:46 rabbitmq-server
        -rwxr-xr-x 1 1023 1023  1480 Nov  7 07:46 rabbitmqctl
        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmq-server
        
                      RabbitMQ 3.6.14. Copyright (C) 2007-2017 Pivotal Software, Inc.
          ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
          ##  ##
          ##########  Logs: /root/rabbitmq_server-3.6.14/var/log/rabbitmq/rabbit@rabbitmq1.log
          ######  ##        /root/rabbitmq_server-3.6.14/var/log/rabbitmq/rabbit@rabbitmq1-sasl.log
          ##########
                      Starting broker...
         completed with 0 plugins.
        

        現在 RabbitMQ 就已經啟動起來了,但是有一個問題,RabbitMQ 一直佔據著終端,我們得讓它在後臺執行。Ctrl+C 終止程序,然後執行命令

        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmq-server -detached
        Warning: PID file not written; -detached was passed.
        

        可以使用命令檢視執行狀態:

        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl status
        

        下面開始將這三個獨立的 RabbitMQ 組建成一個叢集。

  3. Rabbit 叢集

    • 叢集模式

      叢集中的節點有兩種,一種是記憶體節點,一種是磁碟節點;記憶體節點由於沒有磁碟讀寫,效能比磁碟節點要好,磁碟節點可以將狀態持久化到磁碟,可用性比記憶體節點要好,需要權衡考慮。
      本文的模式是一臺磁碟節點,作為資料備份,兩臺記憶體節點,用於提高效能。
      
    • 配置 hosts

      在安裝好 RabbitMQ 的三臺機器上分別修改 /etc/hosts 檔案。

      rabbit@rabbitmq1 上:

      root@rabbitmq1:~# cat /etc/hosts
      127.0.0.1   localhost
      ::1 localhost ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      172.17.0.2  rabbitmq1
      172.17.0.3      rabbitmq2
      172.17.0.4      rabbitmq3
      

      rabbit@rabbitmq2 上:

      root@rabbitmq2:~# cat /etc/hosts
      127.0.0.1   localhost
      ::1 localhost ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      172.17.0.2      rabbitmq1
      172.17.0.3  rabbitmq2
      172.17.0.4      rabbitmq3
      

      rabbit@rabbitmq3 上:

      root@rabbitmq2:~# cat /etc/hosts
      127.0.0.1   localhost
      ::1 localhost ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      172.17.0.2      rabbitmq1
      172.17.0.3  rabbitmq2
      172.17.0.4      rabbitmq3
      
    • 配置 Cookie

      Erlang 節點間通過認證 Erlang cookie 的方式允許互相通訊。因為 rabbitmqctl 使用 Erlang OTP 通訊機制來和 Rabbit 節點通訊,執行 rabbitmqctl 的機器和所要連線的 Rabbit 節點必須使用相同的 Erlang cookie 。否則你會得到一個錯誤。
      

      為了保證這三臺機器的 Erlang cookie 相同,我們將 rabbitmq1 上面的 Erlang cookie 檔案複製到另外兩臺機器上面。在我的機器上面, Erlang cookie 檔案的路徑是/root/.erlang.cookie,下面是將這個 cookie 檔案複製到另外兩臺機器上的步驟:(在 Docker 宿主機上執行)

      ➜  ~ docker cp rabbitmq1:/root/.erlang.cookie .
      ➜  ~ docker cp .erlang.cookie rabbitmq2:/root
      ➜  ~ docker cp .erlang.cookie rabbitmq3:/root
      

      步驟解釋:現將 rabbitmq1 上的 .erlang.cookie 複製到宿主機的當前目錄,然後在分別複製到 rabbitmq2 和 rabbitmq3 上的 root 目錄下。

      OK,現在三臺機器上具有相同的 Erlang cookie 了。下面開始組建叢集。

    • 組建叢集

      • 檢視叢集狀態

        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl cluster_status
        Cluster status of node rabbit@rabbitmq1
        [{nodes,[{disc,[rabbit@rabbitmq1]}]},
         {running_nodes,[rabbit@rabbitmq1]},
         {cluster_name,<<"rabbit@rabbitmq1">>},
         {partitions,[]},
         {alarms,[{rabbit@rabbitmq1,[]}]}]
        

        可以看到 {cluster_name,<<"rabbit@rabbitmq1">>},這是叢集名字,其他節點可以join 到這個叢集中。

        其實,所有節點都是平等的,你可以加入到任意一個叢集中,最終這些節點都會在同一個叢集中。

      • 將 RabbitMQ 停止執行

        rabbitmq2:

        root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl stop_app
        Stopping rabbit application on node rabbit@rabbitmq2
        

        rabbitmq3:

        root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl stop_app
        Stopping rabbit application on node rabbit@rabbitmq3
        
      • 執行加入叢集命令

        rabbitmq2:

        root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl join_cluster rabbit@rabbitmq1
        Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1
        root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl start_app
        Starting node rabbit@rabbitmq2
        

        rabbitmq3:

        root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl join_cluster rabbit@rabbitmq1
        Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1
        root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl start_app
        Starting node rabbit@rabbitmq3
        

        在任意節點檢視叢集狀態:

        root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl cluster_status
        Cluster status of node rabbit@rabbitmq1
        [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]}]},
         {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
         {cluster_name,<<"rabbit@rabbitmq1">>},
         {partitions,[]},
         {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}]
        

        可以看到三個節點已經構建成了一個叢集,但是有一個小問題,{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2,rabbit@rabbitmq3]},所有的節點都是磁碟節點,和剛開始構想的不太一樣,我們只需要一個磁碟節點,另外兩個都是記憶體節點,這樣我們在保證可用性的同時,還能提高叢集的整體效能。

        所以,我們需要將兩臺磁碟節點改成記憶體節點。

      • 將磁碟節點修改為記憶體節點

        • 將節點從叢集中移除

        rabbitmq2:

        root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl stop_app
        Stopping rabbit application on node rabbit@rabbitmq2
        root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl reset
        Resetting node rabbit@rabbitmq2
        

        rabbitmq3:

        root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl stop_app
        Stopping rabbit application on node rabbit@rabbitmq3
        root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl reset
        Resetting node rabbit@rabbitmq3
        

        這裡關鍵的命令是 ./rabbitmqctl reset。reset 命令在節點為單機狀態和是叢集的一部分時行為有點不太一樣。

        節點單機狀態時,reset 命令將清空節點的狀態,並將其恢復到空白狀態。當節點是叢集的一部分時,該命令也會和叢集中的磁碟節點通訊,告訴他們該節點正在離開叢集。

        這很重要,不然,叢集會認為該節點出了故障,並期望其最終能夠恢復回來,在該節點回來之前,叢集禁止新的節點加入。

        • 將節點重新加入叢集

          rabbitmq2:

          root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl join_cluster --ram rabbit@rabbitmq1
          Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1
          root@rabbitmq2:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl start_app
          Starting node rabbit@rabbitmq2
          

          rabbitmq3:

          root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl join_cluster --ram rabbit@rabbitmq1
          Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1
          root@rabbitmq3:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl start_app
          Starting node rabbit@rabbitmq3
          

          然後檢視叢集狀態:

          root@rabbitmq1:~/rabbitmq_server-3.6.14/sbin# ./rabbitmqctl cluster_status
          Cluster status of node rabbit@rabbitmq1
          [{nodes,[{disc,[rabbit@rabbitmq1]},{ram,[rabbit@rabbitmq3,rabbit@rabbitmq2]}]},
           {running_nodes,[rabbit@rabbitmq3,rabbit@rabbitmq2,rabbit@rabbitmq1]},
           {cluster_name,<<"rabbit@rabbitmq1">>},
           {partitions,[]},
           {alarms,[{rabbit@rabbitmq3,[]},{rabbit@rabbitmq2,[]},{rabbit@rabbitmq1,[]}]}]
          

          現在叢集已經大體符合開始時我們的構想了,一個磁碟節點,兩個記憶體節點。但是,我們的叢集還是有點小問題,我們這個叢集更適合非持久化佇列,只有該佇列是非持久的,客戶端磁能重新連線到叢集裡的其他節點,並建立佇列。加入該佇列是持久化的,那麼我們將叢集恢復的唯一辦法是將故障節點恢復起來。所以,我們需要對我們的叢集進行改造,稍後我們會看到 Rabbit 團隊給我們帶來的內建的雙活冗餘選項:映象佇列。

  4. 使用 HAProxy 做負載均衡

    • 下載 HAProxy 原始碼

      下載原始碼:

      root@haproxy:~# git clone https://github.com/haproxy/haproxy.git
      
    • 編譯&安裝

      更詳細的編譯引數請參考文件,本文通用的編譯引數。

      編譯 & 安裝:

      root@haproxy:~/haproxy# make TARGET=generic
      root@haproxy:~/haproxy# make install
      

      現在你可以執行 haproxy --help 來看看它的配置選項。現在需要對 HAProxy 進行配置,這樣它就可以 RabbitMQ 做負載均衡了。

    • 配置 HAProxy

      HAProxy 使用單一配置檔案來定義所有屬性,包括從前端 IP 到後端伺服器。下列清單展示了用於本地 Rabbit 叢集負載均衡的配置。

      配置檔案引數解釋:

      ###########全域性配置#########
      global
        log 127.0.0.1 local0 #[日誌輸出配置,所有日誌都記錄在本機,通過local0輸出]
        log 127.0.0.1 local1 notice #定義haproxy 日誌級別[error warringinfo debug]
        daemon #以後臺形式執行harpoxy
        nbproc 1 #設定程序數量
        maxconn 4096 #預設最大連線數,需考慮ulimit-n限制
        #user haproxy #執行haproxy的使用者
        #group haproxy #執行haproxy的使用者所在的組
        #pidfile /var/run/haproxy.pid #haproxy 程序PID檔案
        #ulimit-n 819200 #ulimit 的數量限制
        #chroot /usr/share/haproxy #chroot執行路徑
        #debug #haproxy 除錯級別,建議只在開啟單程序的時候除錯
        #quiet
      
      ########預設配置############
      defaults
        log global
        mode http #預設的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
        option httplog #日誌類別,採用httplog
        option dontlognull #不記錄健康檢查日誌資訊
        retries 2 #兩次連線失敗就認為是伺服器不可用,也可以通過後面設定
        #option forwardfor #如果後端伺服器需要獲得客戶端真實ip需要配置的引數,可以從Http Header中獲得客戶端ip
        option httpclose #每次請求完畢後主動關閉http通道,haproxy不支援keep-alive,只能模擬這種模式的實現
        #option redispatch #當serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器,以後將不支援
        option abortonclose #當伺服器負載很高的時候,自動結束掉當前佇列處理比較久的連結
        maxconn 4096 #預設的最大連線數
        timeout connect 5000ms #連線超時
        timeout client 30000ms #客戶端超時
        timeout server 30000ms #伺服器超時
        #timeout check 2000 #心跳檢測超時
        #timeout http-keep-alive10s #預設持久連線超時時間
        #timeout http-request 10s #預設http請求超時時間
        #timeout queue 1m #預設佇列超時時間
        balance roundrobin #設定預設負載均衡方式,輪詢方式
        #balance source #設定預設負載均衡方式,類似於nginx的ip_hash
        #balnace leastconn #設定預設負載均衡方式,最小連線數
      
      ########統計頁面配置########
      listen stats
        bind 0.0.0.0:1080 #設定Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
        mode http #http的7層模式
        option httplog #採用http日誌格式
        #log 127.0.0.1 local0 err #錯誤日誌記錄
        maxconn 10 #預設的最大連線數
        stats refresh 30s #統計頁面自動重新整理時間
        stats uri /stats #統計頁面url
        stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文字
        stats auth admin:admin #設定監控頁面的使用者和密碼:admin,可以設定多個使用者名稱
        stats auth Frank:Frank #設定監控頁面的使用者和密碼:Frank
        stats hide-version #隱藏統計頁面上HAProxy的版本資訊
        stats admin if TRUE #設定手工啟動/禁用,後端伺服器(haproxy-1.4.9以後版本)
      
      ########設定haproxy 錯誤頁面#####
      
                  
                 

      相關推薦

      RabbitMQ可用叢集部署及配置+HAproxy負載(原始碼)

      1.環境 rabbitmq-1 10.24.43.4 centos6.x rabbitmq-2 10.24.43.5 centos6.x 2.

      RabbitMQ 可用叢集搭建及電商平臺使用經驗總結

      面向EDA(事件驅動架構)的方式來設計你的訊息 AMQP routing key的設計 RabbitMQ cluster搭建 Mirror queue policy設定 兩個不錯的RabbitMQ plugin 大型應用外掛(Sharding、Rederation) Queue映象失敗手動同步

      rabbitmq可用叢集的搭建

      一.功能和原理 1.設計叢集的目的 (1)允許消費者和生產者在RabbitMQ節點崩潰的情況下繼續執行; (2)通過增加更多的節點來擴充套件訊息通訊的吞吐量. 2.叢集配置方式 Rabbitmq可以通過三種方法來部署分散式集群系統,分別是:cluster,federation,s

      RabbitMQ 可用叢集

      基本概念記憶體節點只儲存狀態到記憶體,例外情況是:持久的 queue 的內容將被儲存到磁碟。 磁碟節點儲存狀態到記憶體和磁碟。 記憶體節點由於不進行磁碟讀寫,它的效能比磁碟節點高。叢集中可以存在多個磁碟節點,磁碟節點越多整個叢集可用性越好,但是叢集整體效能不會線性增加,需要權衡考慮。如果叢集中只有記憶體節點,

      (十)RabbitMQ訊息佇列-可用叢集部署實戰

      前幾章講到RabbitMQ單主機模式的搭建和使用,我們在實際生產環境中出於對效能還有可用性的考慮會採用叢集的模式來部署RabbitMQ。 RabbitMQ叢集基本概念 Rabbit模式大概分為以下三種:單主機模式、普通叢集模式、映象叢集模式。 單主機模式:

      RabbitMQ 高階指南:從配置、使用到可用叢集搭建

      博主說:在專案中,通過 RabbitMQ,咱們可以將一些無需即時返回且耗時的操作提取出來,進行非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。 正文 1 RabbitMQ 簡介 1.1 介紹   RabbitMQ

      RabbitMQ可用叢集映象實施方案

      在我們使用rabbitmq作為訊息服務時,在服務負載不是很大的情況下,一般我們只需要一個rabbitmq節點便能為我們提供服務,可這難免會發生單點故障,要解決這個問題,我們便需要配置rabbitmq的叢集和映象,以下便是使用兩臺伺服器進行rabbitmq叢集和映

      rabbitmq+haproxy+keepalived實現可用叢集搭建

        專案需要搭建rabbitmq的高可用叢集,最近在學習搭建過程,在這裡記錄下可以跟大家一起互相交流(這裡只是記錄了學習之後自己的搭建過程,許多原理的東西沒有細說)。 搭建環境   CentOS7 64位   RabbitMQ 3.6.2   Keepalived 1.2.21   主機:192.1

      RabbitMQ(四):使用Docker構建RabbitMQ可用負載均衡叢集

      本文使用Docker搭建RabbitMQ叢集,然後使用HAProxy做負載均衡,最後使用KeepAlived實現叢集高可用,從而搭建起來一個完成了RabbitMQ高可用負載均衡叢集。受限於自身條件,本文使用VMware虛擬機器的克隆功能克隆了兩臺伺服器進行操作,僅作為一個demo,開發中可根據實際情況進行調整

      RabbitMQ和Kafka的可用叢集原理

        前言 小夥伴們,通過前邊文章的閱讀,相信大家已經對RocketMQ的基本原理有了一個比較深入的瞭解,那麼大家對當前比較常用的RabbitMQ和Kafka是不是也有興趣瞭解一些呢,瞭解的多一些也不是壞事,面試或者跟人聊技術的時候也會讓你更有話語權嘛。 那王子今天就跟大家聊一聊RabbitMQ和Ka

      RabbitMQ 可用集群搭建及電商平臺使用經驗總結

      喜歡 inf 分布式 一個 ipo 匹配模式 ide 總結 hosts配置 面向EDA(事件驅動架構)的方式來設計你的消息 AMQP routing key的設計 RabbitMQ cluster搭建 Mirror queue policy設置 兩個不錯的RabbitMQ

      rabbitMQ可用集群

      sig 修改 管理 str 版本 lease 設置 啟動 reset 準備兩臺機器(均要安裝設置)cat /etc/hosts ##集群機器都要添加host解析 192.168.1.7 gluster01 192.168.1.8 gluster02調整兩臺機器的系統

      Redis Cluster可用叢集線上遷移操作記錄【轉】

      之前介紹了redis cluster的結構及高可用叢集部署過程,今天這裡簡單說下redis叢集的遷移。由於之前的redis cluster叢集環境部署的伺服器效能有限,需要遷移到高配置的伺服器上。考慮到是線上生產環境,決定線上遷移,遷移過程,不中斷服務。操作過程如下: 一、機器環境

      SpringCloud 註冊與發現 之 註冊中心可用叢集 Eureka

      SpringCloud 註冊與發現 之 註冊中心高可用叢集 Eureka    1、註冊中心的存在 服務提供者啟動會註冊到註冊中心,並會定期發起心跳通知,告知註冊中心“我還活著,別把我幹掉”。 服務消費者到註冊中心訂閱服務,並拉取呼叫的服務列表到本地

      【Web 叢集實戰】20_Keepalived 可用叢集

      【Web 叢集實戰】20_Keepalived 高可用叢集 標籤(空格分隔): Web叢集實戰 文章目錄 【Web 叢集實戰】20_Keepalived 高可用叢集 1. Keepalived 高可用故障切換原理 2. Keep

      HA+LVS 可用叢集

      keepalived:採用VRRP熱備份協議,可一主多備,優先順序不同。 NFS不做 NAT模式那一篇有 使用keepalived實現雙機熱備。 chkconfig NetworkManager off chkconfig iptables off cat /etc/sysconf

      Memcached學習筆記之八:memcached+magent+keepalived可用叢集

      上篇我們已經配置好memcached+magent了下面 那如果magent宕機了,講不能繼續提供服務,所以就用到了keepalived,新增一臺備用的magent代理伺服器。當一臺magent宕機了由另一臺來接替。 配置步驟: 兩臺magent代理伺服器,一臺做主一臺做從,當主的宕機了

      Memcached學習筆記之七:memcached+magent+keepalived可用叢集

      上一篇我們說過memcached實現高可用以及防止單點故障可以通過magent來實現,接下來我們來配置一個高可用群集 magent代理伺服器:192.168.200.101 memcached節點:(可以在同一個伺服器上開啟三個memcached節點看前面介紹,也可以一臺伺服器一個) m

      Memcached學習筆記之六:memcached可用叢集原理及介紹

      首先我要宣告的是為什麼叫分散式叢集? 因為我們要達到的目的是要把快取放到2臺搭建在不同的伺服器上面的memcached,所以我們如果兩個memcached中放的是一樣的資料,那麼就是叢集,如果是根據業務不同而放不一樣的資料就是分散式! memcached在實現分散式群集部署時,memcached

      Kubernetes實戰 可用叢集搭建,配置,運維與應用

      1-1 K8S導學 1-2 搭建K8S叢集步驟和要點介紹 1-3 搭建三節點Ubuntu環境 1-4 安裝容器引擎 1-5 下載Kubeadm、node元件和命令列工具 1-6 向叢集中加入worker節點 1-7 安裝dashboard和heapste