There are nearly infinite options, depending on your requirements. Virtualmin can automate some of the steps, some need to be addressed by your applications, and some can be handled by MySQL replication.
DNS should be setup according to the docs tchen linked you to, and will be fully automated once configured.
There's also documentation covering a backup mail relay configuration here:
http://www.virtualmin.com/documentat...ld-and-forward
MySQL replication can be setup according to the MySQL documentation (and Virtualmin can manage either remote or local databases without trouble). Virtualmin doesn't have any facilities for setting up MySQL replication at this time, but there's a new Cloudmin plugin is getting MySQL replica management in a month or so (Cloudmin, by itself, doesn't deal with databases), which Virtualmin can talk to. The current version of that plugin allows many Virtualmin servers to share a single (possibly replicated) MySQL database server.
Whether you need Virtualmin on both servers depends on whether you want both to be Virtualmin servers.
If you just want database and DNS on the other server, you'd only need Webmin. If you want the mail backup features, you'd need Virtualmin. If you want a fully functional "hot spare", you'd need Virtualmin (and a cronjob to keep the homes and user data synced; though DNS and databases will already be synced via the slave relationships). If you want load balanced servers, you'd also need a load balancer (HAProxy, perlbal, Varnish, etc. are all good options).
But, keep in mind that in any reasonably complex web application, the real scaling and clustering work generally happens in your own code and not in the management tools. If you need to scale databases, you probably need to shard rather than just replicating, and your application will have to be aware of that sharding and know how to deal with it.