On Fri, Apr 15, 2016 at 5:52 PM, Ben Tisdall <[email protected]> wrote: > Hi, > > are there are plans to support DNS resolution based on TTL a la NGINX? This > would be helpful for use cases where the upstream is an ELB or similar > system. I've pasted a reply from AWS support based on some observations from > a couple of our services that use HAProxy 1.6 in front of ELBs. Note that I > am not contending that the issue of uneven distribution of upstream IPs is > HAProxy's fault (that is a consequence of our design), but the cycling of > ELB nodes when retirement occurs is something that NGINX would seem to > handle in a more satisfactory way. > > " > I think an explanation of what happens when ELB scales will be helpful as > background at this point. ELB employs what we term "Graceful Scaling". When > a scaling trigger is breached, let's say for sake of argument this is a > scale-up event, then ELBs controller immediately begins the process of > provisioning new more performant ELB nodes. This usually takes a few > minutes, and once these new nodes pass the controller health-checks, we > remove the old node IPs from the DNS record set, and add in the new ELB node > IPs to the DNS set. Since the TTL with this DNS record is published in 60 > seconds, after about 2 - 3 minutes, most traffic will migrate over to the > new node. We do however, do not de-provision the old ELB nodes, but instead > we begin to monitor them to determine when traffic received by these nodes > drops to below a certain threshold level, or a maximum age has expired (this > is several days). This happens to cater for the case where some clients are > caching DNS longer than the TTL value. > > Given the way that HA proxy works, when it starts up, it resolves the ELB > name, and obtains the current IPs. HealthChecks are a requirement for the > resolver clause, so HA also begins to perform the configured health-check on > the nodes it learned about at startup. > > If the ELB were to scale now, the new nodes would come online but HA proxy > would never learn of them, as the old nodes will continue to pass > health-checks. If traffic continues to increase, at some point the older ELB > nodes will become overwhelmed and will fail a health-check on HA proxy, at > which point that HA proxy node on which the health-check failed, will learn > of the new ELB nodes from DNS, and start to send traffic to the new one. > > Should traffic not increase sufficiently to cause the old nodes to fail a > health-check, then only new HA proxy instances in your fleet will learn of > the new nodes. Eventually the maximum graceful node lifetime will be > reached, and we will terminate the old nodes, at this point all your HA > proxy instances will fail health-checks on their upstream and learn of the > new nodes at the same time. > > This process happens in such a fashion that over a time, its conceivable > that each of your HA proxy nodes may know of different back-end IPs. As a > result, traffic on the inside ELB nodes will not be symmetrically > distributed by the HA proxy nodes over time. This is somewhat mitigated on > the back-end by the use of cross-zone load-balancing, so the asymmetry is > not propagated to the back-ends. We do monitor each ELB node individually, > thus the ELB will scale on the monitoring of a single node, rather than the > entire ELB, which further mitigates the effects of any asymmetry on your ELB > nodes. > > There is no easy way to make HA proxy work perfectly in front of an ELB, due > to the nature of how HA proxy have implemented DNS resolution. > > We often recommend to customers using a reverse proxy in front of ELB, to > rather use Nginx, as this does have the ability to follow DNS TTLs of its > upstreams perfectly. In this case, given the way you have implemented it > means that HA will learn of failed ELB nodes, and eventually learn of > scaling, and the ELB mitigates the imbalance to your back-ends through cross > zone. So, in summary, as of now the only possible way to overcome this > behavior would be to consider using a different reverse proxy solution > between the two ELB tiers instead of HA proxy. I apologize for any > inconvenience. I hope the above information was helpful. Please let us know > if you have any other questions or concerns and we will be happy to assist > you. > " > > Regards, > > -- > Ben
Hi Ben, Could you share your configuration? I have the feeling here you're mixing too issues: DNS resolution at run time and the ability to expand backend with more servers. Baptiste

