1. 程式人生 > 遊戲 >《光環:無限》進度太肝 設計領導:已感到玩家的痛

《光環:無限》進度太肝 設計領導:已感到玩家的痛

RabbitMQ 安裝和使用一、安裝依賴環境二、安裝RabbitMQ三、啟動和關閉四、開啟Web管理外掛五、防火牆新增埠多機多節點叢集部署一、 環境準備二、修改配置檔案三、防火牆新增埠四、啟動RabbitMQ單機多節點部署一、環境準備二、啟動RabbitMQ三、防火牆新增埠映象佇列模式叢集

RabbitMQ 安裝和使用

一、安裝依賴環境

  1. http://www.rabbitmq.com/which-erlang.html 頁面檢視安裝rabbitmq需要安裝erlang對應的版本

  2. https://github.com/rabbitmq/erlang-rpm/releases 頁面找到需要下載的erlang版本,erlang-*.centos.x86_64.rpm

    就是centos版本的。

  3. 複製下載地址後,使用wget命令下載

    wget -P /home/download https://github.com/rabbitmq/erlang-rpm/releases/download/v21.2.3/erlang-21.2.3-1.el7.centos.x86_64.rpm
  4. 安裝 Erlang

    sudo rpm -Uvh /home/download/erlang-21.2.3-1.el7.centos.x86_64.rpm
  5. 安裝 socat

    sudo yum install -y socat

二、安裝RabbitMQ

  1. 官方下載頁面找到CentOS7版本的下載連結,下載rpm安裝包

    wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm

    提示:可以在https://github.com/rabbitmq/rabbitmq-server/tags下載歷史版本

  2. 安裝RabbitMQ

    sudo rpm -Uvh /home/download/rabbitmq-server-3.7.9-1.el7.noarch.rpm

三、啟動和關閉

  • 啟動服務

    sudo systemctl start rabbitmq-server
  • 檢視狀態

    sudo systemctl status rabbitmq-server
  • 停止服務

    sudo systemctl stop rabbitmq-server
  • 設定開機啟動

    sudo systemctl enable rabbitmq-server

四、開啟Web管理外掛

  1. 開啟外掛

    rabbitmq-plugins enable rabbitmq_management

    說明:rabbitmq有一個預設的guest使用者,但只能通過localhost訪問,所以需要新增一個能夠遠端訪問的使用者。

  2. 新增使用者

    rabbitmqctl add_user admin admin
  3. 為使用者分配操作許可權

    rabbitmqctl set_user_tags admin administrator
  4. 為使用者分配資源許可權

    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

五、防火牆新增埠

  • RabbitMQ 服務啟動後,還不能進行外部通訊,需要將埠新增都防火牆

  1. 新增埠

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
  2. 重啟防火牆

    sudo firewall-cmd --reload

多機多節點叢集部署

一、 環境準備

  • 準備三臺安裝好RabbitMQ 的機器,安裝方法見 安裝步驟

    • 10.10.1.41

    • 10.10.1.42

    • 10.10.1.43

    提示:如果使用虛擬機器,可以在一臺VM上安裝好RabbitMQ後,建立快照,從快照建立連結克隆,會節省很多磁碟空間

二、修改配置檔案

  1. 修改10.10.1.41機器上的/etc/hosts檔案

    sudo vim /etc/hosts
  2. 新增IP和節點名

    10.10.1.41 node1
    10.10.1.42 node2
    10.10.1.43 node3
  3. 修改對應主機的hostname

hostname node1
hostname node2
hostname node3
  1. 10.10.1.41上的hosts檔案複製到另外兩臺機器上

    sudo scp /etc/hosts root@node2:/etc/
    sudo scp /etc/hosts root@node3:/etc/

    說明:命令中的root是目標機器的使用者名稱,命令執行後,可能會提示需要輸入密碼,輸入對應使用者的密碼就行了

  2. 10.10.1.41上的/var/lib/rabbitmq/.erlang.cookie檔案複製到另外兩臺機器上

    scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/

    提示:如果是通過克隆的VM,可以省略這一步

三、防火牆新增埠

  • 給每臺機器的防火牆新增埠

  1. 新增埠

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
  2. 重啟防火牆

    sudo firewall-cmd --reload

四、啟動RabbitMQ

  1. 啟動每臺機器的RabbitMQ

    sudo systemctl start rabbitmq-server

    或者

    rabbitmq-server -detached
  2. 10.10.1.42加入到叢集

    # 停止RabbitMQ 應用
    rabbitmqctl stop_app
    # 重置RabbitMQ 設定
    rabbitmqctl reset
    # 加入到叢集
    rabbitmqctl join_cluster rabbit@node1 --ram
    # 啟動RabbitMQ 應用
    rabbitmqctl start_app
  3. 檢視叢集狀態,看到running_nodes,[rabbit@node1,rabbit@node2]表示節點啟動成功

    rabbitmqctl cluster_status

    提示:在管理介面可以更直觀的看到叢集資訊

  4. 10.10.1.43加入到叢集

    # 停止 RabbitMQ 應用
    rabbitmqctl stop_app
    # 重置 RabbitMQ 設定
    rabbitmqctl reset
    # 節點加入到叢集
    rabbitmqctl join_cluster rabbit@node1 --ram
    # 啟動 RabbitMQ 應用
    rabbitmqctl start_app
  5. 重複地3步,檢視叢集狀態


單機多節點部署

一、環境準備

  • 準備一臺已經安裝好RabbitMQ 的機器,安裝方法見 安裝步驟

    • 10.10.1.41

二、啟動RabbitMQ

  1. 在啟動前,先修改RabbitMQ 的預設節點名(非必要),在/etc/rabbitmq/rabbitmq-env.conf增加以下內容

    # RabbitMQ 預設節點名,預設是rabbit
    NODENAME=rabbit1
  2. RabbitMQ 預設是使用服務的啟動的,單機多節點時需要改為手動啟動,先停止執行中的RabbitMQ 服務

    sudo systemctl stop rabbitmq-server
  3. 啟動第一個節點

    rabbitmq-server -detached
  4. 啟動第二個節點

    RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
  5. 啟動第三個節點

    RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
  6. 將rabbit2加入到叢集

    # 停止 rabbit2 的應用
    rabbitmqctl -n rabbit2 stop_app
    # 重置 rabbit2 的設定
    rabbitmqctl -n rabbit2 reset
    # rabbit2 節點加入到 rabbit1的叢集中
    rabbitmqctl -n rabbit2 join_cluster rabbit1 --ram
    # 啟動 rabbit2 節點
    rabbitmqctl -n rabbit2 start_app
  7. 將rabbit3加入到叢集

    # 停止 rabbit3 的應用
    rabbitmqctl -n rabbit3 stop_app
    # 重置 rabbit3 的設定
    rabbitmqctl -n rabbit3 reset
    # rabbit3 節點加入到 rabbit1的叢集中
    rabbitmqctl -n rabbit3 join_cluster rabbit1 --ram
    # 啟動 rabbit3 節點
    rabbitmqctl -n rabbit3 start_app
  8. 檢視叢集狀態,看到{running_nodes,[rabbit3@node1,rabbit2@node1,rabbit1@node1]}說明節點已啟動成功。

    rabbitmqctl cluster_status

    提示:在管理介面可以更直觀的看到叢集資訊

三、防火牆新增埠

  • 需要將每個節點的埠都新增到防火牆

  1. 新增埠

    sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15673/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=5674/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=25674/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=15674/tcp --permanent
  2. 重啟防火牆

    sudo firewall-cmd --reload

映象佇列模式叢集

  • 映象佇列屬於RabbitMQ 的高可用方案,見:https://www.rabbitmq.com/ha.html#mirroring-arguments

  • 通過前面的步驟搭建的叢集屬於普通模式叢集,是通過共享元資料實現叢集

  • 開啟映象佇列模式需要在管理頁面新增策略,新增方式:

    1. 進入管理頁面 -> Admin -> Policies(在頁面右側)-> Add / update a policy

    2. 在表單中填入:

          name: ha-all
      Pattern: ^
      Apply to: Queues
      Priority: 0
      Definition: ha-mode = all

      引數說明

      name: 策略名稱,如果使用已有的名稱,儲存後將會修改原來的資訊

      Apply to:策略應用到什麼物件上

      Pattern:策略應用到物件時,物件名稱的匹配規則(正則表示式)

      Priority:優先順序,數值越大,優先順序越高,相同優先順序取最後一個

      Definition:策略定義的類容,對於映象佇列的配置來說,只需要包含3個部分: ha-modeha-paramsha-sync-mode。其中,ha-sync-mode是同步的方式,自動還是手動,預設是自動。ha-modeha-params 組合使用。組合方式如下:

    ha-modeha-params說明
    all (empty) 佇列映象到叢集類所有節點
    exactly count 佇列映象到叢集內指定數量的節點。如果叢集內節點數少於此值,佇列將會映象到所有節點。如果大於此值,而且一個包含映象的節點停止,則新的映象不會在其它節點建立。
    nodes nodename 佇列映象到指定節點,指定的節點不在叢集中不會報錯。當佇列申明時,如果指定的節點不線上,則佇列會被建立在客戶端所連線的節點上。
  • 映象佇列模式相比較普通模式,映象模式會佔用更多的頻寬來進行同步,所以映象佇列的吞吐量會低於普通模式

  • 但普通模式不能實現高可用,某個節點掛了後,這個節點上的訊息將無法被消費,需要等待節點啟動後才能被消費。