初始云数据库系统架构UMP

UMP概述

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

UMP系统架构设计遵循了以下原则:

  • 保持单一的系统对外入口,并且为系统内部维护单一的资源池
  • 消除单点故障,保证服务的高可用性
  • 保证系统具有良好的可伸缩,能够动态地增加、删减计算与存储节点
  • 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据安全
UMP系统架构

UMP系统中的角色包括:

  • Controller服务器
  • Proxy服务器
  • Agent服务器
  • Web控制台
  • 日志分析服务器
  • 信息统计服务器
  • 愚公系统

依赖的开源组件包括:

  • Mnesia
  • LVS
  • RabbitMQ
  • ZooKeeper

Mnesia
  • Mnesia是一个分布式数据库管理系统
  • Mnesia支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少50个节点
  • Mnesia的数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点来改进容错性
  • Mnesia的这些特性,使其在开发云数据库时被用来提供分布式数据库服务
RabbitMQ
  • RabbitMQ是一个工业级的消息队列产品(功能类似于IBM公司的消息队列产品IBM Websphere MQ),作为消息传输中间件来使用,可以实现可靠的消息传送
  • UMP集群中各个节点之间的通信,不需要建立专门的连接,都是通过读写队列消息来实现的
Zookeeper

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

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

  • 作为全局的配置服务器
  • 提供分布式锁(选出一个集群的“总管”)
  • 监控所有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分析进行增量复制的工具,可以实现在不停机的情况下动态扩容、缩容和迁移

UMP系统功能

UMP系统是构建在一个大的集群之上的,通过多个组件的协同作业,整个系统实现了对用户透明的各种功能:

  • 容灾
  • 读写分离
  • 分库分表
  • 资源管理
  • 资源调度
  • 资源隔离
  • 数据安全
容灾

•为了实现容灾,UMP系统会为每个用户创建两个MySQL实例,主库和从库

•主库和从库的状态是由Zookeeper负责维护的

•主从切换过程如下:

•Zookeeper探测到主库故障,通知Controller服务器

•Controller服务器启动主从切换时,会修改“路由表”,即用户名到后端MySQL实例地址的映射关系

•把主库标记为不可用

•借助于消息中间件RabbitMQ通知所有Proxy服务器修改用户名到后端MySQL实例地址的映射关系

•全部过程对用户透明

•宕机后的主库在进行恢复处理后需要再次上线,过程如下:

•在主库恢复时,会把从库的更新复制给自己

•当主库的数据库状态快要达到和从库一致的状态时,Controller服务器就会命令从库停止更新,进入不可写状态,禁止用户写入数据

•等到主库更新到和从库完全一致的状态时,Controller服务器就会发起主从切换操作,并在路由表中把主库标记为可用状态

•通知Proxy服务器把写操作切回主库上,用户写操作可以继续执行,之后再把从库修改为可写状态

读写分离

•充分利用主从库实现用户读写操作的分离,实现负载均衡

•UMP系统实现了对于用户透明的读写分离功能,当整个功能被开启时,负责向用户提供访问MySQL数据库服务的Proxy服务器,就会对用户发起的SQL语句进行解析,如果属于写操作,就直接发送到主库,如果是读操作,就会被均衡地发送到主库和从库上执行

分库分表

UMP支持对用户透明的分库分表

当采用分库分表时,系统处理用户查询的过程如下:

  • 首先,Proxy服务器解析用户SQL语句,提取出重写和分发SQL语句所需要的信息
  • 其次,对SQL语句进行重写,得到多个针对相应MySQL实例的子语句,然后把子语句分发到对应的MySQL实例上执行
  • 最后,接收来自各个MySQL实例的SQL语句执行结果,合并得到最终结果
资源管理
  • UMP系统采用资源池机制来管理数据库服务器上的CPU、内存、磁盘等计算资源,所有的计算资源都放在资源池内进行统一分配,资源池是为MySQL实例分配资源的基本单位
  • 整个集群中的所有服务器会根据其机型、所在机房等因素被划分多个资源池,每台服务器会被加入到相应的资源池中
  • 对于每个具体MySQL实例,管理员会根据应用部署在哪些机房、需要哪些计算资源等因素,为该MySQL实例具体指定主库和从库所在的资源池,然后,系统的实例管理服务会本着负载均衡的原则,从资源池中选择负载较轻的服务器来创建MySQL实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值