VM Recovery
The purpose of this spec is to describe a method for recover the VMs from VM failures. Change-Id: I3648aacc2cfefe2bb5981f694415ceab17b2dfb8
This commit is contained in:
parent
e243a2c545
commit
8a4a70db74
200
specs/newton/approved/newton-instance-ha-vm-recovery-spec.rst
Normal file
200
specs/newton/approved/newton-instance-ha-vm-recovery-spec.rst
Normal file
@ -0,0 +1,200 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==========================================
|
||||
VM Recovery
|
||||
==========================================
|
||||
|
||||
The purpose of this spec is to describe a method to recover
|
||||
individual virtual machines that are marked as failed by
|
||||
the VM monitoring component.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
VM failure can be detected by VM monitoring method discussed in
|
||||
`vm monitoring spec`__.
|
||||
|
||||
__ https://review.openstack.org/#/c/352217/
|
||||
|
||||
When VM failure event is detected, appropriate recovery actions must
|
||||
be taken. Those recovery actions should be decided using configurable
|
||||
policies based on inputs such as the state of storage (shared or
|
||||
otherwise), status of the VM, and cause of the VM failure.
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
As a cloud operator, I would like to provide my users with highly
|
||||
available VMs to meet high SLA requirements. There are several types
|
||||
of VM failure events that can occur in OpenStack clouds.
|
||||
We need to make sure such events can be detected and recovered
|
||||
by the system. Possible VM failure events include:
|
||||
|
||||
- VM crashes
|
||||
|
||||
- VM hangs
|
||||
|
||||
Possible recovery methods include:
|
||||
|
||||
- VM restart (stop and start)
|
||||
|
||||
- VM restart on different host
|
||||
|
||||
Scope
|
||||
-----
|
||||
|
||||
This spec only addresses recovery from isolated failures of individual
|
||||
VMs. Monitoring of the VMs, and detection and recovery from wider
|
||||
failures, such as failure of a whole compute host, will be covered by
|
||||
separate specs, and are therefore out of scope for this spec.
|
||||
|
||||
This spec has the following goals:
|
||||
|
||||
1. Encourage all implementations of VM recovery, whether upstream or
|
||||
downstream, to receive failure notifications in a standardized
|
||||
manner. This will allow cloud vendors and operators to implement
|
||||
HA of the compute plane via a collection of compatible components
|
||||
(of which one is compute node monitoring), whilst not being tied to
|
||||
any one implementation.
|
||||
|
||||
2. Suggest appropriate actions which can be taken for each failure
|
||||
case.
|
||||
|
||||
3. Provide details of and recommend a specific implementation which
|
||||
for the most part already exists and is proven to work.
|
||||
|
||||
4. Identify gaps with that implementation and corresponding future
|
||||
work required.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
VM monitors send failure events to a recovery workflow service. This
|
||||
workflow service can analyze the content of the failure event message
|
||||
and execute the appropriate recovery action. This workflow service
|
||||
could also handle the advanced recovery options such as maximum
|
||||
restart threshold, execute next recovery action or execute multiple
|
||||
workflows.
|
||||
|
||||
If a VM crashes, the first approach to recovery is stop and start the
|
||||
VM from nova-api. The maximum restart threshold should be
|
||||
configurable, and it could be 0, which means do not restart and go to
|
||||
next recovery method. If restart fails, or threshold is 0, it should
|
||||
try to restart the VM on a different host. The threshold could even be
|
||||
-1, to indicate an infinite number of retries on this host, preventing
|
||||
the VM from ever being restarted on a different host. This might be
|
||||
desirable in certain configurations where there is no shared storage
|
||||
for ephemeral disks, and rebuild of a disk from a glance image during
|
||||
``nova evacuate`` is undesirable.
|
||||
|
||||
If a VM hangs due to an I/O error, the recovery service may be
|
||||
required to automatically disable the ``nova-compute`` service on that
|
||||
host and restart the VM on a different host. It could also migrate
|
||||
other VMs from the host, in order to preempt further I/O errors.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
There are at least three possible ways to implement the proposed
|
||||
change:
|
||||
|
||||
1. Use Masakari as recovery workflow service
|
||||
|
||||
VM monitors send the failure events to Masakari using Masakari's
|
||||
notification API. Masakari will execute pre-defined recovery actions.
|
||||
|
||||
2. Use Mistral as recovery workflow service
|
||||
|
||||
VM monitors call the Mistral workflow to execute execute appropriate
|
||||
recovery actions.
|
||||
|
||||
3. Use Masakari as recovery engine and Mistral as workflow service
|
||||
|
||||
VM monitors send the failure events to Masakari and Masakari will
|
||||
analyze the content of the failure event message and call Mistral
|
||||
workflow to execute recovery actions.
|
||||
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
The HTTP API of the VM recovery workflow service needs to be able to
|
||||
receive events in the format they are sent by the VM monitor.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
Ideally it should be possible for the VM monitor to send instance
|
||||
event data securely to the recovery workflow service (e.g. via TLS),
|
||||
without relying on the security of the admin network over which the
|
||||
data is sent.
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
Documentation Impact
|
||||
--------------------
|
||||
|
||||
The service should be documented in the |ha-guide|_.
|
||||
|
||||
.. |ha-guide| replace:: OpenStack High Availability Guide
|
||||
.. _ha-guide: http://docs.openstack.org/ha-guide/
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
<launchpad-id or None>
|
||||
|
||||
Other contributors:
|
||||
<launchpad-id or None>
|
||||
|
||||
|
||||
Work Items
|
||||
==========
|
||||
|
||||
WIP
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
|
||||
|
||||
History
|
||||
=======
|
Loading…
Reference in New Issue
Block a user