c1a2b9e221
Till now glance was dependent on periodic job to get image cached locally and also has dependency on ``cachemanage`` middleware for the same. This patch removes the periodic job and dependency of ``cachemanage`` middleware and initiates immediate caching of an image via ``PUT /cache/image_id`` API call. Co-Author: Dan Smith <dms@danplanet.com> Implements: blueprint instant-caching Change-Id: I9ab3f1b7595e22dbb03af95168314352a44eb930
222 lines
9.0 KiB
ReStructuredText
222 lines
9.0 KiB
ReStructuredText
..
|
|
Copyright 2011 OpenStack Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
not use this file except in compliance with the License. You may obtain
|
|
a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
License for the specific language governing permissions and limitations
|
|
under the License.
|
|
|
|
.. _image-cache:
|
|
|
|
The Glance Image Cache
|
|
======================
|
|
|
|
The Glance API server may be configured to have an optional local image cache.
|
|
A local image cache stores a copy of image files, essentially enabling multiple
|
|
API servers to serve the same image file, resulting in an increase in
|
|
scalability due to an increased number of endpoints serving an image file.
|
|
|
|
This local image cache is transparent to the end user -- in other words, the
|
|
end user doesn't know that the Glance API is streaming an image file from
|
|
its local cache or from the actual backend storage system.
|
|
|
|
Managing the Glance Image Cache
|
|
-------------------------------
|
|
|
|
While image files are automatically placed in the image cache on successful
|
|
requests to ``GET /images/<IMAGE_ID>``, the image cache is not automatically
|
|
managed. Here, we describe the basics of how to manage the local image cache
|
|
on Glance API servers and how to automate this cache management.
|
|
|
|
Configuration options for the Image Cache
|
|
-----------------------------------------
|
|
|
|
The Glance cache uses two files: one for configuring the server and
|
|
another for the utilities. The ``glance-api.conf`` is for the server
|
|
and the ``glance-cache.conf`` is for the utilities.
|
|
|
|
The following options are in both configuration files. These need the
|
|
same values otherwise the cache will potentially run into problems.
|
|
|
|
- ``image_cache_dir`` This is the base directory where Glance stores
|
|
the cache data (Required to be set, as does not have a default).
|
|
- ``image_cache_sqlite_db`` Path to the sqlite file database that will
|
|
be used for cache management. This is a relative path from the
|
|
``image_cache_dir`` directory (Default:``cache.db``).
|
|
- ``image_cache_driver`` The driver used for cache management.
|
|
(Default:``sqlite``)
|
|
- ``image_cache_max_size`` The size when the glance-cache-pruner will
|
|
remove the oldest images, to reduce the bytes until under this value.
|
|
(Default:``10 GB``)
|
|
- ``image_cache_stall_time`` The amount of time an incomplete image will
|
|
stay in the cache, after this the incomplete image will be deleted.
|
|
(Default:``1 day``)
|
|
|
|
The following values are the ones that are specific to the
|
|
``glance-cache.conf`` and are only required for the prefetcher to run
|
|
correctly.
|
|
|
|
- ``admin_user`` The username for an admin account, this is so it can
|
|
get the image data into the cache.
|
|
- ``admin_password`` The password to the admin account.
|
|
- ``admin_tenant_name`` The tenant of the admin account.
|
|
- ``auth_url`` The URL used to authenticate to keystone. This will
|
|
be taken from the environment variables if it exists.
|
|
- ``filesystem_store_datadir`` This is used if using the filesystem
|
|
store, points to where the data is kept.
|
|
- ``filesystem_store_datadirs`` This is used to point to multiple
|
|
filesystem stores.
|
|
|
|
Controlling the Growth of the Image Cache
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The image cache has a configurable maximum size (the ``image_cache_max_size``
|
|
configuration file option). The ``image_cache_max_size`` is an upper limit
|
|
beyond which pruner, if running, starts cleaning the images cache.
|
|
However, when images are successfully returned from a call to
|
|
``GET /images/<IMAGE_ID>``, the image cache automatically writes the image
|
|
file to its cache, regardless of whether the resulting write would make the
|
|
image cache's size exceed the value of ``image_cache_max_size``.
|
|
In order to keep the image cache at or below this maximum cache size,
|
|
you need to run the ``glance-cache-pruner`` executable.
|
|
|
|
The recommended practice is to use ``cron`` to fire ``glance-cache-pruner``
|
|
at a regular interval.
|
|
|
|
Cleaning the Image Cache
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Over time, the image cache can accumulate image files that are either in
|
|
a stalled or invalid state. Stalled image files are the result of an image
|
|
cache write failing to complete. Invalid image files are the result of an
|
|
image file not being written properly to disk.
|
|
|
|
To remove these types of files, you run the ``glance-cache-cleaner``
|
|
executable.
|
|
|
|
The recommended practice is to use ``cron`` to fire ``glance-cache-cleaner``
|
|
at a semi-regular interval.
|
|
|
|
Controlling Image Cache using V2 API
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
In Yoga, Glance API has added new APIs for managing cache
|
|
related operations. In Zed, Glance has removed support of ``cache_images``
|
|
periodic job which was used to prefetch all queued images concurrently,
|
|
logging the results of the fetch for each image. Instead the image can be
|
|
immediately cached once it is queued for caching. You can use below API
|
|
calls to control the cache related operations.
|
|
|
|
To queue an image for immediate caching, you can use one of the following
|
|
methods:
|
|
|
|
* You can call ``PUT /cache/<IMAGE_ID>`` to queue the image for immediate
|
|
caching with identifier ``<IMAGE_ID>``
|
|
|
|
* Alternately, you can use the ``cache-queue`` command of glance client to
|
|
queue the image for immediate caching.
|
|
|
|
$ glance cache-queue <IMAGE_ID>
|
|
|
|
This will queue the image with identifier ``<IMAGE_ID>`` for immediate
|
|
caching.
|
|
|
|
To find out which images are in the image cache use one of the
|
|
following methods:
|
|
|
|
* You can call ``GET /cache`` to see a JSON-serialized list of
|
|
mappings that show cached images, the number of cache hits on each image,
|
|
the size of the image, and the times they were last accessed as well as
|
|
images which are queued for caching.
|
|
|
|
* Alternately, you can use the ``cache-list`` command of glance
|
|
client. Example usage::
|
|
|
|
$ glance cache-list
|
|
|
|
To delete images which are already cached or queued for caching use one of
|
|
the following methods:
|
|
|
|
* You can call ``DELETE /cache/<IMAGE_ID>`` to remove the image file for image
|
|
with identifier ``<IMAGE_ID>`` from the cache or queued state.
|
|
|
|
* Alternately, you can use the ``cache-delete`` command of glance
|
|
client. Example usage::
|
|
|
|
$ glance cache-delete <IMAGE_ID>
|
|
|
|
* You can also call ``DELETE /cache`` with header
|
|
``x-image-cache-clear-target`` to delete either only cached images or
|
|
only queued images or both. Possible values for header are ``cache``,
|
|
``queue``, ``both``.
|
|
|
|
* Alternately, you can use the ``cache-clear`` command of glance client
|
|
to delete only cached images or only queued images or both. Example usage::
|
|
|
|
$ glance cache-clear (default target is ``both``)
|
|
$ glance cache-clear --target cached
|
|
$ glance cache-clear --target queued
|
|
|
|
* In Glance, image cache is local to each node, hence cache operations
|
|
must be performed on each node locally. If OpenStack cloud is deployed with
|
|
HA (3/5/7 controllers) then while running the cache related operations it is
|
|
necessary to specify the HOST address using -H option.
|
|
Example usage::
|
|
|
|
$ glance --host=<HOST> cache-list
|
|
|
|
Finding Which Images are in the Image Cache with glance-cache-manage
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
You can find out which images are in the image cache using one of the
|
|
following methods:
|
|
|
|
* If the ``cachemanage`` middleware is enabled in the application pipeline,
|
|
you may call ``GET /cached-images`` to see a JSON-serialized list of
|
|
mappings that show cached images, the number of cache hits on each image,
|
|
the size of the image, and the times they were last accessed.
|
|
|
|
* Alternately, you can use the ``glance-cache-manage`` program. This program
|
|
may be run from a different host than the host containing the image cache.
|
|
Example usage::
|
|
|
|
$ glance-cache-manage --host=<HOST> list-cached
|
|
|
|
* In Glance, image cache is local to each node, hence image cache management
|
|
must be performed on each node locally. If OpenStack cloud is deployed with
|
|
HA (3/5/7 controllers) then while running the cache management it is
|
|
necessary to specify the HOST address using -H option.
|
|
Example usage::
|
|
|
|
$ glance-cache-manage --host=<HOST> list-cached
|
|
|
|
* You can issue the following call on \*nix systems (on the host that contains
|
|
the image cache)::
|
|
|
|
$ ls -lhR $IMAGE_CACHE_DIR
|
|
|
|
where ``$IMAGE_CACHE_DIR`` is the value of the ``image_cache_dir``
|
|
configuration variable.
|
|
|
|
Note that the image's cache hit is not shown using this method.
|
|
|
|
Manually Removing Images from the Image Cache with glance-cache-manage
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If the ``cachemanage`` middleware is enabled, you may call
|
|
``DELETE /cached-images/<IMAGE_ID>`` to remove the image file for image
|
|
with identifier ``<IMAGE_ID>`` from the cache.
|
|
|
|
Alternately, you can use the ``glance-cache-manage`` program. Example usage::
|
|
|
|
$ glance-cache-manage --host=<HOST> delete-cached-image <IMAGE_ID>
|
|
|