Haproxy_backend_status does not allow to use external load balancers ot ouf the box

Bug #1522749 reported by Vladimir Kuklin
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fuel for OpenStack
Fix Committed
High
Aleksandr Didenko
8.0.x
Fix Committed
High
Aleksandr Didenko

Bug Description

Currently, we have haproxy_backend_status resource which checks for API availability before operating with it. This resource assumes our only load balancer is haproxy and we can fetch its status. This is not exactly true for all the cases. Sometimes users want to use external load balancers. It would be awesome to introduce a way of disabling haproxy_backend_status check or at least to refactor it to support other load balancers.

tags: added: feature
Revision history for this message
Aleksandr Didenko (adidenko) wrote :

> Sometimes users want to use external load balancers.

There will be no problems if external load balancer is Haproxy :)

Revision history for this message
Aleksandr Didenko (adidenko) wrote :

We can not disable haproxy_backend_status because we need to wait for APIs to come up at some points during deployment. I think we should refactor haproxy_backend_status (and probably rename it to backend_status) so it could support checks via haproxy status (current implementation) and something like basic "http_check" (connect to endpoint and check if it returns HTTP/200 or something like that). In such case we would be able to switch to 'haproxy' check on default deployments and to 'http' check on deployments with external non-haproxy LBs.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to fuel-library (master)

Fix proposed to branch: master
Review: https://review.openstack.org/257500

Changed in fuel:
assignee: Fuel Library Team (fuel-library) → Aleksandr Didenko (adidenko)
status: Confirmed → In Progress
Changed in fuel:
assignee: Aleksandr Didenko (adidenko) → Dmitry Ilyin (idv1985)
Changed in fuel:
assignee: Dmitry Ilyin (idv1985) → Aleksandr Didenko (adidenko)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to fuel-library (master)

Reviewed: https://review.openstack.org/257500
Committed: https://git.openstack.org/cgit/openstack/fuel-library/commit/?id=30c4b62c098732a70a160b6db8eb981f183df9e6
Submitter: Jenkins
Branch: master

commit 30c4b62c098732a70a160b6db8eb981f183df9e6
Author: Aleksandr Didenko <email address hidden>
Date: Mon Dec 14 18:18:17 2015 +0100

    Add new provider for backend status checks

    Haproxy backend status check remains the default provider. Adding
    new one for basic HTTP checks so it could be possible to use
    external non-haproxy load balancers. After this we can make provider
    for haproxy_backend_status in our manifests conditional, based on
    whether we have external balancer or not.

    Partial-bug: #1522749

    Change-Id: I77921fba265da29332ddd05f371eb84bb1825d8b

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to fuel-library (master)

Fix proposed to branch: master
Review: https://review.openstack.org/260125

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to fuel-library (master)

Reviewed: https://review.openstack.org/260125
Committed: https://git.openstack.org/cgit/openstack/fuel-library/commit/?id=ba7ed96778a5189ca42cb59a57283cda767a0b82
Submitter: Jenkins
Branch: master

commit ba7ed96778a5189ca42cb59a57283cda767a0b82
Author: Aleksandr Didenko <email address hidden>
Date: Mon Dec 21 16:31:01 2015 +0100

    Add support for external load-balancers

    Add new hiera configuration key 'external_lb'. If it's set to
    true then we should not configure Haproxy LB on controllers and
    also we should switch 'haproxy_backend_status' to 'http' provider.

    We calculate 'external_lb' during 'globals.pp' task - if we have
    no VIPs with 'haproxy' namespace, then it's set to 'true'.

    It does not change the default deployment scheme.

    Also fixing minor issue with default provider for
    'haproxy_backend_status' type.

    Closes-bug: #1522749
    Change-Id: I5539d04d577465bd410494a6c0b7caff18857878

Changed in fuel:
status: In Progress → Fix Committed
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to fuel-library (stable/8.0)

Fix proposed to branch: stable/8.0
Review: https://review.openstack.org/263320

Changed in fuel:
milestone: 8.0 → 9.0
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to fuel-library (stable/8.0)

Reviewed: https://review.openstack.org/263320
Committed: https://git.openstack.org/cgit/openstack/fuel-library/commit/?id=7ff02115bcd6e278fa3a766110858562e9f991a3
Submitter: Jenkins
Branch: stable/8.0

commit 7ff02115bcd6e278fa3a766110858562e9f991a3
Author: Aleksandr Didenko <email address hidden>
Date: Mon Dec 21 16:31:01 2015 +0100

    Add support for external load-balancers

    Add new hiera configuration key 'external_lb'. If it's set to
    true then we should not configure Haproxy LB on controllers and
    also we should switch 'haproxy_backend_status' to 'http' provider.

    We calculate 'external_lb' during 'globals.pp' task - if we have
    no VIPs with 'haproxy' namespace, then it's set to 'true'.

    It does not change the default deployment scheme.

    Closes-bug: #1522749
    Change-Id: I5539d04d577465bd410494a6c0b7caff18857878
    (cherry picked from master branch commmit with the same change-id)

tags: added: on-verification
Revision history for this message
Aleksandr Didenko (adidenko) wrote :

How to verify bug:

1) Install the following plugin on Fuel-8.0
https://github.com/adidenko/fuel-plugin-external-lb/blob/master/rpms/external_loadbalancer-0.1-0.1.3-1.noarch.rpm

2) Create new env with 3 controllers, 3 ceph-osd, 1 compute, without SSL

3) The hard part: configure haproxy on a separate VM which is not included into environment but has access to all virtual networks. You can just install our haproxy deb package, copy /etc/haproxy from any existing controller and then replace IPs with your actual ones. Please make sure to disable haproxy status (either via config or by blocking 10000 port in firewall).

4) Add mysql-status frontend to your external haproxy:
http://paste.openstack.org/show/485142/

5) Configure External LB plugin to use your custom haproxy VM (Settings tab, Other. No need to enable Fake Floating in plugin)

6) Deploy cluster

Expected result: cluster should work, VMs should be able to spawn, OSTF may not work in this case - it's ok.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Related blueprints

Remote bug watches

Bug watches keep track of this bug in other bug trackers.