用在多个glance API server 中,对相同的image文件提供服务。该cache对用户透明。
配置文件有一个image_cache_max_size,超过的话image cache会被修剪pruner.
然而,当GET /images/<IMAGE_ID>成功返回一个image时,不管是否超cache,该image都会写入到cache中。
实践中,一般都cron来运行glance-cache-pruner。
 
glance cache工具有:
1. glance-cache-cleaner    
随着时间推移,image cache中会有一些Stalled和Invalid image。
Stalled image是image没有完全写入到cache,invalid是没有正确的写入到disk中。
可以cron 运行 glance-cache-cleaner。
 
2. glance-cache-manage     
3. glance-cache-prefetcher 
先把热点image queued起来,放到queue中。
  • 如果enable了  cache_manage middleware 可以PUT /queued-images/<IMAGE_ID>
  • 或者可以使用glance-cache-manage,该命令还可以其他host来运行
$> glance-cache-manage --host=<HOST> queue-image <IMAGE_ID>
Queue image 6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9 for caching? [y/N] y
queue/
└── 6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
仅仅是在queue目录下touch一个文件
一旦queued images,就可以prefetch,运行glance-cache-prefetcher,其可以并行的prefetch所有的queued
images
 
class Prefetcher:
def run(self):
查看queue中的image
每个image启动一个eventlet运行self.fetch_image_into_cache 分chunk读入到/opt/stack/data/glance/cache/incomplete
完成后,移入到/opt/stack/data/glance/cache/ 并且删除queue/
ll -sh incomplete/6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
1.6G -rw-rw-r-- 1 yuntong yuntong 1.6G 10月 14 15:21 incomplete/6ee64b2e-48e3-4dc9-8c43-bc5a4ccc12a9
4. glance-cache-pruner
3种方法list image cache中的images:

1. 如果enable了  cache_manage middleware,可以 GET/cached-images

2. 使用glance-cache-manage

$> glance-cache-manage --host=<HOST> list-cached

3.直接查看cache目录

$> ls -lhR $IMAGE_CACHE_DIR

在devstack中,image_cache_dir = /opt/stack/data/glance/cache/

手动移除cache中的image
1. 如果enable了  cache_manage middleware, DELETE /cached-images/<IMAGE_ID> 
2.使用 glance-cache-manage 
$> glance-cache-manage --host=<HOST> delete-cached-image <IMAGE_ID>

http://docs.openstack.org/developer/glance/cache.html

cache的driver有2种:

1. sqlite,  cache信息存在DB中:

cur = db.execute("""SELECT
                             image_id, hits, last_accessed, last_modified, size
                             FROM cached_images
                             ORDER BY image_id""")

def get_cache_size(self):
计算目录大小/opt/stack/data/glance/cache/
def get_hit_count 从DB
def get_cached_images DB
def is_cached 查看文件是否存在
def is_queued 是否在/opt/stack/data/glance/cache/queue目录中
def is_being_cached 是否在/opt/stack/data/glance/cache/incomplete目录中
delete_all_cached_images 删除文件和DB信息
def queue_image 在/opt/stack/data/glance/cache/queue touch一个文件
和incomplete一起工作,实现commit/rollback

2.xattr: cache信息从文件中获取

def get_hit_count
return int(get_xattr(path, 'hits', default=0))

entry['last_modified'] = file_info[stat.ST_MTIME]
            entry['last_accessed'] = file_info[stat.ST_ATIME]
            entry['size'] = file_info[stat.ST_SIZE]
            entry['hits'] = self.get_hit_count(image_id)

glance cache的更多相关文章

  1. glance image cache

    The Glance Image Cache The Glance API server may be configured to have an optional local image cache ...

  2. Glance组件解析

    1 Glance基本框架图 组件 描述 A client 任何使用Glance服务的应用. REST API 通过REST方式暴露Glance的使用接口. Database Abstraction L ...

  3. openstack (4)---部署Glance镜像服务,Nova计算服务

    一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...

  4. The Boot Process at a Glance x86/x64系统启动过程解析

    哥又来干体力活了.人肉翻译一下: The Boot Process at a Glance This section explains the boot process in sufficient d ...

  5. 安装glance

    在控制节点上执行 controllerHost='controller' MYSQL_PASSWD='m4r!adbOP' GLANCE_PASSWD='glance1234!' 1.创建数据库 my ...

  6. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  7. [Java 缓存] Java Cache之 DCache的简单应用.

    前言 上次总结了下本地缓存Guava Cache的简单应用, 这次来继续说下项目中使用的DCache的简单使用. 这里分为几部分进行总结, 1)DCache介绍; 2)DCache配置及使用; 3)使 ...

  8. Spring cache简单使用guava cache

    Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...

  9. 笔记:Memory Notification: Library Cache Object loaded into SGA

    笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...

随机推荐

  1. mysql中排序

    排序(默认:asc升序; desc降序 如:根据成绩从高到低排序 select * from stu_info order by mark desc; 根据成绩从低到高排序 select * from ...

  2. 用jQuery的attr()设置option默认选中无效的解决 attr设置属性失效

    表单下拉选项使用selected设置,发现第一次默认选中成功,在页面不刷新的情况下,再次下拉,selected属性设置了,默认选中不生效 在手机端有些浏览器用jQuery的attr()方法设置sele ...

  3. XXE(xml外部实体注入漏洞)

    实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...

  4. showslow / YSlow for PhantomJS/slimerjs(gecko)/phantomas

    http://yslow.org/phantomjs/ http://www.bstester.com/2015/12/front-end-performance-using-jenkinsphant ...

  5. Python菜鸟之路:Django 信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 相当于我们创建了一个hook. 1. Django的内置信号 Mo ...

  6. [TensorFlow] tf.nn.softmax_cross_entropy_with_logits的用法

    在计算loss的时候,最常见的一句话就是tf.nn.softmax_cross_entropy_with_logits,那么它到底是怎么做的呢? 首先明确一点,loss是代价值,也就是我们要最小化的值 ...

  7. 添加github ssh 公钥

    1.在控制台输入命令: ssh-keygen -t rsa -C "github上的邮箱地址" 2.将公匙复制后添加到github网站:    id_rsa.pub文件 3.测试是 ...

  8. 查看Oracle 基表的方法

    从  v$fixed_view_definition 视图中可以看到 性能视图所依赖的基表 SELECT view_definition FROM v$fixed_view_definition    ...

  9. 08 Spring框架 AOP (一)

    首先我们先来介绍一下AOP: AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的 ...

  10. mysql数据库存储过程数据迁移案例与比较

    cursor 与 insert ...select 对比: cursor:安全,不会造成死锁,可以在服务运行阶段跑,比较稳定. insert...select :速度快,但是可能造成死锁,相比curs ...