解析Facebook对MySQL数据库的深度优化
发布时间:2021-12-24 14:17:12 所属栏目:优化 来源:互联网
导读:Facebook拥有世界上最大的MySQL数据库集群,其中包含了成千上万台服务器,这些服务器分布在跨越两个大洲的多个数据中心里。 通过几乎将所有的任务全部自动化,这个集群只有一只非常小的MySQL DBA团队来进行管理,集群甚至可以自己运行。而实现这种自动化的核
Facebook拥有世界上最大的MySQL数据库集群,其中包含了成千上万台服务器,这些服务器分布在跨越两个大洲的多个数据中心里。 通过几乎将所有的任务全部自动化,这个集群只有一只非常小的MySQL DBA团队来进行管理,集群甚至可以自己运行。而实现这种自动化的核心组件之一就是所谓的MPS系统,即“MySQL Pool Scanner”。 MPS是一个大部分用Python写的复杂状态机。它能够代替DBA执行很多例行任务,并且可以让我们以很少或是不施加人为干预就能执行批量维护工作。 单一数据库结点 每个实例在驻留于不同服务器上的其他实例上都有几个副本,而这些服务器通常是在不同数据中心里的。这样做主要是为了实现两个目的: 高可用性:如果一台服务器宕机了,我们在其他地方还有可用数据来提供服务。 性能:不同的地理位置拥有它们自己的副本,这样便可以使读取服务本地化。 这里是一个简单的replica set示意,它的每个服务器都只有一个实例,并且其他实例为空(我们称这些是spares): 一个服务器本质上是实例容器,所以现实中的情况可以会变得更为复杂。 例如,一个单一服务器拥有一个主实例也可能拥有一个不同主实例的从实例,像下面这样: 这里MPS依赖于两个重要的“building block”操作: 1. 创建一个副本/放置服务器 第一个building block操作是在一台不同的主机上创建一个实例的副本。我们使用Xtrabackup的修改版本来执行大多数复制操作。如果我们在复制成功完成后移除实例,替代过程也是同样的操作。 首先,系统为此操作分配一个空闲实例。我们选择其中一个从实例或主实例并复制其数据到新分配的空闲实例。下表显示了这一替代操作,它在复制完成后将实例移除: 2. 升级主实例 第二个building block操作是将一个不同的实例升级为一个replica set的主实例。 在升级过程中,我们首先选择一个目标,停止写入到replica set,将从实例改为从新的主实例进行复制,并恢复写入。在下图中演示了一个删除操作,即在升级成功完成之后旧实例会被丢弃。为简单起见,下面的replica set只包含三个实例: 这两个操作对于大多数使用MySQL的公司来说通常是很复杂的过程,而在Facebook,它不需要人为干预的情况下就已经可以由MPS快速而安全的全自动化运行。 主机管理和状态 通过上文我们已经解决了基本问题,现在可以利用这些building block来探索更为抽象的概念。 MPS会连接到一个存有当前所有数据库主机状态和元数据的库,这个库还包含了当前和过期MPS的复制操作。注册表是由数据库服务器自身进行管理,因此数据库集群和MPS可与不需要安装一个复杂的应用服务器。MPS本身实际上是无状态的,它在自己的主机池上运行并依赖于上述的库来进行状态管理。而状态是分别并行处理的。 当一个服务器在数据中心被“唤醒”(连接并配置好一个新的机架),它会每隔几分钟运行一个本地代理。此代理会执行以下步骤: 收集关于它自身的数据。(我在哪里?我有什么硬件?我正在运行什么版本的软件?) 根据问题对主机进行分类。(是否是在active的集群中被唤醒的?磁盘运转是否正常?闪存卡是否正常?) (编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐