需求

及时知道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、磁盘、网络设备的状态变化的更多相关文章

  1. 获取windows磁盘的可用空间函数

    <?php /* *获取某个磁盘的剩余空间 *$param 关联数组,下标是哪个盘,单位,可以是B,KB,MB,GB *可以设置获取多个磁盘,例如:array('C'=>'KB','D'= ...

  2. C++ 通过WIN32 API 获取逻辑磁盘详细信息

    众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件, 下载源文件 今天我们主 ...

  3. iphone获取当前磁盘信息

    获取iphone磁盘总大小.已使用空间.空闲空间 [代码]悦德财富:https://www.yuedecaifu.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  4. C++通过WIN32 API获取逻辑磁盘详细信息

      众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件. 今天我们主要介绍的 ...

  5. [AWS vs Azure] 云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析

    云计算里AWS和Azure的探究(5) ——EC2和Azure VM磁盘性能分析 在虚拟机创建完成之后,CPU和内存的配置等等基本上是一目了然的.如果不考虑显卡性能,一台机器最重要的性能瓶颈就是硬盘. ...

  6. 使用wesocket从 rabbitMQ获取实时数据

    rabbitmq支持stomp组件,通过stomp组件和websocket可以从rabbitMQ获取实时数据.这里分享一个demo: 使用时需要引入的js ,用到了sock.js和stomp.js & ...

  7. openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。

    以获取PCI的信息为例. 基本代码: pci.py import base64 import guestfs from functools import partial import os impor ...

  8. openstack上创建vm实例后,状态为ERROR问题解决

    问题说明:在openstack上创建虚拟机,之前已顺利创建了n个centos6.8镜像的vm现在用ubuntu14.04镜像创建vm,发现vm创建后的状态为ERROR! 1)终端命令行操作vm创建 [ ...

  9. 通过递增快照备份 Azure 非托管 VM 磁盘

    概述 Azure 存储提供创建 Blob 快照的功能. 快照将捕获该时间点的 Blob 状态. 本文介绍有关如何使用快照维护虚拟机磁盘备份的方案. 如果选择不使用 Azure 备份和恢复服务,但想要为 ...

随机推荐

  1. Xilinx 学习笔记1---新建工程和创建源代码文件

    最近终于有空可以记录一些之前学习的内容,本博客系列记录笔者Xilinx ISE学习之旅,当然现在Vivado是学习热门,一步一步来.搞定 ISE,Vivado上手也会很快. 1.安装软件 软件部分的下 ...

  2. php -- 断点调试 之 选择合适的xdebug

    这里不讲如何在不同的ide里安装断点调试,讲一个不起眼却很容易犯的错误: 如何寻找适合你的环境的xdebug! 不要小看这个问题,如果说xdebug都错了,你再怎么安装断点调试,都不会成功,反而还找不 ...

  3. 一款可视化的在线制作H5

    一款可视化的在线制作H5 官方网站: http://www.iii66.cn 制作H5网址: http://www.iii66.cn/love/page/index 包括对图片,文字,图形,视频,声音 ...

  4. SSH配置struts校验发生No result defined for action actions.AdminLoginAction and result input

    配置struts校验发生No result defined for action actions.AdminLoginAction and result input,但是登录,success.jsp, ...

  5. 复制id_rsa命令

    pbcopy < ~/.ssh/id_rsa.pub https://aliasan-conf.taijiankong.cn/duotai/2T7b253i8.pac

  6. iOS开发之--属性关键字以及set和get方法

    一.属性分为三大类 1.读写性控制 a.readOnly只读,只会生成get方法,不会生成set方法 b.readWrite可读可写,会生成set方法,也会生成get方法(默认设置) 2.setter ...

  7. Kafka consumer poll(long)与poll(Duration)的区别

    最近在StackOverflow碰到的一个问题,即在consumer.poll之后assignment()返回为空的问题,如下面这段代码所示: consumer.subscribe(Arrays.as ...

  8. 微信的NATIVE支付提示201商户订单号重复的解决方案

    无论采取模式一还是模式二,进行预支付ID获取的时候应当确保订单号的唯一性,否则就会造成第二次扫码后的重复提醒. 解决方案: 以预支付ID处理为例: 商城: 1.创建log_id数据表如:out_tra ...

  9. makefile编译错误情况整理

    错误情况1:makefile:5: *** 遗漏分隔符 . 停止 原因:具体的编译动作,开头不可以有空格,留白是由 按tab键形成的. 解决方法:去掉空格,改为tab键后,再执行make命令,成功. ...

  10. PHP memcached memcache 扩展安装

    好久没配置环境今天安装PHP 开发环境, 项目比较老,一开始以为项目用的是memcache 装完后发现 项目用的是memcached 所以正好两个都装了. 碰到些坑希望能帮助到百度到这篇文章的伙伴 . ...