京东容器数据库系统,MySQL Docker容器实例达到万级以上。架构简单可靠,Docker容器计算平台与MySQL集群管理平台解耦处理。为描述方便,京东容器化数据库系统命名为CM(Containerized MySQL),底层京东Docker容器计算平台命名为JDOS。

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

介绍

CM依赖京东坚实的JDOS技术,MySQL Docker容器实例达到万级以上。

CM借助JDOS技术优势获得主要3个方面的技术收益:

CM借助Docker容器资源隔离能力,有效支持同一宿主物理机上多MySQL实例直接资源隔离,极大提高数据库实例部署密度,有效提升资源使用率。

CM借助Docker容器资源平滑升级能力,方便数据库实例平滑扩容需求。

CM借助JDOS平台资源池化提供管理容器生命周期API能力,实现用户自助上下线数据库以及自动化运维。

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

整体架构

CM与JDOS解耦,CM负责管理MySQL主从等集群方式的生命周期管理;京东JDOS负责单个MySQL容器实例生命周期管理。

京东Docker容器集群分多Region,多POD部署,且不同集群之间网络互通,有效支持每个MySQL实例可被业务系统直接调用,确保***的网络延迟性能。

MySQL集群实例

优先级、配额

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

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

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

监控、告警

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

JDOS架构

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

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个层面划分计算区域,调度算法灵活可配确保业务特点与计算硬件环境特点结合适配。如CM的机器全部是SSD的硬盘,所以JDOS会在每个数据中心提供CM SSD Zone的tag,把CM的创建请求优先调度到具有SSD硬盘的计算Zone。

亲和性和反亲和性调度

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

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

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

可扩展性

底层JDOS资源池的扩容性,按使用率,有计划进行扩容底层物理计算资源。

CM每个库使用资源的平滑扩容,比如CPU,内存,网络,磁盘空间均支持平滑扩容功能。

采用直接重置修改cgroup的配置,即可达到平滑扩容的目的。

结合京东设计的cpu set与cpu share并存的资源隔离策略,提升资源使用率。

MySQL实例性能

性能测试环境部署图

测试环境硬件配置

多容器实例基准测试

测试模型

场景描述

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

容器测试数据

物理机数据

稳定性测试

场景描述

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

性能表现

CPU表现

磁盘表现

网络表现

【本文来自51CTO专栏作者张开涛的微信公众号(开涛的博客),公众号id: kaitao-1234567】

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

mysql 生产实践_京东容器化MySQL生产实践相关推荐

  1. mysql docker还是rds_容器化RDS:计算存储分离还是本地存储?

    随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应用到 RDS 领域.数据库服务的需求可以 ...

  2. 打开和关闭mysql服务器_启动和关闭MySQL服务器

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 作为MySQL管理员,一个普通的目标就是确保服务器尽可能地处于运行状态,使得客户机能够随时访问它.但是,有时最好关闭服务器 ...

  3. npm mysql 事务_一文解读MySQL事务

    经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下. MySQL 事务 本文所说的 MySQL 事务都是指在 I ...

  4. docker mysql主从_使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  5. 关闭mysql方法_启动和关闭MySQL的方法

    启动和关闭MySQL的方法 (1)启动 MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动MySQL服务时运行下面命令即可. [root@test1 init.d]# / ...

  6. golang mysql 崩溃_使用GoLang与mysql连接失败

    我试图使用Go语言连接MySql数据库并给我以下错误. sql: unknown driver "mysql" (forgotten import?) 我的守则 package m ...

  7. docker运行mysql性能_使用docker运行mysql

    以前开发的时候都是用本地的sqlite开发,但是极少数情况下,sqlite支持的语法发布到服务器上链接mysql会报错. 为了避免这种现象,还是链接本地mysql开发还是更稳定的, 可是开发的项目多了 ...

  8. 自己制作mysql镜像_制作轻量级的mysql镜像

    一.拉取一个mysql5.5镜像 docker pull mysql:5.5 二.通过镜像启动一个容器,并在容器中安装ps命令,安装前需要更新apt-get docker run ‐di -p 330 ...

  9. 零点起飞学mysql视频_零点起飞学MySQL

    第1篇 MySQL基础 第1章 数据库的安装(教学视频:25分钟) 2 1.1 MySQL概述 2 1.1.1 MySQL特性以及历史 2 1.1.2 MySQL的获取 3 1.2 MySQL的安装 ...

最新文章

  1. 北京智源人工智能研究院一岁啦!
  2. 微信小程序上传图片时provisional headers are shown显示我的错误解决方案
  3. 操作系统:提升电脑开机速度的15个小技巧
  4. Mysql数据库-面试题
  5. 模型算法_生产建模型 算法控效率
  6. python ModuleNotFoundError: No module named ‘requests‘ 的 解决方案
  7. java中clone方法_Java Object clone()方法– Java中的克隆
  8. python贝叶斯分析方法实例_python 贝叶斯分析对应的代码
  9. 数字/模拟信号中带宽的含义
  10. 黑客专用文本编辑器Emacs中文手册
  11. clickhouse开窗函数之同比环比
  12. 华为meta30浏览器不兼容flex布局解决方案-加前缀
  13. 数据科学入门与细分数据领域盘点
  14. 给一些想要学习Java同学的一些建议
  15. 上号神器,英雄联盟手游扫码登录教程
  16. 细说二维码扫码登录的原理
  17. Vive controller vibration
  18. 【转】光照、材质、纹理的关系
  19. 【TensorRT】TensorRT踩过的坑
  20. 梦想CAD控件文字COM接口知识点

热门文章

  1. C语言实现井子格游戏
  2. 负载均衡的几种算法Java实现代码
  3. 设计模式学习笔记之代理模式
  4. 备份整合更需要一体机
  5. cocos2d的单例
  6. 【250期门诊集锦】痛并快乐着的正则表达式
  7. 为什么优秀开发者进入Google后就不参与开源了
  8. eclipse 集成svn客户端_TortoiseSVN及Eclipse的svn插件安装使用
  9. 复旦大学计算机学院专业硕士学费,复旦大学计算机在职研究生学费一年要交的学费多少?...
  10. python中config方法作用,python中ConfigParse模块的用法