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. 调试分析Linux 0.00引导程序

    Bochs虚拟机的配置文件 简介 Bochs 虚拟机的配置文件 描述待启动的虚拟机的配置,例如内存大小.启动镜像.网络功能.存储配置. Bochs运行后,会先查找配置文件,解析模拟器要虚拟的系统相关信 ...

  2. 1、reids 基础

    SortedSet类型 特性 1.可排序 2.元素不重复性 3.查询速度快 与普通的集合类型相比,SortedSet 主要有以下两个特点: 有序性:根据分数对元素进行排序,便于范围查找等操作. 不重复 ...

  3. JavaScript异步编程3——Promise的链式使用

    目录 概述 详论 1️⃣回调地狱 2️⃣Promise实现 参考 概述 在上一篇文章<JavaScript异步编程2--结合XMLHttpRequest使用Promise>中,简要介绍了A ...

  4. 云小课|MRS基础原理之Hue组件介绍

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

  5. FusionInsight MRS Flink DataStream API读写Hudi实践

    摘要:目前Hudi只支持FlinkSQL进行数据读写,但是在实际项目开发中一些客户存在使用Flink DataStream API读写Hudi的诉求. 本文分享自华为云社区<FusionInsi ...

  6. 一文带你梳理Clang编译步骤及命令

    摘要: 本文简单介绍了Clang编译过程中涉及到的步骤和每个步骤的产物,并简单分析了部分影响预处理和编译成功的部分因素. 本文分享自华为云社区<Clang编译步骤及命令梳理>,作者:mai ...

  7. 如何在上架App之前设置证书并上传应用

    ​ App上架教程 在上架App之前想要进行真机测试的同学,请查看<iOS- 最全的真机测试教程>,里面包含如何让多台电脑同时上架App和真机调试. P12文件的使用详解 注意: 同样可以 ...

  8. HTML 首页 欢迎页

    HTML 首页 欢迎页,将下面代码复制出来,贴到HTML中,直接运行 <!DOCTYPE html> <html lang="en"> <head&g ...

  9. Html 表格 在线转 Markdown

    复制 HTML Table F12 查看网页源代码 Html to markdown 在线转换 https://tableconvert.com/html-to-markdown 复制 Markdow ...

  10. peewee 操作 sqlite 锁表问题分析

    在使用python orm 框架 peewee 操作数据库时时常会抛出以一个异常,具体的报错就是 database is locked 初步了解是因为sqlite锁的颗粒度比较大,是库锁.当一个连接在 ...