加入收藏 | 设为首页 | 会员中心 | 我要投稿 衢州站长网 (https://www.0570zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

京东数据库智能运维平台建设之路

发布时间:2018-09-01 01:52:38 所属栏目:建站 来源:京东商城技术架构
导读:副标题#e# 运维自动化来源于工作中的痛点,京东数据库团队面对的是商城成千上万的研发工程师,这种压力推动我们不断变革,然而变革不是一蹴而就,也经历过从手工到脚本化、自动化、平台化、智能化的艰难转变,所以说是需求在驱动运维体系的建设,而运维自动

递增资源是指资源的使用率不会再短时间之内出现严重的波动,而是会缓慢增加,并且支持递增,不会出现减少的情况,这种资源主要包括硬盘。ContainerDB对于不同的资源采取了不同的调度策略。针对于瞬时资源,ContainerDB为每个数据库分配三种标准:

  • 下限:2C/4G,上限:4C/8G  
  • 下限:4C/8G,上限:8C/16G 
  • 下限:8C/16G,上限:16C/32G 

每个容器分配的初始资源为标准的下限值,当数据库服务出现CPU负载过高或者内存不足时,会尝试申请多于下限的CPU或者内存,但绝对不会超过上限,待负载恢复后释放多申请的资源,直至恢复至CPU和内存的下限为止。

京东数据库智能运维平台建设之路

针对递增资源:磁盘,在业务接入之初,统一分配64G的硬盘,每当当前磁盘使用率达到80%,且没有达到256G上限的时候,则进行垂直升级;若容器当前磁盘达到了256G上限则进行在线Resharding。

垂直升级:首先会进行资源check,看宿主机是否有足够的剩余硬盘资源进行垂直升级,若check通过,则会在宿主机施加全局资源锁,并对硬盘进行垂直扩容再增加64G。若check不通过,则在宿主机上提供一个硬盘大小为:磁盘容量+64G大小,CPU和内存与当前容器相同的新容器,并将数据库服务迁移到新的容器上。垂直升级是瞬间完成的不会影响数据库服务。

在线Resharding:申请两个新的Shard,新Shard中的数据库Container的硬盘、CPU和内存标准与当前Shard中的完全一致,根据当前Shard中的数据库主从关系,对新Shard中的所有数据库重建MySQL主从关系,然后启动Schema信息拷贝和过滤复制,最后更新路由规则并将读写流量切换到新的Shard上,将旧的Shard资源下线。

无论是垂直升级还是在线Resharding,都需要注意一个问题:在保证每个分片的Master在主机房的前提下,尽量不要将所有的资源都分配在一个宿主机/机架/机房,ContainerDB提供了强大的亲和/反亲和性资源分配能力。目前ContainerDB的亲和/反亲和性策略如下:

京东数据库智能运维平台建设之路

每个KeySpace都有一个主机房,属于同一个Shard中的数据库实例(目前一个shard中包含1主2从)的资源分配尽量应该满足:Master必须属于主机房,不能有任意两个实例属于同一机架,不能有任意三个实例在同一IDC,这种策略可以避免某一机柜掉电而导致主从同时出现故障,也可以避免IDC故障从而导致所有数据库实例均不可用。

由于是尽量满足,所以当资源池中的资源分布不均时,就有可能在资源分配的时候满足不了上述的反亲和性策略。因此ContainerDB有一个常驻后台进程,不停的轮询集群中的所有Shard,判断Shard中的实例分布是否满足反亲和性规则,若不满足,就会尝试进行实例重新分布。重新分布时为了不影响线上业务,会优先进行从库重分布。

基于弹性调度的能力ContainerDB实现了如下三个功能:

  • 在线扩容:当某个Shard的数据库负载达到阈值后,会自动触发Shard的在线垂直升级、迁移或者Resharding。 
  • 在线自愈:当Shard中的某个MySQL实例出现故障,ContainerDB首先判断出现故障的实例是否为master,若是master,则选择GTID最大的slave作为新的主,并进行复制关系重建和Slave补齐;若不是master,则直接进行slave补齐。 
  • 在线接入:ContainerDB允许用户以完全自助化的方式启动数据在线迁移与接入任务,该任务会将传统MySQL数据库中的数据在线迁移到ContainerDB中,待数据迁移完毕后,自动进行域名切换,完成业务系统数据源的在线无感知迁移。 

ContainerDB通过在线服务能力扩容、在线自愈和在线接入三大功能,实现了京东数据库服务的Always Online保证。

(3)不止于调度

弹性和流式的资源交付与调度是ContainerDB的基石,但是除了这两个核心功能之外,ContainerDB还在用户易用性、兼容性和数据安全性等方面做了很多工作,包括:

数据保护

在传统的直连数据库的方案下,当Master出现网络不可达时,一般都会选择新的Slave变为Master,然后将原来Master上的域名漂移到新的Master上。但是这种方案在网络抖动的情况下很容易由于AppServer上的DNS缓存,而导致双Master,并且出现脏写的情况。从整体架构图可以看出,ContainerDB与用户之间通过Gate连接。Gate是一个集群化服务,多个Gate服务都映射到一个域名下,Gate通过IP地址直接访问各个MySQL服务,而且Gate对各个MySQL角色的识别完全依赖于元数据服务:Topology。当ContainerDB中某个MySQL的Master产生网络不可达时,会选出新的Master,并更新路由元数据信息,最后才做Master切换,这样就避免了由于网络抖动和DNS缓存而在成双主和数据脏写,从而对数据进行了严格的保护。

流式查询处理

京东数据库智能运维平台建设之路

ContainerDB通过在Gate层实现基于优先级的归并排序提供了快速流式查询的功能,在进行大批量数据查询时,能瞬时返回部分查询结果数据,极大提高客户体验。

无感知数据迁移

ContainerDB通过在交叉在Window函数中分别执行部分存量数据拷贝和增量数据追加的算法,开发了在线数据迁移和接入工具JTransfer,通过JTransfer可以将传统MySQL数据库中的动态数据迁移到ContainerDB中,当ContainerDB中的数据与源MySQL中的数据的lag小于5秒时,首先会将源MySQL停写,待lag变为0时将源MySQL的域名漂移到Gate集群,整个迁移过程用户AppServer无感知。

兼容MySQL协议

ContainerDB完全兼容MySQL协议,支持标准MySQL客户端和官方驱动程序接入,并且支持大部分ANSI SQL语法。

路由规则透明

(编辑:衢州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读