MergeTree 也有一些异步任务处理,主要有三部分:首先是定期把一些有问题的、提交失败的、或写失败的数据文件清理掉;然后是定期把一些比较琐碎的插入语句生成的小文件块合并为大的文件块;还有偶尔有一些更正,例如数据的更新删除生成的临时文件,MergeTree 也会把对应的数据文件汇总成一个比较大的 Part 。
文章插图
智联云选择 K8s 部署的原因
京东智联云基于现有的云平台部署 Clickhouse 时,是基于 K8s 团队提供的强大运维调度平台来实现的 。之所以选择基于 K8s 来部署有几方面原因:
- 首先,K8s 可以屏蔽底层的环境差异,使用户无需再具体关注主机网络、存储、API 接口等变化,只需将精力集中到数据库管理开发任务上 。
- 其次,构建这个 JCHDB 平台并不只是为京东智联云内部使用 。这个平台构建完成后,不仅可以在公有云上给客户提供服务,并且在私有化部署或者跨云部署时,都可以完全不用对架构做任何修改直接部署 。
数据库系统是一个比较复杂的有状态业务系统,分片跟副本之间有状态关系,这时候就需要维护 Pod 与 Pod 之间的关系,K8s 为此提供了 operator 功能 。京东智联云二次开发了开源的 Clickhouse operator,丰富了 operator 的 API 功能,并且为安全生产的需要给它打上一些额外的标签,控制 Pod 调度的亲和性,防止主从副本落到同一个物理机上 。
文章插图
这个 operator 开发部署完毕,安装到 K8s 以后,K8s 就有了管理调度 Clickhouse 状态的能力 。在它的外部会借助 helm 系统,将提前定义好的一些表单发送给 K8s,由 K8s 来根据表单里定义的这些参数来创建需要的实例 。
除了创建最基础的 Clickhouse,如果需要有复制关系引擎,它也会一同创建 Zookeeper;同时为了丰富监控能力,便于 DBA 进行服务器的运维监控,它还会创建一个 Promethus,还有可视化的 Grafana 。这样它就可以直接在 VPC 里通过 Grafana 来监控数据库的运维状态 。
这个服务还会创建一个绑定 headless service ip 地址的域名,用户可以通过这个数据库域名直接连到这一套 Clickhouse 系统上 。由上图右可见,这个 Pod 的底层存储使用了京东的云硬盘,它会在建 Pod 时申请一个 PVC 控制器,PVC 控制器会绑定京东云硬盘 。这样就形成了计算与存储分离的架构,可以进一步提升计算能力 。
京东智联云目前在高性能、高可用和可扩展层面上都有自己的特色:
- 高性能方面,智联云采用最新一代的云主机,CPU 最大可以支持 64 核心,单个 Pod 最大可以扩展到 512G 内存 。
- 高可用方面,智联云借助 K8s 调度管理平台,发现有 Pod 不可用时 K8s 会自动将这个 Pod 剔除 。同时平台会新建一个 Pod,基于 StatefulSet 机制将被删除的 Pod 所绑定的云盘挂到新 Pod 上 。这样如果有实例由于某些硬件原因出现问题,可以在分或秒级完成实例替换 。
- 可扩展方面,智联云基于云主机、云硬盘的一些基础组件,提供了一些灵活的扩展接口,可以直接在原地扩容 。智联云支持热扩容,可以在不影响用户使用的前提下,在分钟级甚至秒级就可以完成 CPU 数量、内存容量或磁盘空间的扩容 。
文章插图
京东智联云还提供了完善的监控体系,可以帮助 DBA 更好地观察的数据库的运行状况 。平台不但提供了 service 级别的数据库监控,同时还能把所有 Pod 所使用的磁盘空间、CPU、内存都展示给用户 。有了这些信息,用户可以更加直观地观察到每一个 Pod 的压力分布情况,进而方便灵活地调整数据压力,避免某个 Pod 出现数据瓶颈 。
根据这些监控的目标,用户可以灵活地定义告警信息 。智联云支持多维度数据告警,可以通过邮件、短信、微信等形式告警 。
文章插图
Clickhouse 自身具备强大的数据处理能力,还能很好地兼容 SQL 语句 。但在实际设计和使用过程中,不能仅仅把它当成一个传统关系型数据库的增强替代品,这样可能会限制 Clickhouse 的潜力发挥 。企业需要对传统的数据仓库、设计理念,以及数据上下游的流转方式做出改进,发挥想象力和创造力,更好地利用 Clickhouse 的列式存储、并行计算等数据能力,为数据业务创造更大价值 。
推荐阅读
- 勒索病毒加密数据库解决方案
- Laravel数据库迁移的那些个小技巧
- 还在手动整理数据库文档?试试这个工具
- 使用IDEA连接mysql数据库
- Springboot 实现数据库备份还原
- 对我来说数据库图形化管理工具用这个足够了
- MySQL5.7数据库安装与远程连接
- 一款免费的数据库工具,比Navicat还要好用,功能还很强大
- python语言-数据库查询数组转Dataframe格式
- 这些著名数据库之间的“关系”,你知道吗?