A key consideration is how close to realtime you need the updates to be reflected across the cluster.
If it were me I'd lean towards master/master replication with server affinity - that way users will be guaranteed to see their updates immediately (except during a partial outage).
do I need a 3rd party tool in order to do a master-master mysql cluster for the virtual IP?
You need some smarts to handle promotion of a slave in a master/slave replication, should the master fail - have a google, there are lots of examples.
As prev, to provide load balancing and server affinity, I'd recommend running mysqlproxy (and e.g. distributing the workload based on session id or client IP). Depending on how many webservers you're running, you'll probably run an instance of mysqlproxy on each one. Implementing server affinity isn't obviously documented on the mysqlproxy web pages - but you just need to learn some lua!
There's a short howto for setting up the replication here.