看多了应用服务的高可用架构,咱们来看看数据库的高可用吧。mysql
数据存储高可用的方案本质都是经过将数据复制到多个存储设备,经过数据冗余的方式来实现高可用。常见的高可用架构有主备、主从、主主、集群、分区等,接下来咱们聊聊每种架构的优缺点。sql
一、基本架构拓扑图以下 数据库
总体架构简单,几乎全部的数据库都提供了主备复制的功能,例如Mysql、Oracle、MongoDB等。在这种架构中备库主要承担数据备份的做用,不参与实际业务读写操做,若是把备机改为主机须要人工操做。安全
二、优缺点分析 主备架构的优势就是简单,具体表现有:架构
这种架构的缺点也比较明显:运维
主从架构与主备架构只有一字之差,可是对于实际应用架构差距却很大。在主备架构中备库不参与业务操做,而在主从架构中从库是须要参与业务操做的,应用架构须要作读写分离,将写操做写入主库,而读操做从从库读。性能
一、主从基本架构拓扑图以下 设计
二、优缺点分析 这种架构在少许写和大量读时很是有用。能够把读分摊到多个备库上,减小主库的压力,直到从库给主库形成了太大的负担,或者主从之间的带宽成为瓶颈为止。code
相比于主备架构,它有以下优势:blog
缺点:
上面两种架构都存在两个共同问题:
基于以上两个问题咱们须要一个能自动切换的架构,当主库出了故障后能自动将从库切换成主库,无需运维人员干预。 要实现主从切换架构必需要考虑一个关键点:必需要有一个机制能监测到数据库节点的运行状态,以此来决定是否切换。 这种架构咱们通常会引入一个第三方中介,数据库节点定时向第三方中介汇报本身的状态信息;或者第三方中介定时去数据库节点拉取数据库状态;
优势:
这里推荐你们了解一下mysql的MHA
架构,或者使用ZK、Keepalived本身搭建主从切换架构。
主主架构又叫主主复制,两台数据库都是主库,互相将数据复制给对方,客户端能够挑选任意一台数据库进行读写操做。
相比于主从切换,主主架构有以下优势:
可是容许向两台主数据库写入是一件很危险的事:
tb
都有1个字段col,数值为1。如A库执行 update tb set col = col +1
,B库执行update tb set col = col * 2
,最终执行完一台数据的值变成了4,另外一台数据库的值变成了3,并且没有任何复制错误,一旦出了问题须要很久才能定位。 因此主主架构必需要保证数据可以双向复制,对数据的设计有严格的要求,通常适用于那些临时性,可丢失、可覆盖的数据场景。欢迎关注个人我的公众号:JAVA日知录