需求

及时知道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就可以了,即使用订阅模式

测试脚本

  1. #!/usr/bin/env python
  2. import pika
  3. import json
  4.  
  5. credentials = pika.PlainCredentials('guest', 'RABBIT_PASS')
  6. params = pika.ConnectionParameters(host='xxx',credentials=credentials)
  7. connection = pika.BlockingConnection(params)
  8. channel = connection.channel()
  9.  
  10. exchange_name = 'nova'
  11. queue_name = channel.queue_declare(exclusive=True).method.queue
  12. binding_key = 'notifications.info'
  13.  
  14. channel.exchange_declare(exchange=exchange_name,type='topic')
  15. channel.queue_bind(exchange=exchange_name,
  16. queue=queue_name,
  17. routing_key=binding_key)
  18.  
  19. print ' [*] Waiting for logs. To exit press CTRL+C'
  20.  
  21. def callback(ch, method, properties, body):
  22. b= json.loads(body)
  23. print b['event_type'],b['payload']['state'], b['payload']['old_state']
  24. # for key,value in b.iteritems():
  25. # print key,':',value
  26.  
  27. channel.basic_consume(callback,queue=queue_name,no_ack=True)
  28. 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. docker进程分析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/80970541 序言      闷热. ...

  2. springboot-custom starter

    Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为模块来管理, 以便相互依赖复用,在Spring Boot项 ...

  3. python rabbitmq的库,rabbitpy代替pika

    之前看网上都是清一色pika包的例子,就用的pika包,最大问题是非多线程安全,改为使用rabbitpy.大幅改善了pika多线程需要加锁,和外网推送延迟又不能开多线程导致推送慢的问题. rabbit ...

  4. JS精准倒计时(支持自定义模板)

    /** * 倒计时 Create By TuJia @2017.10.17 * 使用方法: * leftTimer.run(container[,theme][,callback]); * * 支持 ...

  5. JS学习大作业-Excel

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. Centos6.8 安装dlib库时出错【升级gcc 到4.9.0以上】

    在centos6.8上安装dlib库时出现错误: 1.CMake must be installed to build the following extensions: dlib 没有安装CMake ...

  7. HTML load事件和DOMCOntentLoaded事件

    JS高程 p14 “异步脚本一定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发之前或之后执行”   普通script标签会阻塞DOM的解析 DOMcontentLoa ...

  8. js 日期排序(sort)

    按创建时间日期排序 例如 eg 1.升序 2.降序 返回的结果: 注: 支持IE和Chrome其他的浏览器可自行测试

  9. 主流框架的搭建(VUE,React)

    vue脚手架:cnpm install vue vue-cli -gvue init webpack/webpack-simple shuaige(新建文件夹的名字)cd shuaigecnpm in ...

  10. python的time

    有时候需要获取并格式化输出把当前时间,需要用到datetime的strftime方法 >>from datetime import datetime >>datetime.no ...