RabbitMQ集羣搭建及使用(一)

服務器清單
主機 ip 安裝軟件
server1 192.168.56.102 rabbitmq服務
server2 192.168.56.107 haproxy代理+keepalived
server3 192.168.56.108 rabbitmq服務
server4 192.168.56.109 haproxy代理+keepalived
服務器架構圖

在這裏插入圖片描述

分別在server1、server3上配置host,確保能相互訪問的地址

vim /etc/hosts

    192.168.56.102 server1
    192.168.56.108 server3

RabbitMQ的集羣是依賴erlang集羣,而erlang集羣是通過這個cookie進行通信認證的

分別在server1,server3上安裝erlang
    sudo apt-get install erlang    

rabbitmq集羣需要通過主機名互相訪問 所以必須在這兩臺機器 /etc/hosts配置以上內容 確保主機名正確
兩臺機器使用rabbitmq進行通信 使用的安全策略是 erlang.cookie 就是一個隨機字符串 兩節點必須保持一致 否則 無法添加節點到集羣
該cookie文件 可能位於 /var/lib/rabbitmq/.erlang.cookie 或者 ~/.erlang.cookie 啓動任何一臺機器,剛纔已經啓動了一個節點
把啓動節點的.erlang.cookie拷貝到其他節點相同目錄下

複製.erlang.cookie到其他節點

.erlang.cookie是erlang分佈式的token文件,集羣內所有的節點要持有相同的.erlang.cookie文件,才允許彼此通信。

將server1的.erlang.cookie文件複製到server3的相關路徑下面(在server1下執行)

scp /var/lib/rabbitmq/.erlang.cookie 192.168.56.108:/var/lib/rabbitmq/  

修改文件的權限(兩臺服務器都需要執行)

sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
分別在server1、server3上安裝rabbitmq-server
sudo apt-get install rabbitmq-server

##啓動rabbitmq服務
sudo service rabbitmq-server start
在server3下執行以下命令,將server2節點加入rabbitmq集羣
sudo rabbitmqctl stop_app  #暫停server2服務
sudo rabbitmqctl join_cluster rabbit@server1  #server2加入集羣,rabbit是server1默認名稱
sudo rabbitmqctl start_app  #啓動server2服務
sudo rabbitmqctl cluster_status  #查看集羣狀態

rabbitmq的內存節點和磁盤節點的作用
在RabbitMQ集羣中的節點只有兩種類型:內存節點/磁盤節點,單節點系統只運行磁盤類型的節點。而在集羣中,可以選擇配置部分節點爲內存節點。
內存節點將所有的隊列,交換器,綁定關係,用戶,權限,和vhost的元數據信息保存在內存中。
磁盤節點將這些信息保存在磁盤中,但是內存節點的性能更高,
爲了保證集羣的高可用性,必須保證集羣中有兩個以上的磁盤節點,來保證當有一個磁盤節點崩潰了,集羣還能對外提供訪問服務。
在上面的操作中,可以通過如下的方式,設置新加入的節點爲內存節點還是磁盤節點。

rabbitmqctl join_cluster --ram rabbit@server1  #加入--ram表示內存節點,否則表示磁盤節點
在server1上添加管理員用戶
sudo rabbitmqctl add_user admin manager
server1上爲新用戶授權
sudo rabbitmqctl set_permissions -p / admin ".* " ".* " ".*"
設置admin用戶角色:
sudo rabbitmqctl set_user_tags admin administrator
查看集羣狀態
sudo rabbitmqctl cluster_status
剔除節點:
  • 方法一:

    在節點上執行:

    rabbitmqctl stop
    rabbitmqctl forget_cluster_node rabbit@server3 --offline
    

    注意上面在使用 rabbitmqctl forget_cluster_node 命令的時候用到了
    “–offline” 參數,如果不添加這個參數,就需要保證 server3 節點中的 RabbitMQ 服務處於
    運行狀態,而在這種情況下, server3 無法先行啓動, 則 “–offline” 參數的添加讓其可以在非運行狀態下將 nodel 剝離出當前集羣。

  • 方法二:

    在節點上執行:

    rabbitmqctl stop_app
    rabbitmqctl reset
    

    這樣也能剔除該節點

分別在server2 和 server4 上安裝haproxy
sudo apt-get install haproxy
在server2上配置haproxy
 vim /etc/haproxy/haproxy.conf

加入以下配置內容

#### 對MQ集羣進行監聽
listen rabbitmq_cluster
    bind 0.0.0.0:5673   #通過5673對m1和m2進行映射
    option tcplog       #記錄TCP連接狀態和時間
    mode tcp            #四層協議代理,即對TCP進行轉發
    option clitcpka     #開啓TCP的Keep Alive(長連接模式)
    timeout connect 1s  #haproxy與mq建立連接的超時時間
    timeout client 10s  #客戶端與haproxy最大空閒時間
    timeout server 10s  #服務器與haproxy最大空閒時間
    balance roundrobin  #採用輪詢轉發消息
    #每5秒發送一次心跳包,如果連續兩次有響應則代表狀態良好  
    #如果連續3次沒有響應,則視爲服務故障,該節點將被剔除
    server server1 192.168.56.102:5672 check inter 5s rise 2 fall 3
    server server3 192.168.56.108:5672 check inter 5s rise 2 fall 3

    #log /dev/log    local0

#### 開啓監控服務
listen http_front
        bind 0.0.0.0:1080          #監聽端口
        stats refresh 30s          #每30秒刷新一次
        stats uri /haproxy?stats   #統計頁面uri
        stats auth admin:manager   #統計頁面用戶名和密碼設置

#### RabbitMQ管理界面
listen rabbitmq_admin
    bind 0.0.0.0:8804            #這裏注意端口不要衝突,衝突會導致haproxy服務啓動失敗
    server server1 192.168.56.102:15672
    server server3 192.168.56.108:15672
分別在server2 和 server3 上安裝keepalived
sudo apt-get install keepalived
在server2上配置keepalived ,默認在server2上啓用虛擬IP:192.168.56.110
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}
在server4上配置keepalived, 默認是備份機
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}
驗證rabbitmq集羣是否正常

訪問 RabbitMQ管理界面 在server1上添加一個queue,看能否在server2上看到該queue
登錄http://192.168.56.102:15672/ 添加一個queue queue:new
在這裏插入圖片描述

在server1上發佈一個消息到queue:new隊列中
在這裏插入圖片描述

登錄http://192.168.56.108:15672/ 查看等否看到 queue:new
在這裏插入圖片描述

在server3上看能否讀取到該消息
在這裏插入圖片描述

驗證能否通過代理讀取到數據

登錄代理服務器地址 通過虛擬IP訪問 http://192.168.56.110:8804
在這裏插入圖片描述

測試VIP是否能夠故障漂移

關閉server3上的keepalived服務,模擬 server3發生故障,看虛擬IP是否還能正常訪問
在這裏插入圖片描述

再次訪問 http://192.168.56.110:8804 仍能正常顯示
在這裏插入圖片描述

最後測試能否讓程序通過虛擬IP訪問rabbitmq集羣

編寫創建rabbitmq客戶端連接服務的go代碼示例
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章