GitHub 使用 MySQL 作为所有非 git 项目的主要数据存储, 因此 MySQL 的可用性对于 GitHub 的运维来说至关重要. 站点本身, GitHub 的 API, 身份验证等都需要数据库访问. 我们运行多个 MySQL 集群来服务我们的不同服务和任务. 我们的集群使用经典的主 - 副设置, 其中集群的单个节点 (主节点) 能够接受写操作. 其它集群节点 (副节点) 异步更新主节点的变更并服务我们的读流量.
主节点的可用性特别地重要. 主节点不可用时, 集群就不能接受写操作: 任何需要持久化的写操作都不能被持久化. 任何传入的变更, 例如提交代码, 提问题, 用户创建, 代码审查, 新建代码库等等, 都会失败.
为了支持写操作, 我们显然需要有一个可用的写节点, 即集群的主节点. 但同样重要的是, 我们需要能够识别, 或者发现, 那个节点.
来源: http://www.infoq.com/cn/articles/mysql-high-availability-at-github