转 当当网资深DBA:DB运维四大现代化的实现
位好,今天我的主题是 《DB运维的四个现代化》 ,看标题就能明白,是关于DBA自动化运维平台的事情。
http://dbaplus.cn/news-21-855-1.html
主要是分享下我在当当想到做到的一些事情,很多都是兄弟们一起努力的结果, 这篇文章也是对我们工作进行一次总结,整个平台的实现方法并没有用到什么高大上的框架,有亮点的地方我会着重说明,当然,有兴趣了解的同学,直接提问就好。
本次分享将分为以下三部分进行:
解密DB管理四大现代化
实例分析实践痛点
从信息展现开始一步步解决
一DB管理四大现代化
首先先聊下DB在项目中的地位:
99%的软件,处理的数据最终是需要落地
从人员结构来说,DBA支持公司多项目
数据要安全,数据要及时,权限要收口
于是,DBA的工作经常成为项目进展的瓶颈。
然而,在错综复杂的电商环境中, 数据库又独具特色。一提到电商: 自然想到,双11,秒杀,大促等等, 于是下面3个特点也就不言而喻。
在当当网,我们的DB规模是这样的,数据截止到2016年3月,而现在又在增长……T_T
因此就会有这样的工作需求:
商品单品项目组、新来的开发同学,需要了解单品项目的表设计结构;
购物车项目管理的同学需要同步最新数据,检查项目运行效果;
订单项目的同学需要检查实时数据,监控订单量(授权给radar监控数据源);
测试的同学需要检查回归测试的数据效果。
二实例分析实践痛点
商品分类项目程序出现了bug,导致分类错误, 最有效的办法莫过于:DB中需要修改几条数据。
项目扩容,需要部署从库,项目迁移,需要切换到从库;
硬件故障,需要切换;
所有项目大大小小 500+个DB实例 (ノ゚⊿゚)ノ So,不理想的状态下, 以上工作×500倍;
DBA负责按工单导出数据,工单多了就放开查询权限,
人员流动(←_←),于是一堆不明权限,数据安全无法保证。
于是,DBA们也在思考,和开发项目拼人肉数目,肯定不切实际,我们需要自动化的平台。
根据以上问题,我们做了几个选择:
哪些信息是可以共享给开发部门的。
哪些操作DBA可以自动,符合标准的进行。
用什么方法尽可能保证数据的实时准确性
用下图来回答:
平台主要分为:信息收集展现,DBA管理工具两大部分。
数据库的元数据可以被全体技术部乃至业务部访问。但数据细节,只能有限访问(权限申请需要经过审批)这些只读的访问,一次授权,即可自助进行。
对于数据库管理(部署,备份,恢复),DBA也要编写脚本,按标准进行。后面会尽量详细介绍。
三从信息展现开始一步步解决
1、信息收集展现
先说明下,关于数据库元数据的展现:
上图可见,借用phpmyadmin工具(右图),对于元数据的展现还是很完美的。完全可以替代左图的命令行模式。
当然,这里的phpmyadmin是经过修剪功能的版本,去掉了诸多管理,展示数据细节的部分。
对于申请过权限的用户,才可以访问到受限的数据细节。
同时对于数据本身,也进行了限制性修改 ,仅能访问 500行的数据:
对于元数据也进行了抓取和归档(主要用shell+python定时执行 实现),这样做有几个好处:
1、便于在整个公司项目范围内,宏观的、快速的、模糊的查找想要的元数据。
2、基于元数据的定期归档,可得出数据空间变化的规律。
例如我们平台的如下功能:
3、还可以对元数据进行统计,迅速得出那些是我们急需调优的目标(需水平拆分的大表,需垂直拆分的宽表,需要删除的重复索引,需要扩容的autoid等等)。
例如,我们平台的如下功能:
展示出来就是这样(图表展示我采用highchart,MySQL只负责用SQL吐数据,展示的活,就交给highchart 了):
4、管理服务器列表,对于所有服务器的固定端口(数据库端口)进行扫描,及登陆测试,获取库名,角色(主or从),等信息。
对于性能和监控数据,采用同样的方法进行抓取和分析,(数据源取自zabbix监控数据库)
这样做的好处是:
看出近期那些性能指标频繁报警,需要扩容,需要调优
那些服务器是重载,那些却过分规划即使大促也是轻载。
(上图屏蔽的主要是一些ip和库名信息.)
2、DBA管理工具
这部分我们也在进行中,目前DB的安装/部署的基本已经实现脚本化,主要包括下面的脚本。
下面是部分脚本的功能说明:
该脚本的主要功能:
根据标准初始化完成的系统,自动安装相关软件包,备份时部署在集群的从库,且无域名的从库优先,
关于备份空间的判断,先根据数据量估算本次备份所需空间,如果备份空间满足,则备份到该从库的本地,如果不满足则集中备份到大空间服务器。
备份会保留多个备份周期的备份集. 如空间吃紧,备份前,则会优先删除日期靠前的备份集。
该脚本的主要功能:
初始化MySQL时候生成环境检查
根据内存大小动态计算buffer pool大小以及随机值server-id
innoDB_buffer_pool_size=内存*80%
server-id=[IP点分十进的后两段]+三个随机数
公共用户权限导入以及导入后验证
该脚本的主要功能:
从备份文件{logical,xtrabackup}恢复一个实例;
从一个从库直接{logical,xtrabackup}建立一个从库;
从一个主库直接{logical,xtrabackup}建立一个从库。
对于日常比较频繁执行的DML语句,通常处于开发部门修改数据解决线上bug的问题,我们采用了inception的部分功能,结合已经收集到的服务器列表.,只需指定将SQL即可,平台会自动送到该库指向的主库上执行DML语句。
采用inception的功能主要是对SQL的审核功能,例如,如果该SQL的影响行数超限,则终止执行。
平台则对SQL执行进行历史记录。
DBA管理工具这边也在逐步完成对上述管理脚本的平台化。
我的分享基本就是这些, 关于平台及工具的代码,我们也在逐步做脱敏工作,争取形成一个可以开源出来的产品, 希望对大家有些启发,也希望抛砖引玉。
Q&A
Q1:目前的高可用是用什么方案?
A1:我们预期用MHA,目前还未有这方面的架构。
Q2:你们是如何进行跨机房的管理的?slave的延迟如何保证在业务可忍受的范围内的?
A2:slave延迟的问题主要从开发方面分解大事务解决。跨机房方面我们目前也尽量避免跨机房的主从架构搭建。
Q3:如何设计MySQL架构来满足如抢购类的高并发的业务?
A3:大促、秒杀业务这些方面,主要靠提前压测,并观察性能瓶颈,扩容和回收也是以性能(cpu,网络连接,磁盘)为依据来进行。
Q4:目前应对大促,秒杀业务,数据库层面扩容缩容,能否给出一些建议。
A4:这方面需要时间来改进,我们目前还很不完善,其实很多功能也是当当架构特色来设计的。即使开源也是为内部版本控制考虑。所以还未有这份精力配合。
Q5:如果要分库分表,推进这些东西开发会配合吗?
A5:我们架构部有这方面的中间价,叫sharding-JDBC,可以关注下github上的项目。
Q6:MySQL一个表最多存多少记录算大数据?有哪些合适的分表方式?
A6:存多少不重要,关键要看怎么使用它,是读多,写多,还是改多,对于一般的系统,最起码把读写分离开吧。
Q7:请问你们在线上如何解决DDL和批量delete or update 100万级的数据的?
A7:DDL是靠pt-online-schema-change工具,百万级的delete也是靠这个工具分配进行的。
转 当当网资深DBA:DB运维四大现代化的实现的更多相关文章
- 5年从DBA到运维架构总监 — 做对了什么
本文来自宝宝树运维总监刘秋岐的分享.随着MySQL的不断成熟,逐渐被用于更多大规模的网站和应用了,比如说当前最火的Facebook.淘宝.阿里.兰亭集势.宝宝树这样的大型的网站都在使用MySQL数据库 ...
- 15-MySQL DBA笔记-运维管理
第15章 运维管理 随着各种技术的快速发展,现今的DBA可以比以前的DBA维护多得多的数据库实例.DBA已经越来越像一个资源的管理者,而不是简单的操作步骤执行人.本章将为读者介绍规模化运维之道.首先, ...
- 14-MySQL DBA笔记-运维技巧和常见问题处理
第14章 运维技巧和常见问题处理 DBA的成长,离不开对各种问题的处理.本章将为读者介绍一些运维技巧和常见问题的处理方法.我们需要意识到,别人的经验代替不了自己的经验,所以,多实践.多处理问题,最终会 ...
- FortiGate外网IPSec链路及运维专线链路到个别网段不通
1.现状: 如图,用户网段有192.168.50.0/24.192.168.51.0/24和192.168.52.0/24.192.168.53.0/24.在防火墙上有静态路由到运维专线的10.160 ...
- 一名网工对Linux运维的一次经历
我是一名名副其实的网络工程师,驻场于某市数字化城乡管理指挥中心(简称数字城管),主要针对中大型网络系统,路由.交换机.存储.小型机等设备进行维护,主要工作职责主要分为两种: 对网络系统中的网络设备(路 ...
- MGR 架构 ~ DBA相关运维管理
一 简介:简述DBA相关管理MGR工作 二 监控 1 采用proxysql相关创造的view视图作为监控指标 三 备份 1 利用xtrabackup在读节点进行备份 2 设置binlog保留日期 四 ...
- SQL Server DBA日常运维语句
1.检查数据库完整性 dbcc checkdb(Portal) 检查数据库完整性checkdb Portal的 DBCC 结果. Service Broker 消息 9675,状态 1: 已分析的消息 ...
- 运维DBA要不要学python
运维DBA要不要学python 我个人认为是:要 现在python在运维数据库的工作中主要用在 1.编写一些运维脚本 2.编写运维管理平台 3.研究互联网大厂的运维脚本/工具并应有 特别是运维开源数据 ...
- Linux云计算运维-MySQL
0.建初心 优秀DBA的素质 1.人品,不做某些事情2.严谨,运行命令前深思熟虑,三思而后行,即使是依据select3.细心,严格按照步骤一步一步执行,减少出错4.心态,遇到灾难,首先要稳住,不慌张, ...
随机推荐
- droidcon 北京2016安卓技术大会——安卓领域国际盛会
目前droidcon国际技术大会已成为安卓领域全球最有影响力.规模最大的技术大会,每年在世界各地举办,横跨四大洲,超过上万人次参加. droidcon国际技术大会于2009年由一个Android爱好者 ...
- html中的a标签的target属性的四个值的区别?
target属性规定了在何处打开超链接的文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者 ...
- INSTALL_FAILED_NO_MATCHING_ABIS
在运行写好的cocos的demo时候,安装出现以下问题: 后来发现是因为自己用cygwin生成的x86的.so文件跟自己的魅族3机器CPU不适配!!! 参考:http://stackoverflow. ...
- HttpClient, HttpClientHandler, and WebRequestHandler介绍
注:本文为个人学习摘录,原文地址:https://blogs.msdn.microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-an ...
- hdu 1022 Train Problem I(栈)
#include<iostream> #include<vector> #include<cstring> #include<string> #incl ...
- delphi 容错提示语句汇总
打开文件失败的容错提示语句 try if OpenDialog1.Execute then begin MyList.Clear; MyList.LoadFromFile(OpenDialog1.Fi ...
- LeetCode OJ 1. Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- #include 和 #pragma comment 的相对路径起点
#include 是以当前文件所在路径为当前目录 #pragma comment 是以当前工程所在路径为当前目录 #include "../../../../ThirdParty/Inclu ...
- Openjudge-计算概论(A)-年龄与疾病
描述: 某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理. 输入共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄.输 ...
- Openjudge-计算概论(A)-谁考了第k名
描述: 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. 输入第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n). ...