PostgreSQL
高可用性与负载均衡原
理及实例
多个数据库服务器可以协同工作,比如在主服务器失效的时候备份服务器立即
取代它的位置
高可用性
,或者几台机器同时服务于同一个数据库
负载均衡
。
理 想状态多台服务器之间可以无缝协作。为静态页面提供服务的
服务器
可以轻松的通过将
请求分摊到多台机器从而实现负载均衡。事实上,只
读数据库也能轻松的以相同的方法实现负载均衡。不幸的是,大多数数据库服
务器都需要同时处理混合的读
写 请求,将这些数据库联合起来工作是件很麻
烦的事。虽然只读数据只需要在每台服务器上复制一份即可,但是在任何一台
服务器上的写动作都必须传播到其它所有服 务器上,这样才能保证将来对这些
已修改数据的读取返回一致的结果。
这个写同步问题就是导致多台服务器协同工作麻烦重重的最基本原因。有多种
解决此问题的方法,其思路也各不相同,但都不是既简单又高效的方案。
有一种解决方案是仅允许单独的一台
主
服务器修改数据,其它
从
服务器只
能读取数据,还可能存在平时不允许访问、仅在失效切换后代替主服务器的
备
用
服务器。
一些失效切换和负载均衡方案是
同步的
,意思是直到所有服务器都完成了某
个修改数据的事务之后,该事务才被认为是已经完成的。这将确保失效切换不
会丢失 任何数据并且所有服务器都将返回一致的结果。另一些方案是
异步的
,
这种方案允许在事务提交之后与传播到所有其它服务器之间有一小段延时,但
是在切换到 备份服务器的时候某些事务可能会丢失,并且不同的服务器可能返
回不一致的结果。当同步可能会很慢的时候可以使用异步通信。
还可以按照粒度对解决方案进行分类。某些方案只能将整个数据库集群作为一
个整体,而某些方案可以针对每个数据库或每张表分别做不同的处理。
在选择任何失效切换或负载均衡方案的时候都必须考虑性能因素。功能和性能
不可兼得,比如,一个完全同步的解决方案在慢速网络上可能削减性能一半以
上,而完全异步的方案可能仅对性能有极其微小的影响。
下面的部分大致描述了各种常见的失效切换、复制、负载均衡方案。
共享磁盘失效切换
相关文档
评论