数据库高可用架构对于我们这些开发应用的人来说,是一个比较陌生的领域。它是建立在特定数据库产品之上的环境。只有当你有足够的了解时,你才能参与其中。虽然不能深入,但是可以通过一些经典的高可用架构来学习思路。据我所知有以下几种:MySQLReplicationMySQLClusterOracleRACIBMHACMPOracleASMMySQLReplicationMySQLReplication是通过异步复制多份副本来达到提高可用性的目的。常规的复制架构有以下几种:Master-SlavesMaster-MasterMaster-Master-Salves1)Master-SlavesMaster-Slaves是提高可用性最常用的方式,尤其是在互联网应用中,读远大于写,所以提高readavailability是其中第一个,Master-Slaves是让写操作集中在一个数据库Master上,然后Master会把更新的操作复制到其他数据库Slaves上,读操作全部发生在Slaves上。而且写作不会被打断。SlaveC恢复后,会自动同步丢失的数据,重新投入运行即可。可维护性非常好。但是万一Master出了问题就麻烦了,所以只解决读的高可用,不保证写的高可用。2)Master-Master为了解决上面提到的写的高可用,MySQL提供了Master-Master的复制架构,如下:一般来说是写到MasterA,MasterA再同步数据到MasterB。当MasterA出现问题时,会自动切换到MasterB。当MasterA恢复后,MasterB向MasterA同步数据3)Master-Master-SalvesMaster-Master-Salves是以上两种方案的组合。是一种同时提供读写高可用的复制架构,如下图所示:MySQLClusterMySQLCluster主要由三部分组成:SQLServer节点NDB数据存储节点监控和管理节点三个部门的结构如图所示下图中:这种分层也和MySQL本身的SQL处理和存储分离的架构有关。这样MySQLCluster就可以在SQL处理和存储两个层面实现高可用的复制策略。在SQL处理层面,更容易搭建集群,因为这些SQL处理是无状态的,可以通过增加机器来增强可用性。在存储层面,通过备份每个节点来提高存储可用性,类似于MySQLReplication。结构图如下:OracleRACOOracleRAC有点类似于MySQLCluster,但主要侧重于SQL处理层的高可用,而在存储方面不多。结构图如下:它的主要优点是对应用程序是透明的,通过Heartbeat检测它的可用性非常高。主要缺点是存储共享,存储扩展性不足。IBMHACMPIBMHACMP也类似于OracleRAC,主要用于双机互备,运行过程如下:1)两台服务器(主机A和B)作为双机系统运行在Hacmp环境中同时;除了正常运行自己机器的应用程序外,还充当对方的备份主机;3)两个主机系统(A和B)在整个运行过程中通过“心跳线”相互监控对方的运行情况(包括系统的软件和硬件)。操作、网络通信和应用程序运行等);4)一旦发现对方主机没有正常运行(故障),故障机上的应用程序会立即停止运行,本地机(故障机的备份机)会立即开机在自己的机器上启动故障机器上的应用程序,接管故障机器上的应用程序及其资源(包括已使用的IP地址和磁盘空间等),使故障机器上的应用程序在本地继续运行;5)应用与资源分配接管过程由哈软件自动完成,无需人工干预;6)当两台主机都正常工作时,也可以根据需要手动将其中一台主机上的应用切换到另一台主机(备份主机)上运行。OracleASMOracleASM主要提供存储的可扩展性,通过自动化的存储管理和后端可扩展的存储阵列实现高可用性。结构图如下:因此,可以尝试将OracleRAC和ASM结合起来,同时提供SQL处理和存储的高可用,这也是MySQLCluster要达到的目的。原文链接:http://www.db2china.net/home/space.php?uid=153935&do=blog&id=32997
