zoukankan      html  css  js  c++  java
  • glance cache

    用在多个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 middlewareDELETE /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)

  • 相关阅读:
    利用DTrace实时检测MySQl
    改进MySQL Order By Rand()的低效率
    RDS for MySQL查询缓存 (Query Cache) 的设置和使用
    RDS For MySQL 字符集相关说明
    RDS for MySQL 通过 mysqlbinlog 查看 binlog 乱码
    RDS for MySQL Mysqldump 常见问题和处理
    RDS for MySQL Online DDL 使用
    RDS MySQL 表上 Metadata lock 的产生和处理
    RDS for MySQL 如何使用 Percona Toolkit
    北京已成为投融资诈骗重灾区:存好骗子公司黑名单,谨防上当!
  • 原文地址:https://www.cnblogs.com/allcloud/p/4882476.html
Copyright © 2011-2022 走看看