1.1.3 冗余
实现可靠性的一个方法是冗余,即在系统里使用两个或多个组件扮演相同角色。其目的是系统在需要替换组件的情况下,准备一个可以用来替换的组件。这种实现冗余的方式也可以称为“热”备份,即冗余组件与主要组件并行参与系统运行,当检测到主要组件发生故障时,系统会自动切换到冗余组件。数据库服务器会经常使用到冗余。MySQL在冗余方面具有明显的优势,可以利用复制实现数据库服务器的冗余。
MySQL的复制使用起来并不复杂,它的原理也非常简单。用户需要设置第二台数据库服务器以保存数据副本(从服务器),它将从原始服务器(主服务器)获取所有的数据更改,并将更改应用到从服务器。因此,系统可以在从服务器上获得一个与主服务器完全一致的数据副本。复制是构建InnoDB Cluster的基础组件之一。理解MySQL的复制功能可以让读者更好地了解InnoDB Cluster的工作方式,同时也会理解InnoDB Cluster的复杂程度。
通常情况下,冗余可以通过额外的专用硬件来实现。例如,服务器使用UPS,应用系统使用多台服务器,系统使用多个数据采集节点,等等。数据库管理员或者系统架构师必须清楚在哪些节点配置冗余,在发生故障时可以使用这些节点的副本来保证系统的持续可用。
冗余的复杂性取决于成本的投入,例如,系统可以准备一个离线的备用组件,当系统的正常组件发生故障时,用户可以手动激活离线的组件。离线的备用组件具有启动速度慢,需要人工干预等缺点,但如果用户的系统可以接受这个程度,并且希望消耗的成本不高,则可以采用该方案。或者,用户可以采用一个在线的备用组件,当正常组件发生故障时,人工进行切换。相对于使用离线的备用组件方案,它的切换时间短,但它的实时在线特征会增加日常运营的成本。此外,用户还可以通过编写应用程序代码,来实现自动检测故障并切换到备用组件等功能。该方案虽然速度快、效果好,但是它所需要的成本也会更多(开发应用程序、备用组件的日常运维,等等)。因此,用户需要根据自己的需求和能力来调整冗余,可以从使用简单的离线备用组件开始,随着系统的发展,添加使用更复杂的组件。