Может я не правильно понял, но heartbeat/keepalived используются для снижения отказа единой точки входа, в данном случае haproxy. То есть, делаем shared IP на 2 сервера с haproxy. Один работает, второй ждет. Первый падает, heartbeat перебрасывает IP на второй и запускает haproxy.
В случае балансировки:
в backend можно указать какие сервера активные, какие для backup. Для них включается check. Дальше haproxy разрулит.
То есть, можно сделать 2 основных, 2 для backup. Запросы на backup пойдут только тогда, когда все основные будут мертвы.
Цепи вида srv1->srv2->srv3, к сожалению, не настраивал. Можете привести пример,
зачем нужен failover failoverа серверов приложений?