大规模数据库运维实践 – U刻
技术分享/

大规模数据库运维实践

  • 大规模数据库运维实践

    栏目:技术分享

    引 言

    数据是一个企业的生命,而数据库的运维对于企业运营来说更是重中之重。随着互联网和云计算的发展,企业纷纷加大了对IT运维的投入,数据库运维最受重视。因为数据库运维水平的高低,将直接影响企业的业务发展。
    近日,UCloud结构化存储研发部副经理吴斌炜在O’Reilly Velocity 2015大会上发表了主题为“大规模数据运维实践”的演讲,分享了UCloud在大规模数据库运维方面的实践。

    大规模数据库运维实践.webp
    图:UCloud结构化存储研发部副经理吴斌炜

    本次分享的内容主要基于UCloud UDB(UCloud DataBase)产品的运维实践,针对数万个数据库实例、数千台物理机的数据库规模而谈的。UCloud UDB支持在线部署,秒级创建高性能实例,支持API接口管理,支持关系型和非关系型数据库,目前完全兼容MySQL和MongoDB协议。

    数据库运维带来的挑战

    常规数据库运维的挑战

    一般情况,几个到数十个数据库的运维主要面临数据安全、可用性和性能三大挑战。

    大规模2.webp
    图:常规数据库运维

    1. 数据安全。在数据库的运维中,数据安全是最重要的,数据是企业的生命,磁盘等硬件的故障、运维人员的误操作都会引发数据安全问题,而数据丢失很有可能会为企业带来灾难性的损失,不容小觑。
    2. 可用性。磁盘、内存等硬件故障及误操作都会影响数据库的可用性,运维人员需要做的就是尽可能地缩短因为这些故障引起的数据库不可用时间。
    3. 性能。这里指的是数据库本身的性能,常见的方法是对硬件配置、磁盘介质(SATA盘到SAS盘再到SSD盘)、配置文件和SQL语句进行优化。

    对于常规的数据库规模,故障事件发生的频率一般是在几天/次甚至几周/次,处理方式也比较简单,主要依靠运维人员的个人经验通过脚本或人肉处理故障,只需要一个专业的运维人员和一个专业DBA就可以解决。

    大规模数据库带来的挑战

    在数据库规模增大时,对单个数据库实例来说,数据安全、可用性和性能还是最重要的三个指标。当机器的规模增长到数万个数据库时就会引入新的挑战,如备份系统的容量、负载、数据安全等因素可能会成为新瓶颈的挑战。

    大规模3.webp
    图:大规模数据库运维

    同时,故障事件的频率会大大提高,几十次/天甚至几百次/天都很常见,如果采用常规的运维模式,将导致运维成本和管理成本的急剧上涨,特别在突发事件时。大规模运维场景下带来的成本问题怎么破?如何解决运维人员和提升物理资利用率呢?这些都是急需解决的关键问题。

    大规模数据库运维经验

    运维自动化可以提升运维的效率,有效的资源管理和隔离可以提升资源的利用率和减少资源之间因为竞争出现的性能问题,优秀的架构设计可以从源头上预防故障的发生,提高服务的可用性。以下就从这三个方面分别进行介绍。

    运维经验1:运维自动化

    人类的进化史就是工具进化史,工具从低级到高级、从手动到自动,以此提高生产效率,而运维工作同样也是这样的一个进化过程——将运维工作交给系统和工具,由手动变为自动。可视化、API化、批量化和智能化是自动化运维的四个比较重要的指标。

    大规模4.webp
    图:可视化创建数据库实例

    1. 可视化可视化是运维自动化最基本的要求,图形化操作是人类最自然的操作方式。最常见的运维系统的用户有DBA和运维,因为两者的视角和操作不一样,可以分别实现两套可视化的系统。
      • 控制系统:专门提供DBA使用,主要包括DBA常见的操作,如创建DB、搭建主从集群、备份和登录数据库等。
      • 运营管理系统:专门提供运维人员使用,主要方便运维人员获取运营数据、监控数据和执行运维操作。1. 常见的运营数据包含申请的DB数、物理机的数量以及周期内的物理资源和增加的DB实例数,以便于资源的合理规划。2. 运维人员需要立体化的监控数据, 其中包括IDC层的数据、系统层的数据、用户层的数据、应用层的数据和功能特性层面的数据等,以方便运维人员分析现网的故障情况。3. 运维操作需要结合运维场景设置,比如机器部署、故障迁移、在线扩容、告警通知和机器下线等。
    2. API化API化可以借助API实现,将常见的操作API化,结合监控数据还可以在程序中实现DB的自动扩容、自动迁移、自动清理日志和自动构建集群等。
    3. 批量化批量化的操作很多时候是通过工具来实现的,命令行下的操作有时会让运维人员感觉更加顺畅,大大加快运维人员的效率,比如批量数据回档的工具、批量数据库文件修复工具和批量启动DB工具,建议批量操作的工具尽量能够做到参数的简单化和通用化。
    4. 智能化实现智能化可以从资源的智能化分配和运营数据分析等方面实现。资源系统保存着整个集群的资源使用情况,包括内存、磁盘、CPU、IO和带宽等信息,根据这些资源的使用情况合理地分配资源,使资源能够合理的利用。

    运营数据的分析包含业务数据、监控数据和日志等数据的分析,如根据实例慢查询日志的分析可以判断当前DB资源是否存在瓶颈,如果分析结果显示实例的磁盘和内存资源存在瓶颈,则可以进行在线扩容操作。

    运维经验2:资源隔离

    资源的有效隔离可以减少资源之间的竞争,减少因为资源竞争出现的性能问题。Set化隔离可以提升系统的灰度能力,减少出现全局故障的可能性,是主要的资源隔离方式。

    1. 网络隔离:通过SDN技术按照用户对网络进行了隔离,可实现网络的二层隔离。
    2. SET管理:建议对资源按SET进行隔离、灰度升级和故障SET内隔离。
    3. 物理资源隔离:对于隔离,我们经历了 VM、cgroup到Docker的过程,目前我们利用Docker容器技术实现网络隔离、IO隔离、CPU隔离和内存隔离。

    大规模5.webp
    图:Docker实现隔离

    运维经验3:架构设计优化

    1. 高可用架构:使用中间件和集群来提升数据库的可用性。
    2. 跨机房容灾:实现跨机房的主从同步,减少整个机房的故障率,避免跨机房的故障影响数据库的可用性。
    3. 分布式对象存储系统:使用分布式对象存储系统,利用其容量无上限的特性,实现数据多份备份和跨机房容灾,不用担心自然灾害造成的数据丢失。

    结语:

    大规模的数据库为企业IT运维带来了极大的挑战,常规的运维模式已经无法满足需求,自动化运维能力、有效的资源隔离和优秀的架构设计变得非常重要。本文就自动化运维、资源隔离和架构设计优化三个方面给出了一些个人的经验,主要是一些方法论,希望对数据库运维的同学有帮助。