https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster

一、背景

由于各种场外因素导致我们不能自由选择的理想硬件环境,加之目前单台物理机的硬件配置往往都高于需求,为了更合理地规划资源,很多时候一台服务器不能够“奢侈地”只部署一个实例,而是会考虑单机多实例部署 TiDB 或者 TiKV。这就需要在现有的环境中尽可能地搭建满足高可用、高性能的TiDB集群。本文主要分享一次实际生产环境中混合部署TiDB集群的过程,供大家参考。

二、硬件配置

10台物理机,每台配置均为56C 384G 4块2TB NVME硬盘。监控、HA等机器使用虚拟机即可,因此不算在采购预算内。

配置达标,但是由于种种因素原本预计装一个集群的硬件需要混合部署2套集群。

三、集群拓扑规划

集群1

实例 IP
TiDB & PD 10.0.0.1
TiDB & PD 10.0.0.2
PD 10.0.0.3
  10.0.0.4
Tikv *2 10.0.0.5
Tikv *2 10.0.0.6
Tikv *2 10.0.0.7
Tikv *2 10.0.0.8
Tikv *2 10.0.0.9
Tikv *2 10.0.0.10

集群2

实例 IP
  10.0.0.1
PD 10.0.0.2
TiDB & PD 10.0.0.3
TiDB & PD 10.0.0.4
Tikv *2 10.0.0.5
Tikv *2 10.0.0.6
Tikv *2 10.0.0.7
Tikv *2 10.0.0.8
Tikv *2 10.0.0.9
Tikv *2 10.0.0.10

如果拆解成单独的集群,他们的架构应该是这样

但是实际上是混合部署,那么他们的架构应该是这样

![未命名文件 (10).jpg](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/未命名文件 (10)-1647272473002.jpg)

四、集群label规划

集群1拓扑tikv配置labels规划为:

集群2拓扑tikv配置labels规划为:

设置 PD 的 location-labels 配置:

location_labels = ["zone","rack","host"]
 

五、总结

本次操作是想在目前服务器数量不变的情况下尽可能做到高可用,但是由于成本等多方面因素并没有选择异地容灾及同城多机房容灾方案,所以选择了该混合部署方案。

HA本身的可用性:

haproxy+keepalived实现ha的高可用。

PD server及TiDB server的可用性:

由于pd和tidb是混合部署的,所以这里放在一起说。10.0.0.1-10.0.0.0.4为2套集群tidb和pd混部,从架构图中可以看到,任意一台服务器宕机,都最多只影响一套集群内的一个tidb节点和一个pd节点。同一套集群内tidb节点仍有一个可用,pd节点剩余2副本,tidb和pd都满足高可用。

TiKV server的可用性:

为了在具有相近物理位置的 TiKV 上只放置一个副本,PD可以根据 TiKV 的物理位置进行最优调度以尽可能的提高 TiKV 集群的可用性。我们都知道 Raft Group 副本数选择为3的 TiKV 集群可以容忍一个节点宕机而不丢失数据且正常提供服务。一个集群同时有两个 TiKV 节点宕机可以通过合理规划让同时故障的两个 TiKV 出现在同一个隔离区的概率变高来提高可用性。本次部署同样选择为3副本,服务器10.0.0.5(host1)和 10.0.0.6(host2)在一个机柜,10.0.0.7(host3)和 10.0.0.8(host4)在一个机柜,10.0.0.9(host5)和 10.0.0.10(host6)在一个机柜,根据上面的规划,虽然一台服务器上有2套集群的各2个TiKV实例,但是PD知道哪些TiKV节点在同一台服务器上,也知道哪些服务器在同一个机柜上。PD 在副本调度时,会按照 label 层级,保证同一份数据的不同副本尽可能分散,至少能够保证任一服务器宕机2套集群的TiKV均可用。也可以设置isolation-level参数来进一步加强对 TiKV 集群的拓扑隔离要求。任一机柜故障后,例如10.0.0.5和10.0.0.6同时宕机,由于2套集群中这两台服务器都只存放一个副本,TiDB 集群依然是可用的。

第一次发文章,希望能对各位大佬有帮助,实际部署也是很早之前了,如果有不严谨或者纰漏的地方也请见谅。

参考文章:https://tidb.io/blog/8f2a6d62

[转帖]生产环境 TiDB 集群混合部署实践的更多相关文章

  1. 单例模式在生产环境jedis集群中的应用

    背景:不久前单位上线一款应用,上了生产环境之后,没过多久,便吃掉了服务器所有的内存,最后导致网站服务挂了. 在解决了这一问题之后,我发现这其实是典型的一单例模式,现分享一下. 之前存在问题的老代码如下 ...

  2. 使用ubuntu charmed kubernetes 部署一套生产环境的集群

    官方文档: https://ubuntu.com/kubernetes/docs 搭建一个基本的集群 集群ip规划 hostname ip ubuntu-1 10.0.0.10 juju-contro ...

  3. ELK 中的elasticsearch 集群的部署

    本文内容 背景 ES集群中第一个master节点 ES slave节点 本文总结 Elasticsearch(以下简称ES)搭建集群的经验.以 Elasticsearch-rtf-2.2.1 版本为例 ...

  4. TiDB集群安装主要操作

    TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...

  5. Centos7配置TiDB集群

    一:各模块属性 模块名称 状态 建议实例数 功能 负载均衡组件 TiDB 无状态 2 接收SQL请求,处理SQL相关逻辑,并通过PB找到存储数据的TiKV地址 LVS.HAProxy.F5 PB 集群 ...

  6. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  7. Tiup离线安装TIDB集群4.0.16版本

    环境:centos7.6 中控机:8.213.8.25(内网) 可用服务器8.213.8.25-8.213.8.29 一.准备 TiUP 离线组件包 方法1:外网下载离线安装包拷贝进内网服务器 在Ti ...

  8. 【分布式事务】基于RocketMQ搭建生产级消息集群?

    导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...

  9. 在线安装TIDB集群

     在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...

  10. tidb集群

    tidb ansible部署 https://zhuanlan.zhihu.com/p/27308307?refer=newsql 网址:http://www.cnblogs.com/mowei/p/ ...

随机推荐

  1. 屎山代码风格指南(避免被优化&&避免被接盘)

    欢迎补充!!! 序言 良好的代码结构:Bad 使用有意义的变量和函数名,遵循命名规范,使代码易于理解. 组织代码,使用适当的文件和文件夹结构,保持模块化. 避免全局变量的滥用,尽量使用局部作用域. 单 ...

  2. Java播放MP3播放音频

    Java播放MP3播放音频 下面我演示用jdk自带包.框架等分别展示播放mp3.等music 一.使用javafx包 AudioClip 注意jdk11以上剥离了javafx public stati ...

  3. UnionFind 并查集

    简介 UnionFind 主要用于解决图论中的动态联通性的问题(对于输入的一系列元素集合,判断其中的元素是否是相连通的). 以下图为例: 集合[1, 2, 3, 4] 和 [5, 6]中的每个元素之间 ...

  4. 震惊!火爆全网的ChatGPT背后使用的数据库居然是……

    摘要:ChatGPT承认了自己背后使用的数据库是Cassandra. OpenAI最近发布的AI驱动的智能聊天机器人ChatGPT在互联网上掀起了一阵风暴,热衷于尝试这一新AI成果的网民不在少数.Ch ...

  5. 云小课|MRS基础原理之Flink组件介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Flink是一个批 ...

  6. 使用Mask R-CNN模型实现人体关键节点标注

    摘要:在本案例中,我们将展示如何对基础的Mask R-CNN进行扩展,完成人体关键节点标注的任务. 本文分享自华为云社区<使用Mask R-CNN模型实现人体关键节点标注>,作者: 运气男 ...

  7. 云图说|初识云数据库GaussDB(for Cassandra)

    摘要:不用再为数据不一致苦恼,因为强一致的Cassandra来了,DBA们不用加班修数据了.GaussDB(for Cassandra)是一款基于华为自主研发的计算存储分离架构的分布式云数据库服务,是 ...

  8. 登录appuploader

    ​ 转载:登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录,弹出登录框 在登录框内输入apple开发者账号 如果没有app ...

  9. PlayWright安装及使用

    PlayWright是由业界大佬微软(Microsoft)开源的端到端 Web 测试和自动化库,可谓是大厂背书,功能满格,虽然作为无头浏览器,该框架的主要作用是测试 Web 应用,但事实上,无头浏览器 ...

  10. 用 Python 开发的 PDF 抽取Excel表格 2.0版

    前些天向大家介绍了我开发的从PDF抽取表格小工具的使用方法(️点击直达),有同学反馈说有一些问题: 一页PDF有多张表,只能抽取第一个 有些表格线条是透明的,无法抽取 一页一页处理太麻烦,不能一次性抽 ...