1.2.2 MySQL高可用的实现
MySQL高可用基于复制功能实现,复制是MySQL实现冗余、可伸缩性和容错的基础。MySQL复制是在一个或多个MySQL实例中生成和复制多个数据副本的过程。当一个数据库实例发生故障时,它提供的服务必须能够通过另一个路由来访问和使用。在数据库中,可以使用单独的进程管理全部事务,或者使用多个进程管理全部事务。当由一个单独的进程管理全部事务时,用户应该为活动的进程提供一个备用进程,以应对可能发生的故障,还必须确保能够进行无缝的故障转移,并且能够检测到故障。
MySQL是一个单进程、多线程的数据库服务器,它体现在主机的操作系统中是一个mysqld进程。MySQL通过使用复制可以在多台服务器上实现多个副本,每个副本具有一个单独的mysqld进程管理事务,当主服务器的mysqld进程发生故障时,可以切换到其他从服务器的mysqld进程,由其继续提供数据服务。冗余和伸缩性均由MySQL复制实现。MySQL可以通过手动操作、mysqlfailover、MySQL Router或第三方工具(例如虚拟IP软件等)来实现容错。
MySQL的组复制是基于经典的MySQL复制实现的。在复制的基础上,组复制提供了数据写入的扩展性和自动容错功能。多个组成员可以实现数据同时写入,并且自动进行验证,当组成员发生故障时,成员的角色可以自动转移进行容错,继续提供数据服务。
InnoDB Cluster则是在组复制的基础上,加入了MySQL Shell和MySQL Router等组件,容错时间更短,可以实现更高级别的高可用。
InnoDB ClusterSet由多个InnoDB Cluster组成,在实际使用中应优先考虑可用性而不是数据一致性,以最大限度地提高容灾能力。
MySQL NDB Cluster是MySQL的姐妹产品。与通常意义上的MySQL不同,它是一款使用非共享存储的内存型数据库,可以处理海量的并发操作,并能够实现高达99.999%的可用性级别。