Merge "Promote backend after failover (cheesecake)"
This commit is contained in:
commit
e76e379b68
161
specs/newton/cheesecake-promote-backend.rst
Normal file
161
specs/newton/cheesecake-promote-backend.rst
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
=====================================================
|
||||||
|
Promote Secondary Backend After Failover (Cheesecake)
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/cinder/+spec/replication-backend-promotion
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
After failing backend A over to backend B, there is not a mechanism in
|
||||||
|
Cinder to promote backend B to the master backend in order to then replicate
|
||||||
|
to a backend C.
|
||||||
|
|
||||||
|
Current Workflow
|
||||||
|
----------------
|
||||||
|
1. Setup Replication
|
||||||
|
2. Failure Occurs
|
||||||
|
3. Fail over
|
||||||
|
4. Promote Secondary Backend
|
||||||
|
a. Freeze backend to prevent manage operations
|
||||||
|
b. Stop cinder volume service
|
||||||
|
c. Update cinder.conf to have backend A replaced with B and B with C
|
||||||
|
d. *Hack db to set backend to no longer be in 'failed-over' state*
|
||||||
|
* This is the step this spec is concerned with
|
||||||
|
* Example:
|
||||||
|
::
|
||||||
|
|
||||||
|
update services set disabled=0,
|
||||||
|
disabled_reason=NULL,
|
||||||
|
replication_status='enabled',
|
||||||
|
active_backend_id=NULL
|
||||||
|
where id=3;
|
||||||
|
e. Start cinder volume service
|
||||||
|
f. Unfreeze backend
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
=========
|
||||||
|
There was a fire in my data center and my primary backend (A) was destroyed.
|
||||||
|
Luckily, I was replicating that backend to backend (B). After failing over
|
||||||
|
to backend B and repairing the data center, we installed backend C to be a
|
||||||
|
new replication target for B.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add the following commands to reset the active backend for a host.
|
||||||
|
::
|
||||||
|
|
||||||
|
cinder reset-active-backend <backend-name>
|
||||||
|
PUT /os-services/reset_active_backend {"host": <backend-name>}
|
||||||
|
|
||||||
|
Equivalent to:
|
||||||
|
::
|
||||||
|
|
||||||
|
update services set disabled=0,
|
||||||
|
disabled_reason=NULL,
|
||||||
|
replication_status='disabled',
|
||||||
|
active_backend_id=NULL
|
||||||
|
where host='<backend-name>;
|
||||||
|
|
||||||
|
The following to re-enable replication from backend B -> C.
|
||||||
|
::
|
||||||
|
|
||||||
|
cinder replication-enable <backend-name>
|
||||||
|
PUT /os-services/replication_enable {"host": <backend-name>}
|
||||||
|
|
||||||
|
Equivalent to:
|
||||||
|
::
|
||||||
|
|
||||||
|
update services set replication_status='enabled'
|
||||||
|
where host='<backend-name>;
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
Instead of 'admin' APIs, we add cinder-manage commands.
|
||||||
|
::
|
||||||
|
|
||||||
|
cinder-manage reset-active-backend <backend-host>
|
||||||
|
cinder-manage replication-enable <backend-name>
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
?
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Implement cinder reset-active-backend API
|
||||||
|
* Implement cinder replication-enable API
|
||||||
|
* Document post-fail-over recovery in Admin guide
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
None
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Documentation in the Admin guide for how to perform a backend promotion.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
None
|
Loading…
x
Reference in New Issue
Block a user