At GitHub they use MySQL as their main datastore. The setup is a typical “single-writer-multiple-readers” design. They loadbalance between server pools using HAProxy, with some cleverness built in:
Instead [of checking whether a MySQL server is live with
mysql-check], we make our HAProxy pools context aware. We let the backend MySQL hosts make an informed decision: “should I be included in a pool or should I not?”
The HAProxy config contains all known hosts. The hosts themselves can answer to checks running with either
HTTP 200 (OK),
HTTP 503 (Not OK), or
HTTP 404 (Maintenance). Based upon those answers HAProxy will assess if there are enough hosts in the main
mysql_ro_main pool to handle the load, and automatically switch to the failover
mysql_ro_backup pool if need be.
frontend mysql_ro ... acl mysql_not_enough_capacity nbsrv(mysql_ro_main) lt 3 use_backend mysql_ro_backup if mysql_not_enough_capacity default_backend mysql_ro_main
As an extra, they’ve also integrated it all into their chatops.