Hi Daan,

In my opinion the biggest issue is the fact that there are a lot of different 
code paths: VPC versus non-VPC, VPC versus redundant-VPC, etc. That's why you 
cannot simply switch from a single VPC to a redundant VPC for example. 

For SBP, we mitigated that in Cosmic by converting all non-VPCs to a VPC with a 
single tier and made sure all features are supported. Next we merged the single 
and redundant VPC code paths. The idea here is that redundancy or not should 
only be a difference in the number of routers. Code should be the same. A 
single router, is also "master" but there just is no "backup".

That simplifies things A LOT, as keepalived is now the master of the whole 
thing. No more assigning ip addresses in Python, but leave that to keepalived 
instead. Lots of code deleted. Easier to maintain, way more stable. We just 
released Cosmic 6 that has this feature and are now rolling it out in 
production. Looking good so far. This change unlocks a lot of possibilities, 
like live upgrading from a single VPC to a redundant one (and back). In the 
end, if the redundant VPC is rock solid, you most likely don't even want single 
VPCs any more. But that will come.

As I said, we're rolling this out as we speak. In a few weeks when everything 
is upgraded I can share what we learned and how well it works. CloudStack could 
use a similar approach.
 
Kind Regards,
Remi



On 05/02/2018, 16:44, "Daan Hoogland" <daan.hoogl...@gmail.com> wrote:

    H devs,
    
    I have recently (re-)submitted two PRs, one by Wei [1] and one by Remi [2],
    that reduce downtime for redundant routers and redundant VPCs respectively.
    (please review those)
    Now from customers we hear that they also want to reduce downtime for
    regular VRs so as we discussed this we came to two possible solutions that
    we want to implement one of:
    
    1. start and configure a new router before destroying the old one and then
    as a last minute action stop the old one.
    2. make all routers start up redundancy services but for regular routers
    start only one until an upgrade is required at which time a new, second
    router can be started before killing the old one.​
    
    ​obviously both solutions have their merits, so I want to have your input
    to make the broadest supported implementation.
    -1 means there will be an overlap or a small delay and interruption of
    service.
    +1 It can be argued, "they got what they payed for".
    -2 means a overhead in memory usage by the router by the extra services
    running on it.
    +2 the number of router-varieties will be further reduced.
    
    -1&-2 We have to deal with potentially large upgrade steps from way before
    the cloudstack era even and might be stuck to 1 because of that, needing to
    hack around it. Any dealing with older VRs, pre 4.5 and especially pre 4.0
    will be hard.
    
    I am not cross posting though this might be one of these occasions where it
    is appropriate to include users@. Just my puristic inhibitions.
    
    Of course I have preferences but can you share your thoughts, please?
    ​
    ​And don't forget to review Wei's [1] and Remi's [2] work please.
    
    ​[1] https://github.com/apache/cloudstack/pull/2435​
    [2] https://github.com/apache/cloudstack/pull/2436
    
    -- 
    Daan
    

Reply via email to