容器集群支持数据库实践

京东容器数据库系统,管理1800台物理计算节点,生产1W+ 多MySQL Docker容器实例。架构简单可靠,Docker容器计算平台与MySQL集群管理平台解耦处理。为描述方便,京东容器化数据库系统命名为CDS,底层京东Docker容器计算平台命名为JDOS。

本文重点介绍JDOS如何支持CDS。CDS是更大的话题,后续数据库团队会分享相关实践。

介绍

CDS依赖京东坚实的JDOS技术,生产运行1W+个MySQL容器实例。CDS借助JDOS技术优势获得主要3个方面的技术收益:

  1. CDS借助Docker容器资源隔离能力,有效支持同一宿主物理机上多MySQL实例直接资源隔离,极大提高数据库实例部署密度,有效提升资源使用率
  2. CDS借助Docker容器资源平滑升级能力,方便数据库实例平滑扩容需求
  3. CDS借助JDOS平台资源池化提供管理容器生命周期API能力,实现用户自助上下线数据库以及自动化运维。

本文会从架构设计,性能测试等方面说明京东CDS落地实践过程。

整体架构

CDS与JDOS解耦,CDS负责管理MySQL主从等集群方式的生命周期管理;京东JDOS负责单个MySQL容器实例生命周期管理。京东Docker容器集群分多Region,多POD部署,且不同集群之间网络互通,有效支持每个MySQL实例可被业务系统直接调用,确保极佳的网络延迟性能。

MySQL集群实例

优先级 配额

数据库cluster根据业务重要性划分不同的优先级,京东的划分更加细致,这里我们简化分2种优先级:核心系统,非核心系统。

云数据库管理平台只需要在调用京东JDOS平台API时候,带上priority=0,即可表示创建的是核心系统依赖的数据库。京东JDOS平台会强制把属于该cluster的多MySQL实例调度到不同的机架,且不资源“超配”。

底层资源云化和核算成本需求,会针对按事业部配给一定的配额,所在的创建数据库集群实例成功后,自动从该部门扣除对应的资源值,反之销毁会归还配额到部门。

监控 告警

数据库cluster自身DB层面的告警由云数据库集群平台提供。涉及到底层计算,网络,存储等资源层面的告警,由底层京东Docker容器平台提供数据给云数据库集群。

JDOS架构

JDOS是京东统一数据中心计算,网络,存储管理平台。除支持CDS外,也支持京东全部的业务系统运行环境。

JDOS系统基于京东扎实的Openstack,Docker等开源技术的持续研发能力,提供稳定,高性能的计算资源平台。每个组件都是独立服务部署,采用MQ互相交互信息,京东重构了主要的核心组件服务,使JDOS平台可以支持更大的集群规模,目前稳定在6K台物理计算节点。重新设计JDOS升级功能,做到平滑无感知,有效支撑长时间运行容器的稳定性。

JDOS控制节点

JDOS控制节点服务组件,借助Haproxy做PooL模式部署,有效避免单点和负载能力问题。

控制节点3台物理机,分别跨在不同的机架上,避免Tor交换机,机架电力,服务器等故障影响。

控制节点服务组件混合部署,进一步提升控制节点每个服务组件的高可用和负载能力。比如计算服务API,镜像服务API,认证服务API,网络服务API,存储服务API进程混部同一台物理机。

JDOS计算节点

计算节点管理网络与虚拟化数据网络使用不同的网口进行隔离,全万兆网络环境,对数据库的网络环境支持非常好。特别京东在虚拟化网络技术方向的扎实积累,基本可以做到虚拟化网络损耗控制在2%以下。

调度

调度架构简单,负载可扩展。

主要思想是,先一系列filter掉不满足要求的计算节点,然后打分,最后做排序,选择最优并返回调度结果。

资源分区调度

按Region,POD,Zone,物理机等4个层面划分计算区域,调度算法灵活可配确保业务特点与计算硬件环境特点结合适配。如CDS的机器全部是SSD的硬盘,所以JDOS会在每个数据中心提供CDS SSD Zone的tag,把CDS的创建请求优先调度到具有SSD硬盘的计算Zone。

亲和性和反亲和性调度

创建全新数据库集群实例如一主一层,JDOS调度器会把这2个MySQL容器实例分布到不同的机架。

业务多从库需求,要求从库是高性能读,JDOS调度器会根据performance_slave=True标记,尽可能把从库创建到网络繁忙度较小的机架,并与主在相同的物理POD,甚至同一个Tor交换机下面的不同物理机上。

业务增加备份性质的从库需求,JDOS调度器会根据DB_Cluster_ID=uuid, backup_slave=True标记,强制把从库创建避免已经有该DB_cluser_ID所在的宿主机,以及机架甚至POD。

可扩展性

底层JDOS资源池的扩容性,按使用率,有计划进行扩容底层物理计算资源。CDS每个库使用资源的平滑扩容,比如CPU,内存,网络,磁盘空间均支持平滑扩容功能。采用直接重置修改cgroup的配置,即可达到平滑扩容的目的。结合京东设计的cpu set与cpu share并存的资源隔离策略,提升资源使用率。

性能

主要关注MySQL运行在Docker容器内的实际DB层面的性能。

MySQL实例性能

性能测试环境部署图

测试环境硬件配置

多容器实例基准测试

测试模型

场景描述

基础数据为:8个容器,每个容器基础数据量为1000W(532M),单表加压,每个表10W行记录,同时对多个容器发起相同的请求,测试响应情况,并对比同等线程数下物理机的情况。

容器测试数据

物理机数据

稳定性测试

场景描述

单容器1000W基础数据,单表请求10W数据,8容器并发运行24小时。

性能表现

CPU表现

磁盘表现

网络表现

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2017-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法channel

BAT面试14: 谈谈 docker 在深度学习任务中的应用

Docker是一种容器技术,它就像一个沙盒把应用程序隔离开来,不管有没有遇到过你至少听到某些应用程序不能兼容,最常见的就是升级某个系统,老版本跟新版本不能兼容,...

2413
来自专栏云计算

使用容器进行应用程序路由

本文收录在DZone的容器编制与部署指南中。点击此处阅读更多富有洞察力的文章、行业统计数据等内容!

2065
来自专栏blackpiglet

如何在 Kubernetes 环境中搭建 MySQL (一):简介

  最近因为工作上的需求,搭建了一套部署在 Kubernetes 环境中的 MySQL,可能听起来就是让 MySQL 的 docker image 跑在 Kub...

1255
来自专栏北京马哥教育

基于K8S的容器云平台如何部署微服务?

K8S是第一个将“一切以服务为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S上的系统不仅可以独立...

8667
来自专栏SDNLAB

漫谈虚拟路由方案

前言——关于虚拟路由 SDN,抑或是OpenFlow,能否为路由市场开辟一个新的时代?以OpenvSwitch为代表的开源软件交换机,已经推动SDN界发展了一段...

4525
来自专栏微信小开发

劲爆!小程序又增新功能!为落地微信智慧零售方案做铺垫!

小程序从上线后至今共发布了97项能力,小程序还在不断完善。昨晚微信又沿袭了小程序上线后深夜更新的习惯,一次性更新了8项新功能,你想要的直播终于上线了。 ? ? ...

2256
来自专栏Brian

VPC 深入浅出解析

概述 今天给大家介绍一下博主最近做的一个项目:VPC.VPC(Virtual Private Cloud)虚拟私有云,租户可以在云中预置一个逻辑隔离分区,自己定...

5778
来自专栏互联网技术栈

LVS Nginx HAProxy 对比

目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LVS,Nginx及HAProxy,高可用软件有Heartbeat、Keepalived,...

1814
来自专栏EAWorld

微服务模式系列之四:客户端服务实现

译者自序: 熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我...

26610
来自专栏SDNLAB

Neutron和ONOS集成实践

一.Neutron和ONOS集成 1、Neutron和ONOS社区动态 首先,我们可以从Neutron项目中的doc/source/policies/neutr...

3505

扫码关注云+社区

领取腾讯云代金券