OpenStack-RabbitMQ-获取vm、磁盘、网络设备的状态变化
需求
及时知道vm,硬盘,镜像,网络设备、负载均衡器状态变化
分析
Dashboard中也是通过定时使用ajax调用API来获取虚拟机的状态信息的
定时轮训的方式过于被动
解决方案
共用rabbitmq
实现方法
Nova
- 配置nova.conf
vi /etc/nova/nova.conf
notification_driver = nova.openstack.common.notifier.rpc_notifier
notify_on_state_change=vm_state - 重启nova服务
systemctl restart openstack-nova-compute.service - 监听rabbitmq
routing_key:notification.info
exchange:nova - 查看event_type为:compute.instance.update的消息,同时判断payload中state和old_state的值
- 当两个值不一致的时候做相应的操作(更新数据库等)
Neutron
- 监听rabbitmq
routing_key:notification.info
exchange:neutron - 查看event_type为:参考excel给定名称
- 当操作开始的时候有start消息,成功结束后由end消息,但是如果操作失败则没有end消息
Glance
- 修改glance-registry.conf、glance-api.conf
notification_driver = messaging
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS - 重启服务
systemctl restart openstack-glance-api.service openstack-glance-registry.service - 监听rabbitmq
routing_key:notification.info
exchange:openstack - 查看event_type为:参考excel给定名称
- 当操作开始的时候有start消息,成功结束后由end消息,但是如果操作失败则没有end消息
Cinder
- 修改cinder.conf
control_exchange = cinder
notification_driver = cinder.openstack.common.notifier.rpc_notifier - 重启服务
控制节点
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
存储节点
systemctl restart openstack-cinder-volume.service - 监听rabbitmq
routing_key:notification.info
exchange:cinder - 查看event_type为:参考excel给定名称
- 当操作开始的时候有start消息,成功结束后由end消息,但是如果操作失败则没有end消息
负载均衡
暂时没有这个机制,需要添加
ps
监听rabbitmq的时候不能直接监听notification.info队列,这样会造成消息被接收后,其他监听这个队列的消费者就获取不到消息了
所以只要监听routing_key是notification.info就可以了,即使用订阅模式
测试脚本
#!/usr/bin/env python
import pika
import json credentials = pika.PlainCredentials('guest', 'RABBIT_PASS')
params = pika.ConnectionParameters(host='xxx',credentials=credentials)
connection = pika.BlockingConnection(params)
channel = connection.channel() exchange_name = 'nova'
queue_name = channel.queue_declare(exclusive=True).method.queue
binding_key = 'notifications.info' channel.exchange_declare(exchange=exchange_name,type='topic')
channel.queue_bind(exchange=exchange_name,
queue=queue_name,
routing_key=binding_key) print ' [*] Waiting for logs. To exit press CTRL+C' def callback(ch, method, properties, body):
b= json.loads(body)
print b['event_type'],b['payload']['state'], b['payload']['old_state']
# for key,value in b.iteritems():
# print key,':',value channel.basic_consume(callback,queue=queue_name,no_ack=True)
channel.start_consuming()
参考(需墙)
https://prosuncsedu.wordpress.com/2014/01/08/notification-of-actions-in-openstack-nova/
OpenStack-RabbitMQ-获取vm、磁盘、网络设备的状态变化的更多相关文章
- 获取windows磁盘的可用空间函数
<?php /* *获取某个磁盘的剩余空间 *$param 关联数组,下标是哪个盘,单位,可以是B,KB,MB,GB *可以设置获取多个磁盘,例如:array('C'=>'KB','D'= ...
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件, 下载源文件 今天我们主 ...
- iphone获取当前磁盘信息
获取iphone磁盘总大小.已使用空间.空闲空间 [代码]悦德财富:https://www.yuedecaifu.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- C++通过WIN32 API获取逻辑磁盘详细信息
众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件. 今天我们主要介绍的 ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析
云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析 在虚拟机创建完成之后,CPU和内存的配置等等基本上是一目了然的.如果不考虑显卡性能,一台机器最重要的性能瓶颈就是硬盘. ...
- 使用wesocket从 rabbitMQ获取实时数据
rabbitmq支持stomp组件,通过stomp组件和websocket可以从rabbitMQ获取实时数据.这里分享一个demo: 使用时需要引入的js ,用到了sock.js和stomp.js & ...
- openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。
以获取PCI的信息为例. 基本代码: pci.py import base64 import guestfs from functools import partial import os impor ...
- openstack上创建vm实例后,状态为ERROR问题解决
问题说明:在openstack上创建虚拟机,之前已顺利创建了n个centos6.8镜像的vm现在用ubuntu14.04镜像创建vm,发现vm创建后的状态为ERROR! 1)终端命令行操作vm创建 [ ...
- 通过递增快照备份 Azure 非托管 VM 磁盘
概述 Azure 存储提供创建 Blob 快照的功能. 快照将捕获该时间点的 Blob 状态. 本文介绍有关如何使用快照维护虚拟机磁盘备份的方案. 如果选择不使用 Azure 备份和恢复服务,但想要为 ...
随机推荐
- C#编程高并发的几种处理方法
并发(英文Concurrency),其实是一个很泛的概念,字面意思就是“同时做多件事”,不过方式有所不同.在.NET的世界里面,处理高并发大致有以下几种方法: 1,异步编程 异步编程就是使用futur ...
- 【QT】文件读写操作
读取输出: QFile file("D:/Englishpath/QTprojects/1.dat"); if(!file.open(QIODevice::ReadOnly)) { ...
- python机器学习包 Windows下 pip安装 scikit-learn numpy scipy
1.到PIP的目录中C:\Python34\Scripts;2. 2.1 pip安装numpy pip install numpy 2.2 pip安装sklearn pip install -U ...
- C# Aspose.Cells.dll Excel操作总结
简介 Aspose.Cells是一款功能强大的 Excel 文档处理和转换控件,不依赖 Microsoft Excel 环境,支持所有 Excel 格式类型的操作. 下载 Aspose.Cells.d ...
- 读《javascript语法精粹》知识点总结
昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...
- vs2013在使用ef6时,创建模型向导过程中,四种模型方式缺少2种
下载eftool,并安装 https://download.microsoft.com/download/2/C/F/2CF7AFAB-4068-4DAB-88C6-CEFD770FAECD/EFTo ...
- linux下的ssh和rynsc
在ubuntu下有ssh的目录,但是没有使用 ps -e | grep ssh时没有任何输出,说明没有安装ssh或者是1.x版本,可以打开etc/ssh目录,看是否有文件,下装系统再看看吧.还有ryn ...
- 全局解释器锁GIL
我们使用高并发,一次是创建1万个线程去修改一个数并打印结果看现象: from threading import Thread import os def func(args): global n n ...
- 不偏移的天地图地图服务-ArcGIS版
地图偏移和纠偏是使用在线电子地图不可避免的话题.研究不深入,暂且分享一种已纠偏的地图服务. 服务地址 直接放点干货: 影像地图: http://t0.tianditu.com/cia_w/esri/w ...
- GetAsyncKeyState()& 0x8000
0x8000 & GetKeyState(VK_SHIFT); 这句是判断是否有按下shift键. 关于GetAsyncKeyState与GetKeyState区别:关于GetAsyncKey ...