Spec for VMware Store to use multiple datastores
This spec includes a proposal to support multiple datastores in the glance VMware store. Based on blueprint vmware-store-multiple-datastores Change-Id: I16229da839ab7f147c36d5857e2269999e8215d7
This commit is contained in:
parent
224ade269d
commit
21e94ae496
227
specs/kilo/vmware-store-multiple-datastores.rst
Normal file
227
specs/kilo/vmware-store-multiple-datastores.rst
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==================================================
|
||||||
|
Glance VMware store to support multiple datastores
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/glance/+spec/vmware-store-multiple-datastores
|
||||||
|
|
||||||
|
Glance, when configured to use VMware store, stores the images in a virtual
|
||||||
|
storage container called datastore, identified by the configuration option
|
||||||
|
vmware_datastore_name. The size of the datastore can only be increased to a
|
||||||
|
certain limit which also depends upon the underlying physical storage.
|
||||||
|
|
||||||
|
The capacity of the store is thus bound by the size of a single datastore and
|
||||||
|
poses serious scalability issues.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Currently the number of images stored by glance, when configured to use VMware
|
||||||
|
store, is limited by the capacity of a single datastore. The size of a
|
||||||
|
datastore has an upper bound [1].
|
||||||
|
|
||||||
|
e.g The maximum datastore size is 64TB when backed by VMFS-5 filesystem. While
|
||||||
|
the same for a datastore with NFS may depend on the storage array vendor. While
|
||||||
|
this is the theoretical maximum based on the supported filesystem, datastores
|
||||||
|
are also sized based on the underlying physical storage, including internal and
|
||||||
|
external devices and networked storage. With networked storage the choice of
|
||||||
|
storage protocol (iSCSI, FC, FCoE) also play a vital role in deciding the
|
||||||
|
optimal size. Thus, the capacity of a datastore used in a datacenter varies by
|
||||||
|
deployment.
|
||||||
|
|
||||||
|
Apart from the capacity, there may be a performance bottleneck when many
|
||||||
|
compute nodes concurrently access a single datastore to download images.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
To allow adding more capacity and improving performance, we suggest the use of
|
||||||
|
multiple datastores for storing images.
|
||||||
|
|
||||||
|
There is only one major aspect of the proposed change:
|
||||||
|
- Datastore Selection.
|
||||||
|
|
||||||
|
**1) Datastore Selection:**
|
||||||
|
|
||||||
|
This change proposes to select a datastore based on the priority given to it by
|
||||||
|
the operator and the capacity to accommodate the image. A new configuration
|
||||||
|
option (say vmware_datastores) will be added that would enable the operator to
|
||||||
|
specify multiple datastores along with their relative weights. In case of equal
|
||||||
|
priority the selection will be based on the maximum freespace available on the
|
||||||
|
datastore. This approach is very similar to filesystem_store_datadirs used by
|
||||||
|
filesystem store.
|
||||||
|
|
||||||
|
Example: say vmware_datastores is configured with nfs_datastore,
|
||||||
|
iscsi_datastore, ssd_datastore with weights 100, 100 and 200 respectively.
|
||||||
|
Here, ssd_datastore will be the preferred datastore if it
|
||||||
|
can accommodate the image data being added. Otherwise, nfs_datastore or
|
||||||
|
iscsi_datastore will be chosen based on maximum freespace available.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
1) The datastore selection can be done through round-robin/randomized strategy
|
||||||
|
instead of priority-based. This would be ideal if all datastores are of same
|
||||||
|
type and perform similarly. But since datastores are of different types, the
|
||||||
|
strategy is best driven by operator input. e.g SSD backed datastores may be
|
||||||
|
faster that networked datastores. While its possible to determine
|
||||||
|
the type of datastore, implicit assumptions cannot be made.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Does not have any impact on glance data model.
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This spec only adds a selection logic to the existing functionality and hence
|
||||||
|
does not have any security impact.
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
The use of multiple datastores will reduce concurrent operations on a single
|
||||||
|
datastore.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
This proposal will allow administrators to configure multiple datastores to
|
||||||
|
save the image data in VMware storage backend. If enabled, it will override
|
||||||
|
the existing configuration option *vmware_datastore_name* that allows to
|
||||||
|
specify a single datastore. If disabled, the store will fallback to
|
||||||
|
vmware_datastore_name option. Thus, the change is backwards compatible. We
|
||||||
|
will deprecate the vmware_datastore_name option going forward.
|
||||||
|
|
||||||
|
New Multi Strings configuration option in *glance-api.conf*
|
||||||
|
|
||||||
|
**vmware_datastores**
|
||||||
|
Optional. Default: Not set.
|
||||||
|
|
||||||
|
A datastore along with its datacenter path and a weight. If the
|
||||||
|
datastore is a member of a datastore cluster, then the name of the cluster
|
||||||
|
should also be included. Otherwise, the cluster name can be omitted. This
|
||||||
|
option can be specified multiple times to specify multiple datastores.
|
||||||
|
Thus, the required format becomes:
|
||||||
|
|
||||||
|
vmware_datastores =
|
||||||
|
<datacenter_path>:<datastore1>:<weight>
|
||||||
|
vmware_datastores =
|
||||||
|
<datacenter_path>:<datastore_cluster_name>:<datastore2>:<weight>
|
||||||
|
|
||||||
|
The weights are used to establish the relative priorities of the specified
|
||||||
|
datastores. Thus, they can be any arbitrary integer values.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:nfs_datastore:2
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:ssd_datastore:3
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:backup_datastore:1
|
||||||
|
|
||||||
|
In the above example, ssd_datastore will be given highest priority, followed
|
||||||
|
by nfs_datastore and backup_datastore.
|
||||||
|
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:nfs1_datastore:100
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:nfs2_datastore:100
|
||||||
|
vmware_datastores =
|
||||||
|
datacenter1:backup_datastore:50
|
||||||
|
|
||||||
|
In this example, the nfs datastores will be given equal priority, followed by
|
||||||
|
the backup_datastore. With equal priority, the contention between nfs
|
||||||
|
datastores is resolved by the maximum freespace.
|
||||||
|
|
||||||
|
Note:- If the datacenter path or datastore name contains a colon (:) symbol,
|
||||||
|
it must be escaped with a backslash.
|
||||||
|
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
smurugesan (sabari)
|
||||||
|
|
||||||
|
Other contributors:
|
||||||
|
None
|
||||||
|
|
||||||
|
Reviewers
|
||||||
|
---------
|
||||||
|
|
||||||
|
Core reviewer(s):
|
||||||
|
nikhil-komawar
|
||||||
|
arnaudleg
|
||||||
|
|
||||||
|
Other reviewer(s):
|
||||||
|
rgerganov
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
1) Implement new config option in VMware store driver.
|
||||||
|
2) Implement datastore selection logic in the VMware store driver.
|
||||||
|
3) Implement unit tests.
|
||||||
|
4) Change glance-api sample conf in glance repository.
|
||||||
|
5) Add a deprecation warning for vmware_datastore_name.
|
||||||
|
6) Update the documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
* oslo.vmware has introduced a Datastore object which will be used in this
|
||||||
|
implementation.
|
||||||
|
* oslo.vmware has a vim_util module that has some low-level utility methods
|
||||||
|
to interact with the vmware api's. This is required to parse api responses.
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
* Tempest tests are not required.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
* Document new configuration options.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
[1] http://www.vmware.com/pdf/vsphere5/r55/vsphere-55-configuration-maximums.pdf
|
Loading…
Reference in New Issue
Block a user