受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

Chapter 26. 高可用、负载均衡和复制

数据库服务器可以协同工作,从而在主库失效时让第二台服务器快速接管其任务(高可用性),或者让多台计算机提供同一份数据(负载均衡)。理想情况下,数据库服务器应当能够无缝协同工作。提供静态网页服务的 Web 服务器只需把 Web 请求分发到多台机器,就能很容易地组合起来。事实上,只读数据库服务器也相对容易组合起来。不幸的是,大多数数据库服务器同时处理读写请求,而读/写服务器要更难组合。这是因为,只读数据只需要在每台服务器上放置一次,而对任意一台服务器的写入都必须传播到所有服务器,以保证后续对这些服务器的读取请求返回一致的结果。

这种同步问题是服务器协同工作的根本难点。由于不存在一种能够对所有使用场景都消除同步问题影响的单一方案,因此出现了多种不同的解决方案。每一种方案都以不同方式处理这个问题,并且针对特定负载将其影响降到最低。

某些方案通过只允许一台服务器修改数据来处理同步。能够修改数据的服务器称为读/写、主库服务器。跟踪主库变更的服务器称为备库次级服务器。只能在被提升为主库之后才能连接的备库称为温备,而能够接受连接并提供只读查询的备库称为热备

某些方案是同步的,即一个修改数据的事务只有在所有服务器都提交该事务之后才被视为已提交。这保证一次故障转移不会丢失任何数据,并且所有负载均衡的服务器无论查询哪一台都将返回一致的结果。相反,异步方案允许一次提交与其传播到其他服务器之间存在一定延迟,这就带来了切换到备库时丢失某些事务的可能性,也意味着负载均衡的服务器可能返回略微陈旧的结果。当同步通信过慢时,就会使用异步通信。

这些方案还可以按粒度分类。有些方案只能处理整个数据库服务器,而另一些则允许在每个表或者每个数据库级别进行控制。

无论做出哪种选择,都必须考虑性能。功能与性能之间通常存在权衡。例如,在低速网络上采用完全同步的方案,性能可能下降一半以上,而异步方案对性能的影响则可能很小。

本节其余部分将概述多种故障转移、复制和负载均衡方案。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。