Hi guys, in case you are interested, here is a script that will do the amphora upgrade automatically (ok, it's not totally automatic, need two inputs).
https://github.com/LingxianKong/octavia-stuff/blob/master/utils/octavia-upgrade-vms.py Regards! ----------------------------------- Lingxian Kong On Fri, Jul 1, 2016 at 4:53 AM, Doug Wiegley <doug...@parksidesoftware.com> wrote: > >> On Jun 30, 2016, at 7:15 AM, Ihar Hrachyshka <ihrac...@redhat.com> wrote: >> >>> >>> On 30 Jun 2016, at 01:16, Brandon Logan <brandon.lo...@rackspace.com> wrote: >>> >>> Hi Ihar, thanks for starting this discussion. Comments in-line. >>> >>> After writing my comments in line, I might now realize that you're just >>> talking about documenting a way for a user to do this, and not have >>> Octavia handle it at all. If that's the case I apologize for my reading >>> comprehension, but I'll keep my comments in case I'm wrong. My brain is >>> not working well today, sorry :( >> >> Right. All the mechanisms needed to apply the approach are already in place >> in both Octavia and Neutron as of Mitaka. The question is mostly about >> whether the team behind the project may endorse the alternative approach in >> addition to whatever is in the implementation in regards to failovers by >> giving space to describe it in the official docs. I don’t suggest that the >> approach is the sole documented, or that octavia team need to implement >> anything. [That said, it may be wise to look at providing some smart scripts >> on top of neutron/octavia API that would realize the approach without >> putting the burden of multiple API calls onto users.] > > I don’t have a problem documenting it, but I also wouldn’t personally want to > recommend it. > > We’re adding a layer of NAT, which has performance and HA implications of its > own. > > We’re adding FIPs, when the neutron advice for “simple nova-net like > deployment” is provider nets and linuxbridge, which don’t support them. > > Thanks, > doug > > >> >>> >>> Thanks, >>> Brandon >>> >>> On Wed, 2016-06-29 at 18:14 +0200, Ihar Hrachyshka wrote: >>>> Hi all, >>>> >>>> I was looking lately at upgrades for octavia images. This includes using >>>> new images for new loadbalancers, as well as for existing balancers. >>>> >>>> For the first problem, the amp_image_tag option that I added in Mitaka >>>> seems to do the job: all new balancers are created with the latest image >>>> that is tagged properly. >>>> >>>> As for balancers that already exist, the only way to get them use a new >>>> image is to trigger an instance failure, that should rebuild failed nova >>>> instance, using the new image. AFAIU the failover process is not currently >>>> automated, requiring from the user to set the corresponding port to DOWN >>>> and waiting for failover to be detected. I’ve heard there are plans to >>>> introduce a specific command to trigger a quick-failover, that would >>>> streamline the process and reduce the time needed for the process because >>>> the failover would be immediately detected and processed instead of >>>> waiting for keepalived failure mode to occur. Is it on the horizon? >>>> Patches to review? >>> >>> Not that I know of and with all the work slated for Newton, I'm 99% sure >>> it won't be done in Newton. Perhaps Ocata. >> >> I see. Do we maybe want to provide a smart script that would help to trigger >> a failover with neutron API? [detect the port id, set it to DOWN, …] >> >>>> >>>> While the approach seems rather promising and may be applicable for some >>>> environments, I have several concerns about the failover approach that we >>>> may want to address. >>>> >>>> 1. HA assumption. The approach assumes there is another node running >>>> available to serve requests while instance is rebuilding. For non-HA >>>> amphoras, it’s not the case, meaning the image upgrade process has a >>>> significant downtime. >>>> >>>> 2. Even if we have HA, for the time of instance rebuilding, the balancer >>>> cluster is degraded to a single node. >>>> >>>> 3. (minor) during the upgrade phase, instances that belong to the same HA >>>> amphora may run different versions of the image. >>>> >>>> What’s the alternative? >>>> >>>> One idea I was running with for some time is moving the upgrade complexity >>>> one level up. Instead of making Octavia aware of upgrade intricacies, >>>> allow it to do its job (load balance), while use neutron floating IP >>>> resource to flip a switch from an old image to a new one. Let me elaborate. >>> I'm not sure I like the idea of tying this to floating IP as there are >>> deployers who do not use floating IPs. Then again, we are currently >>> depending on allowed address pairs which is also an extension, but I >>> suspect its probably deployed in more places. I have no proof of this >>> though. >> >> I guess you already deduced that, but just for the sake of completeness: no, >> I don’t suggest that octavia ties its backend to FIPs. I merely suggest to >> document the proposed approach as ‘yet another way of doing it’, at least >> until we tackle the first two concerns raised. >> >>>> >>>> Let’s say we have a load balancer LB1 that is running Image1. In this >>>> scenario, we assume that access to LB1 VIP is proxied through a floating >>>> ip FIP that points to LB1 VIP. Now, the operator uploaded a new Image2 to >>>> glance registry and tagged it for octavia usage. The user now wants to >>>> migrate the load balancer function to using the new image. To achieve >>>> this, the user follows the steps: >>>> >>>> 1. create an independent clone of LB1 (let’s call it LB2) that has exact >>>> same attributes (members) as LB1. >>>> 2. once LB2 is up and ready to process requests incoming to its VIP, >>>> redirect FIP to the LB2 VIP. >>>> 3. now all new flows are immediately redirected to LB2 VIP, no downtime >>>> (for new flows) due to atomic nature of FIP update on the backend (we use >>>> iptables-save/iptables-restore to update FIP rules on the router). >>> Will this sever any existing connections? Is there a way to drain >>> connections? Or is that already done? >> >> Not sure. Hopefully conntrack entries still apply until you shutdown the >> node or close all current sessions. I don’t know of a way to detect if there >> are active sessions running. The safe fallback would be giving the load >> balancer enough time for any connections to die (a day?) before >> deprovisioning the old balancer. >> >>>> 4. since LB1 is no longer handling any flows, we can deprovision it. LB2 >>>> is now the only balancer handling members. >>>> >>>> With that approach, 1) we provide for consistent downtime expectations >>>> irrelevant to amphora architecture chosen (HA or not); 2) we flip the >>>> switch when the clone is up and ready, so no degraded state for the >>>> balancer function; 3) all instances in an HA amphora run the same image. >>>> >>>> Of course, it won’t provide no downtime for existing flows that may >>>> already be handled by the balancer function. That’s a limitation that I >>>> believe is shared by all approaches currently at the table. >>>> >>>> As a side note, the approach would work for other lbaas drivers, like >>>> namespaces, f.e. in case we want to update haproxy. >>>> >>>> Several questions in regards to the topic: >>>> >>>> 1. are there any drawbacks with the approach? can we consider it an >>>> alternative way of doing image upgrades that could find its way into >>>> official documentation? >>> >>> Echoing my comment above of being tightly coupled with floating IPs is a >>> draw back. >>> >>> Another way would be to make use of the allowed address pairs: >>> 1) spin up a clone of the amp cluster for a loadbalancer but don't bring >>> up the VIP IP Interface and don't start keepalived (or just prevent >>> garping) >>> 2) update the allowed address pairs for the clones to accept the vip IP >>> 3) bring up VIP IP interface up and start keepalived (or do a garp) >>> 4) stop keepalived on the old cluster, take the interface down >>> 5) deprovision old cluster. >>> >>> I feel bad things can happen between 3 and 4 though. This is just a >>> thought to play around with, I'm sure I'm not realizing some minute >>> details that may cause this to not work. Plus, its a bit more involved >>> that the FIP solution you proposed. >> >> I think there is benefit to discuss how to make upgrades more atomic. Pairs >> are indeed something to consider, that would allow us to proceed without >> introducing port replug in neutron. >> >> Anyway, that’s a lot more involving than either FIP or failover approach, >> and would take a lot of time to properly plan for it. >> >>>> >>>> 2. if the answer is yes, then how can I contribute the piece? should I >>>> sync with some other doc related work that I know is currently ongoing in >>>> the team? >>>> >>>> Ihar >>>> __________________________________________________________________________ >>>> OpenStack Development Mailing List (not for usage questions) >>>> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >>> __________________________________________________________________________ >>> OpenStack Development Mailing List (not for usage questions) >>> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >> >> >> __________________________________________________________________________ >> OpenStack Development Mailing List (not for usage questions) >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev