需求

及时知道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. 为什么不应该使用Zookeeper做服务发现?(转载)

    转载自: http://dockone.io/article/78 [编者的话]本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个 ...

  2. Zuul小技巧 /routes

    Zuul有一个非常实用的 /routes 端点,当Zuul没有按照我们的计划去转发请求! 访问 $ZUUL_URL/routes 即可查看当前Zuul的路由规则,从而在很多情况下能够帮助我们定位Zuu ...

  3. iOS 定时器 NSTimer、CADisplayLink、GCD3种方式的实现

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资 ...

  4. iOS 之 HTTPS集成实战应用

    临时想起来忘记把项目中用到的https集成整理收藏起来,以备后续不时之需.新手一般了解如下步骤即可: 1. HTTP 和 HTTPS 基本知识和学习 http://www.cnblogs.com/xi ...

  5. 蜕变成蝶~Linux设备驱动之watchdog设备驱动

    看门狗(watchdog )分硬件看门狗和软件看门狗.硬件看门狗是利用一个定时器 电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零 (俗称 “喂狗”),如果程序出现故障,不在定时周 ...

  6. EasyPopup

    EasyPopup PopupWindow 对 PopupWindow 的封装,使得在项目中使用起来更加简单.方便.快捷 项目特性 链式调用:除了在传统的 PopupWindow 使用方法之外还加入了 ...

  7. 并发编程基础之volatile关键字的用法

    一:概念 volatile关键字是一个轻量级的线程同步,它可以保证线程之间对于共享变量的同步,假设有两个线程a和b, 它们都可以访问一个成员变量,当a修改成员变量的值的时候,要保证b也能够取得成员变量 ...

  8. Spring Security默认的用户登录表单 页面源代码

    Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Page</title></hea ...

  9. 算法提高 最小方差生成树(Kruskal)_模板

     算法提高 最小方差生成树   时间限制:1.0s   内存限制:256.0MB        问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是 ...

  10. 【Java线程安全】 — ThreadLocal

    [用法] 首先明确,ThreadLocal是用空间换时间来解决线程安全问题的,方法是各个线程拥有自己的变量副本. 既然如此,那么是涉及线程安全,必然有一个共享变量,我给大家声明一个: public c ...