日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python openstack rabbitmq_OpenStack--Rabbitmq组件消息队列

發布時間:2024/1/23 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python openstack rabbitmq_OpenStack--Rabbitmq组件消息队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

隊列

MQ 全稱為Message Queue,消息隊列( MQ )

是一種應用程序的通信方法。應用程序通過讀寫入列隊的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。

消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用于諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

AMQP 即 Advanced Message Queuing Protocol

高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。消息中間件主要用于組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。

AMQP 的主要特征是面向消息、隊列、路由(包括點對點和發布 / 訂閱)、可靠性、安全。

Rabbitmq

·屬于一個流行的開源消息隊列系統。屬于AMQP( 高級消息隊列協議 ) 標準的一個實現。是應用層協議的一個開放標準,為面向消息的中間件設計。用于在分布式系統中存儲轉發 ? 消息,在易用性、擴展性、高可用性等方面表現不俗。

·消息中間件主要用于組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。

·AMQP的主要特征是面向消息、隊列、路由(包括點對點和發布 / 訂閱)、可靠性、安全RabbitMQ特點。

·使用Erlang編寫

·支持持久化

·支持HA

·提供C#,erlang,java,perl,python,ruby等的client開發端

Rabbitmq中概念名詞

Broker:簡單來說就是隊列服務器實體。

Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。

Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。

Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。

Routing Key:路由關鍵字, exchange根據這個關鍵字進行消息投遞。

vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。

producer:消息生產者,就是投遞消息的程序。

consumer:消息消費者,就是接受消息的程序。

channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務。

Rabbitmq 的 metadata

元數據可以持久化在 RAM 或 Disc. 從這個角度可以把 RabbitMQ 集群中的節點分成兩種 :RAM Node和 Disk Node. RAM Node 只會將元數據存放在RAM Disk node 會將元數據久化到磁盤。

單節點系統就沒有什么選擇了 , 只允許 disk node, 否則由于沒有數據冗余一旦重啟就會丟掉所有的配置信息 . 但在集群環境中可以選擇哪些節點是 RAM node. 在集群中聲明 (declare) 創建exchange queue binding, 這類操作要等到所有的節點都完成創建才會返回 :

如果是內存節點就要修改內存數據,

如果是 disc node 就要等待寫磁盤,節點過多這里的速度就會被大大的拖慢。

有些場景 exchang queue 相當固定 , 變動很少 ,那即使全都是 disc node, 也沒有什么影響 . 如果使用 Rabbitmq 做 RPC( RPC :Remote Procedure Call—遠程過程調用), RPC 或者類似 RPC 的場景這個問題就嚴重了 , 頻繁創建銷毀臨時隊列 , 磁盤讀寫能力就很快成為性能瓶頸了。所以 , 大多數情況下 , 我們盡量把 Node 創建為RAM Node. 這里就有一個問題了 , 要想集群重啟后元數據可以恢復就需要把集群元數據持久化到磁盤 , 那需要規劃 RabbitMQ 集群中的 RAM Node 和 Disc Node 。

只要有一個節點是 Disc Node 就能提供條件把集群元數據寫到磁盤 ,RabbitMQ 的確也是這樣要求的 : 集群中只要有一個 disk node 就可以 , 其它的都可以是 RAMnode. 節點加入或退出集群一定至少要通知集群中的一個 disk node 。

如果集群中 disk node 都宕掉 , 就不要變動集群的元數據 . 聲明 exchange queue修改用戶權限 , 添加用戶等等這些變動在節點重啟之后無法恢復 。

有一種情況要求所有的 disk node 都要在線情況在才能操作 , 那就是增加或者移除節點 .RAM node 動的時候會連接到預設的 disk node 下載最新的集群元數據 . 如果你有兩個 disk node(d1 d2), 一RAM node 加入的時候你只告訴 d1, 而恰好這個RAM node 重啟的時候 d1 并沒有啟動 , 重啟就會敗 . 所以加入 RAM 節點的時候 ,把所有的disk node 信息都告訴它 ,RAM node 會把 disk node 的信持久化到磁盤以便后續啟動可以按圖索驥 。

下載rabbitmq

環境:

controller01: 192.168.245.167

controller02: 192.168.245.168

controller03: 192.168.245.169

配置dns全局解釋器:

vim /etc/resolv.conf

nameserver 192.168.245.167 #連接learn.yunwei.edu的內網

nameserver 223.5.5.5

wget ?http://download2.yunwei.edu/shell/yum-repo.sh

sh yum-repo.sh

安裝rabbitmq和erlang軟件包

yum -y install erlang rabbitmq-server.noarch

systemctl start rabbitmq-server.service

systemctl enable rabbitmq-server.service

查看監聽端口

netstat -lantp | grep 5672

以上步驟3臺都需要進行

配置文件

vim /etc/rabbitmq/rabbitmq-env.conf

controller01:修改guest密碼(默認用戶為: guest,密碼為 guest)

rabbitmqctl change_password guest admin

controller01:編輯 rabbitmq 變量文件

vim /etc/rabbitmq/rabbitmq-env.conf

編輯好之后發送至其他兩個節點

scp /etc/rabbitmq/rabbitmq-env.conf controller02:/etc/rabbitmq/

scp /etc/rabbitmq/rabbitmq-env.conf controller03:/etc/rebbitmq/

controller02

vim /etc/rabbitmq/rabbitmq-env.conf

controller03

vim /etc/rabbitmq/rabbitmq-env.conf

所有節點開啟rabbitmq的web管理頁面

rabbitmq-plugins enable rabbitmq_management

賬號:guest

密碼:admin

controller01發送selang.cookie到其它節點配置集群 #這一步相當于指定誰是主,誰是從

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

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

controller02和controller03停止應用,并以ram的方式加入chen1節點,之后重啟應用

這里的應有指的是rabbitmq服務給我們提供消息隊列這個應用,而不是rabbitmq服務

systemctl restart rabbitmq-server.service #因為發送新的配置文件,得重啟服務

查看狀態是否啟用

systemctl restart rabbitmq-server.service

systemctl status rabbitmq-server.service

停止應用

rabbitmqctl stop_app

controller02、controller03加入集群

rabbitmqctl join_cluster --ram rabbit@controller01 ? #加入集群,以ram形式的節點加入

重啟應用

rabbitmqctl start_app

controller01檢查集群狀態

rabbitmqctl cluster_status

登陸網站驗證

http://192.168.245.167:15672/#/

由于其他節點已經加入進去,則密碼就與controller'01一致,為admin

其他命令:

1)添加管理員:

rabbitmqctl add_user mqadmin mqadmin

rabbitmqctl set_user_tags mqadmin administrator

rabbitmqctl set_permissions -p / mqadmin “." ".” “.*”

2)更改節點類型(內存型或磁盤型)

rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type disc 或 rabbitmqctl change_cluster_node_type ram

rabbitmqctl start_app

3)從集群移除節點(或者重置節點)

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl start_app

rabbitmqctl cluster_status

4)從某個節點移除集群中其他節點

rabbitmqctl forget_cluster_node rabbit@node3

rabbitmqctl reset

rabbitmqctl start_app

rabbitmqctl cluster_status

注意

保證集群中至少有一個磁盤類型的節點以防數據丟失,在更改節點類型時尤其要注意。

若整個集群被停掉了,應保證最后一個 down 掉的節點被最先啟動,若不能則要使用 forget_cluster_node 命令將其移出集群。

若集群中節點幾乎同時以不可控的方式 down 了此時在其中一個節點使用 force_boot 命令重啟節點。

總結

以上是生活随笔為你收集整理的python openstack rabbitmq_OpenStack--Rabbitmq组件消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。