什么是高可用性?很多公司的服务都是24小时*365天不间断的。比如call center。这就要求高可用性。再比如购物网站,必须随时都可以交易。那么当购物网的server挂了一个的时候,不能对业务产生任何影响。这就是高可用性。
高可用性2个问题:
如何共享数据或同步数据?如何处理failover?
解释failover,意思就是当服务器down掉,或者出现错误的时候,可以自动的切换到其他待命的服务器,不影响服务器上app的运行。
对于分布式数据库系统。如何架构才能保证其高可用性呢?以mysql为例。
1. mysql replication with manual failover同步数据是采用mysql replication的方法,在mysql分表分块到主从已经解释。简单的说就是从库根据主库的日志来做相应的处理,保证数据的一致。通常还配合mysql proxy或amoeba等进行读写分离减少服务器压力。
manual failover,显然当master挂掉时,利用本方式是需要手动来处理failover,一般来说是将slave更改为server。
可用性达到: 98%-99.9+%
2. master-master with mmm manager(multi-master replication manager)同步数据的方式是multi-master replication manager,在mysql分表分块到主从解释,多主多从的设置,是一个loop环形,每个db既是前一个db的slave又是后一个的master。优势就在于,一个master挂掉,也还可以继续db操作。每个db都可以进行读写,分散压力。
可用性达到:99%
3. heartbeat/san处理failover的方式是heartbeat,heartbeat可以看成是一组程序,监控管理各个node间连接的网络。当node出现错误时,自动启动其他node开始服务。heartbeat必须解决的一个问题就是split brain,在网络中的一个node down掉后,每个node都会认为其他node down掉并尝试开始服务,因为产生数据冲突。
通过san来共享数据。
san:storage area network,是一种lan来处理大数据量的传输,提供了计算机和存储系统之间的数据传输。各个计算机组成的集群可以通过san共享存储。
mysql高可用解决方案(mysql ha solution)
当server1挂掉的时候,heartbeat监控到启动server2的服务。而因为采用了san来共享了存储,server2可以直接利用san网络中的数据。通过这种方式来提供高可用的解决方案。
可用性达到: 99.5%-99.9%
4. heartbeat/drbd处理failover的方式依旧是heartbeat。
同步数据使用drbd:distributed replicated block device(drbd)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。和san网络不同,它并不共享存储,而是通过服务器之间的网络复制数据。
mysql高可用解决方案(mysql ha solution)
可用性达到: 99.9%
5. mysql cluster(ndb cluster)mysql cluster也是由各个db node组成一个cluster,在这个cluster中由网络连接。可以自由的增减node的个数来对应数据库压力。
mysql高可用解决方案(mysql ha solution)
用synchronous replication(同步复制,要不同时成功要么同时失败)的方式来同步各个node的数据。然后对各个table进行partition,基于各个table的primary key。
采用了shared nothing architecture的结构。不共享任何数据,而是每个node都同步好各自的数据。这样即使是pc也可以轻松被加入到shared nothing的结构中。
share disk share nothing share memory
mysql高可用解决方案(mysql ha solution)
很难懂,我猜想mysql cluster的结构应该和hadoop中的hdfs(hadoop distributed file system)相似,按照key来做partition,然后将各个partition通过synchronous的方式同步的保存到各个datanode上,management node来监听管理cluster,通过sql node来访问datanode上的数据。
可用性百分比数据来源:
http://www.mysqlperformanceblog.com/2009/10/16/finding-your-mysql-high-availability-solution-–-the-questions/