大数据基础学习笔记(五)——云数据库架构

不同的云数据库产品采用的系统架构差异很大,这里以阿里巴巴集团核心系统数据库团队开发的UMP(Unified MySQL Platform)系统为例进行介绍。

UMP系统概述

•UMP系统是低成本和高性能的MySQL云数据库方案

总的来说,UMP系统架构设计遵循了以下原则:

•保持单一的系统对外入口,并且为系统内部维护单一的资源池(CPU、内存、带宽、磁盘等放在一个统一的资源池,供上部组件调用)

•消除单点故障,保证服务的高可用性(设置多个管家(Controller))

•保证系统具有良好的可伸缩,能够动态地增加、删减计算与存储节点

•保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保 应用和数据安全(多租户之间隔离,当一个用户使用过多资源时,对其进行限制,以免影响其他用户的使用)

UMP系统架构

UMP系统架构

Mnesia

•Mnesia是一个分布式数据库管理系统

•Mnesia支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少50个节点

•Mnesia的数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点来改进容错性

•Mnesia的这些特性,使其在开发云数据库时被用来提供分布式数据库服务

RabbitMQ

RabbitMQ

•RabbitMQ是一个工业级的消息队列产品(功能类似于IBM公司的消息 队列产品IBM Websphere MQ),作为消息传输中间件来使用,可以实现可靠的消息传送

•UMP集群中各个节点之间的通信,不需要建立专门的连接,都是通过 读写队列消息来实现的

Zookeeper

Zookeeper是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(比如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务

在UMP系统中,Zookeeper主要发挥三个作用:

•作为全局的配置服务器。UMP系统把运行的应用系统的配置信息完全交给Zookeeper来管理,把配置信息保存在Zookeeper的某个目录节点中,然后将所有需要修改的服务器对这个目录节点设置监听,也就是监控配置信息的状态,一旦配置信息发生变化,每台服务器就会收到Zookeeper的通知,然后从Zookeeper获取新的配置信息。

•提供分布式锁(选出一个集群的“总管”)。UMP急群众部署了多个Controller服务器,为了保证系统的正确运行,对于有些操作,在某一时刻,只能由一个服务器去执行,而不能同时执行。礼物,一个MySQL实例发生故障以后,需要进行主备切换,有另一个正常的服务器来代替当前发生故障的服务器,如果这个时候所有的Controller服务器都去跟踪处理并且发起主备切换流程,那么,整个系统就会进入混乱状态。因此,在同一时间,必须从集群的多个Controller服务器中选举出一个“总管”,由这个“总管”负责发起各种系统任务。Zookeeper的分布式锁功能能够帮助选出一个“总管”,让这个“总管”来管理集群。

•监控所有MySQL实例。急群众运行MySQL实例的服务器发生故障时,必须被及时监听到,然后使用其他正常服务器来替代故障服务器。UMP系统借助Zookeeper实现对所有MySQL实例的监控。每个MySQL实例在启动时都会在Zookeeper上创建一个临时类型的目录节点,当某个MySQL实例挂掉时,这个临时类型的目录节点也随之被删除,后台监听进程可以捕获到这种变化,从而知道这个MySQL实例不再可用。

LVS

•LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统

•UMP系统借助于LVS来实现集群内部的负载均衡

•LVS集群采用IP负载均衡技术和基于内容请求分发技术

•调度器是LVS集群系统的唯一入口点,调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器

•整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序

Controller服务器

•Controller服务器向UMP集群提供各种管理服务,实现集群成员管理 、元数据存储、MySQL实例管理、故障恢复、备份、迁移、扩容等功 能

•Controller服务器上运行了一组Mnesia分布式数据库服务,其中存储了各种系统元数据,主要包括集群成员、用户的配置和状态信息,以及用户名到后端MySQL实例地址的映射关系(或称为“路由表”)等

•当其它服务器组件需要获取用户数据时,可以向Controller服务器发送请求获取数据

•为了避免单点故障,保证系统的高可用性,UMP系统中部署了多台 Controller服务器,然后,由Zookeeper的分布式锁功能来帮助选出一个“总管”,负责各种系统任务的调度和监控

Web 控制台

Web控制台向用户提供系统管理界面

Proxy 服务器

Proxy服务器向用户提供访问MySQL数据库的服务,它完全实现了 MySQL协议,用户可以使用已有的MySQL客户端连接到Proxy服务器, Proxy服务器通过用户名获取到用户的认证信息、资源配额的限制(例如QPS、IOPS(I/O Per Second)、最大连接数等),以及后台MySQL实例的地址,然后,用户的SQL查询请求会被转发到相应的MySQL实例上。

除了数据路由的基本功能外,Proxy服务器中还实现了很多重要的功能,主要包括屏蔽MySQL实例故障、读写分离、分库分表、资源隔离、记录用户访问日志等

Agent 服务器

Agent服务器部署在运行MySQL进程的机器上,用来管理每台物理机上的MySQL实例,执行主从切换、创建、删除、备份、迁移等操作,同时,还负责收集和分析MySQL进程的统计信息、慢查询日志(Slow Query Log)和bin-log

日志分析服务器

日志分析服务器存储和分析Proxy服务器传入的用户访问日志,并支持实时查询一段时间内的慢日志和统计报表

信息统计服务器

信息统计服务器定期将采集到的用户的连接数、QPS数值以及MySQL实例的进程状态用RRDtool进行统计,可以在 Web界面上可视化展示统计结果,也可以把统计结果作为今后实现弹性的资源分配和自动化的MySQL实例迁移的依据

愚公系统

愚公系统是一个全量复制结合bin-log分析进行增量复制的工具,可以实现在不停机的情况下动态扩容、缩容和迁移