热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探索乐视MySQL数据库架构与运维实践

一、乐视数据库概述1、数据库平台介绍我们数据库部门的数据库种类较多:有MySQL、Oracle、MongoDB、Redis等。从另一角度,可分为传统的DB(MySQL、MongoDB..)及云数据

一、乐视数据库概述

1、数据库平台介绍

我们数据库部门的数据库种类较多:有MySQL、Oracle、MongoDB、Redis等。从另一角度,可分为传统的DB (MySQL、MongoDB..) 及云数据库RDS。其中,MySQL在公司内部广泛使用,今天将就乐视MySQL的运维情况进行分享。

2、数据库产品现状

数据库

 

  • MySQL版本较多,有官方MySQL5.5、MariaDB10、PXC5.6等;
  • 架构有1主多从、1主多层、PXC(Percona-XtraDB-Cluster)等结构;
  • 硬件有SAS盘、SATA SSD,主要使用SATA SSD。

 

3、数据库架构

架构

Master-Slave 结构有:

  • 1主N从
  • 1主N从+MB (master-backup)
  • 1主N从+Relay

提个问题,图中1主N从+Relay结构,引入relay有什么优缺点?

  • 优点:在跨机房高可用时,布署一台同步用的relay 在异地机房可减少跨机房同步带宽。
  • 缺点:  增加了架构复杂度,主从关系变成多层树结构。若是使用不当,比较乱,易出错。我见过超过4层的主从,梳理关系就很麻烦,建议不超过3层。

4、数据库监控

我们的数据库监控以开源软件为主,有天兔Lepus、Prometheus、Open-Falcon等。

(1)天兔

  • Lepus是一个由Python+PHP开发的数据库企业级监控系统
  • 支持MySQL/Oracle/MongoDB/Redis等数据库的监控

对于不是特别大的DB规模,天兔监控就够用,也挺好用,可省去大量开发成本。

监控

(2)Prometheus

Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。它提供简单的网页界面、一个功能强大的查询语言以及HTTP接口等。

Prometheus

(3)Open-Falcon

我们用Open-Falcon来做服务器基础监控。对Open-Falcon进行了一些2次开发,如增加电话报警功能、IDC 的概念。

(4)作为补充还有Zabbix、微信告警等

此外,公司监控平台提供email报警,短信报警,电话语音报警。

作为补充,数据库平台增加了微信告警。 优点是方便,成本低。 重要性大于邮件的,不到电话或短信级别的可以用微信。

5、数据库备份

数据备份是非常重要的,我们的DBA也非常重视数据库的备份工作。在这我把备份概念略微扩展,我认为数据库实时从库也是一种备份。

实时从库

  • 大存储机器 单机多实例布署(20-30+)
  • 重要业务 异地机房从库
  • 多源复制从库

说明: 

  1. 我们找了一些大磁盘存储10T+,在具布署了30+左右的MySQL数据库,不提供线上服务。 这样相当于在一台机器上有30个DB的热备份。
  2. 对重要业务,进行异地跨机房从库制作。可避免单一IDC异常,引发故障。
  3. 乐视有一些统计分析数据库,使用MariaDB多源复制,一个实例同时同步多个主库。某些情况也可以使用分析库来恢复数据。

冷备份

  • xtrabackup 物理热备份
  • 全备+增备
  • Mount 挂载大存储
  • 定期清理历史备份

主要使用xtrabackup来物理备份MySQL。使用了全备+增备,每周至少一次全备,多个增备。为了简便,增备只做基于全备份的增备,并没有使用增备的增备。利用Mount 挂载大的存储 30T,做为备份存储。为避免存储容量满,会有脚本定期压缩,清理历史备份。

二、私有云RDS实践

1、私有云RDS项目背景

为什么做私有云RDS? 有各种理由: PaaS平台的流行,老板提出需要把数据库服务化、容器技术兴起、成本优化(硬件成本+管理成本)、用户体验等。

但是最真实原因:忙!

私有云

2、RDS介绍

乐视云RDS基于Docker + Mcluster 开发的一种高可用、可弹性伸缩的在线数据库服务(Relational Database Service,简称RDS)。

其中,Mcluster(MySQL Server Cluster)是MySQL数据库集群。

  • Mcluster是我们开发出的一种私有云MySQL集群
  • 基于PXC (Percona Xtradb Cluster)封装和调优
  • 真正的多主架构没有单点故障,高可用性
  • 是RDS的根基
  • 良好的扩展性

PXC官方的链接: https://www.percona.com/doc/percona-xtradb-cluster/5.6/index.html

3、私有云RDS架构

(1)架构图

私有云

RDS整体架构主要分为以下几大部分:

  1. Docker:乐视云RDS是跑在Docker容器内部
  2. Database:为具体的数据库。可以是MySQL,也可以是PostgreSQL等任何数据库
  3. Matrix:负责前端数据库创建、管理、监控、维护和相关资源调度
  4. BeeHive:负责资源的调度管理,BeeHive类似Kubernete
  5. Data Analysis:负责数据库日志的分析还有用户行为分析

(2)RDS架构图2

RDS

普通用户登录私有云平台matrix,申请创建RDS。  BeeHive计算分析机群中的资源情况,选择合适的3台机器布署Mcluster DB,同时还会额外布署一个VIP容器来做DB高可用和负戴均衡。

用户可以通过此VIP来访问MySQL。RDS管理员可通过matrix后台对平台全部的RDS进行管理、监控运行状态等。

4、Mcluster架构

Mcluster是乐视云基于PXC (Percona XtraDB Cluster)封装和调优的私有云MySQL集群。因为基于PXC封装,故Mcluster具有和PXC 相同的特点。

  • 多点读写机群中任一DB节点都可以写入
  • 并行复制可以多个线程复制,以事务为单位,多个事务同时并行推送到所有集群节点
  • 强一致性各节点数据强一致性
  • 高可用性单一节点故障不会影响机群的可用性
  • 兼容传统MySQL与传统MySQL几乎完全兼容,数据可以直接使用不需要任何转换

Mcluster和主从MySQL对比

MySQL

RDS界面

RDS界面——用户前端

类似阿里云、AWS的RDS用户平台页面。用户选择RDS的配置,主要是磁盘及内存,点下一步,就可以提交RDS申请。(每个用户可以免费建3个,超出需要DBA审核)

RDS

RDS界面——管理后台

RDS管理员可登录管理后台进行RDS管理,主要功能如下:

  • 用户、宿主机资源管理
  • RDS日常管理   申请审核,RDS信息查询,人员变更等
  • Docker 容器管理
  • RDS备份
  • RDS监控  RDS运行状态监控

DockerFile

DockerFilek完成的工作:

  1. 安装及配置MySQL
  2. 安装相关软件
  3. 启动mcluter-manager

Mcluster-Manager

大家可以看到在DockerFile最后一行,会启动mcluster-manager。

Mclustre-Manager功能:

  • tornado的web服务
  • 启动、停止初始化MySQL
  • 监控、管理MySQL

mcluster-manager安装在Docker容器中,用来管理MySQL。外部系统不直接操作MySQL,而是通过mcluster-manager API 调用。包括启动、停止、初始化、监控、备份、管理MySQL等功能。

RDS运用

私有云RDS上线后大大减轻了DBA工作量,降低了服务器成本和人力成本。 目前在乐视体系各子公司得到广范使用。

运维和坑

  • 数据库规范、流程非常重要
  • 私有云 可节省大量机器成本及人力成本
  • 私有云RDS产品设计、管理该异与公有云
  • RDS用户在线修改大表,引发故障
  • 多节点同时大量写,容易引起死锁
  • 组件较多,相互间依赖太强
  • 运维工具待完善 如宿主机器故障,恢复工作量大

数据库规范、流程非常重要,因为这是运维自动化的基础。我们吃过这个亏,数据库版本众多,并且安装目录不同,带来很大的麻烦。

使用私有云确实是可节省大量机器成本及人力成本,这个在乐视云是可以确认的经验,因为我们每台机器上安装了20-30个Docker,即跑了20-30个MySQL,较传统的MySQL布署节省大量成本。若是有个别业务写入量特别大,因为PXC多份写的原因,这时我们也可能迁移到传统的主从DB方式。

私有云RDS产品设计,管理该和公有云有区别。如曾经有RDS用户在线修改大表,引发故障。在公有云上,DBA不用关心此问题。 但是因为是公司内部用户,是私有云,故只能是我们DBA来处理,善后 :(  另私有云常还有产品树的概念,而公有云就不用类似的设计。

组件较多,相互间依赖太强。我们的RDS 系统做得还是有点太复杂,未来版本希望可减化。

运维工具待完善,如宿主机器故障,恢复工作量较大。 某一宿主机故障,要恢复20-30+的DB。当前是DBA手动执行脚本,还是有点low。

Q&A Q1:数据库备份主要是使用物理备份还是逻辑备份? A1:主要使用xtrabackup物理备份MySQL。

Q2:使用数据库增量备份,恢复起来很麻烦吗?

A2:乐视云使用基于全备的增备,并不会进行增备的增备。恢复起来并不麻烦。

Q3:PXC多主架构是否是采用一个节点写,其余节点读的架构?

A3:多点大量同时写数据,有时会有锁问题,所以我们主要是写一节点,多节点读。

Q4:如果写的节点挂了怎么办?

A4:我们前面有个架构图,用户通过Gblance来访问RDS。(相当于做了VIP高可用)

Q5:前面讲到广州到北京复制,你们走公网还是专线?

A5:我们使用专线。乐视云在全国有10多个机房。大机房之间走专线。

Q6:乐视云RDS是否存在着licence问题?

A6:不会有licence问题。我们的RDS是基于Docker + MySQL开发,而MySQL、Docker都是开源软件,没有licence风险。

Q7:乐视云RDS会开源吗?会对外提供RDS服务么?

A7:目前暂无开源计划,只用在集团内部提供私有云服务,但依公司发展战略,不排除未来提供公有云RDS的可能。


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 针对MySQL Undo空间满载及Oracle Undo表空间溢出的问题,本文详细探讨了其原因与解决策略。首先,通过启动SQL*Plus并以SYS用户身份登录数据库,查询当前数据库的UNDO表空间名称,确认当前状态。接着,分析导致Undo空间满载的常见原因,如长时间运行的事务、频繁的更新操作等,并提出相应的解决方案,包括调整Undo表空间大小、优化事务管理、定期清理历史数据等。最后,结合实际案例,提供具体的实施步骤和注意事项,帮助DBA有效应对这些问题。 ... [详细]
  • 阿里云MySQL与Oracle数据库的主从复制技术详解 ... [详细]
author-avatar
mobiledu2502890883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有