I'm mostly bitter from spending days tracking down a race condition stemming from its notification scripts, which wasn't really keepaliveds fault per se. But if you need to start/move/constraint/notify anything along with the IP, or require sub-second failover, Corosync/Pacemaker is a far better choice.
However due to their complexity, for just a floating IP address, keepalived is unfortunately the best option for Linux (I usually have OpenBSD in that spot).