<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">All,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Currently OpenStack does not have a built-in HA mechanism for tenant<o:p></o:p></p>
<p class="MsoNormal">instances which could restore virtual machines in case of a host<o:p></o:p></p>
<p class="MsoNormal">failure. Openstack assumes every app is designed for failure and can<o:p></o:p></p>
<p class="MsoNormal">handle instance failure and will self-remediate, but that is rarely<o:p></o:p></p>
<p class="MsoNormal">the case for the very large Enterprise application ecosystem.<o:p></o:p></p>
<p class="MsoNormal">Many existing enterprise applications are stateful, and assume that<o:p></o:p></p>
<p class="MsoNormal">the physical infrastructure is always on.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Even the OpenStack controller services themselves do not gracefully<o:p></o:p></p>
<p class="MsoNormal">handle failure.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When these applications were virtualized, they were virtualized on<o:p></o:p></p>
<p class="MsoNormal">platforms that enabled very high SLAs for each virtual machine,<o:p></o:p></p>
<p class="MsoNormal">allowing the application to not be rewritten as the IT team moved them<o:p></o:p></p>
<p class="MsoNormal">from physical to virtual. Now while these apps cannot benefit from<o:p></o:p></p>
<p class="MsoNormal">methods like automatic scaleout, the application owners will greatly<o:p></o:p></p>
<p class="MsoNormal">benefit from the self-service capabilities they will recieve as they<o:p></o:p></p>
<p class="MsoNormal">utilize the OpenStack control plane.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'd like to suggest to expand heat convergence mechanism to enable<o:p></o:p></p>
<p class="MsoNormal">self-remediation of virtual machines and other heat resources.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">convergence specs: https://review.openstack.org/#/c/95907/<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Basic flow would look like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1. Nova detects host failure and posts notification<o:p></o:p></p>
<p class="MsoNormal">    Nova service_group API implements host health monitor. We will<o:p></o:p></p>
<p class="MsoNormal">    use it as notification source when host goes down. Afaik there are<o:p></o:p></p>
<p class="MsoNormal">    some issues with that, and we might need to fix them. We need<o:p></o:p></p>
<p class="MsoNormal">    host-health notification source with low latency and good<o:p></o:p></p>
<p class="MsoNormal">    reliability (when we get host-down notification, we will be 100%<o:p></o:p></p>
<p class="MsoNormal">    sure that its actually down).<o:p></o:p></p>
<p class="MsoNormal">2. Nova sends notifs about affected resources<o:p></o:p></p>
<p class="MsoNormal">    Nova generates list of affected resources (VMs for example) and<o:p></o:p></p>
<p class="MsoNormal">    notifies that they are down.<o:p></o:p></p>
<p class="MsoNormal">3. Convergence listens on resource-health notification<o:p></o:p></p>
<p class="MsoNormal">    It schedules rebuild of affected resources, for example VMs on<o:p></o:p></p>
<p class="MsoNormal">    given host.<o:p></o:p></p>
<p class="MsoNormal">4. We introduce different, configurable methods for resource rescue<o:p></o:p></p>
<p class="MsoNormal">    Client might want to cover different resources with different<o:p></o:p></p>
<p class="MsoNormal">    level of SLA. For example http edge server may be fault tolerant<o:p></o:p></p>
<p class="MsoNormal">    and all we want is to simply recreate it on different node and add<o:p></o:p></p>
<p class="MsoNormal">    to LBaaS pool to regain quorum, while DB server has to be<o:p></o:p></p>
<p class="MsoNormal">    evacuated.<o:p></o:p></p>
<p class="MsoNormal">5. We call nova evacuate if server is configured to use it<o:p></o:p></p>
<p class="MsoNormal">    By evacuate I mean nova evacuate --on-shared-storage, so<o:p></o:p></p>
<p class="MsoNormal">    in fact we'll boot up same vm (from existing disk), keep addesses,<o:p></o:p></p>
<p class="MsoNormal">    data and so on. This will allow pet-servers to minimize downtime<o:p></o:p></p>
<p class="MsoNormal">    caused by host failure.<o:p></o:p></p>
<p class="MsoNormal">    We might stumble upon fencing problem in this case. Nova already<o:p></o:p></p>
<p class="MsoNormal">    has some form of safeguard implemented (it deletes evacuated<o:p></o:p></p>
<p class="MsoNormal">    instances when host comes back up). We might want to add more<o:p></o:p></p>
<p class="MsoNormal">    reliable form of fencing (storage locking?) to nova in the future.<o:p></o:p></p>
<p class="MsoNormal">6. Heat makes sure that all the configuration needed are applied<o:p></o:p></p>
<p class="MsoNormal">    Volumes attached, processes run and so on.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In short, what we'll need from nova is to have 100% reliable<o:p></o:p></p>
<p class="MsoNormal">host-health monitor and equally reliable rebuild/evacuate mechanism<o:p></o:p></p>
<p class="MsoNormal">with fencing and scheduler. In heat we need scallable and reliable<o:p></o:p></p>
<p class="MsoNormal">event listener and engine to decide which action to perform in given<o:p></o:p></p>
<p class="MsoNormal">situation.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Regards,<o:p></o:p></p>
<p class="MsoNormal">Michał "inc0" Jastrzębski<o:p></o:p></p>
</div>
</body>
</html>