对于生产中的简单集群,如何切换成两地三中心?

【TiDB 使用环境】生产环境
【TiDB 版本】8.1.2
【操作系统】opencloud9
【部署方式】机器部署
【集群数据量】10G
【集群节点数】3
目前生产使用的集群,在同一个机房有三个节点,每个节点都部署了pd/tikv/tidb。
为了容灾需求,需要部署成两地三中心(5节点),保留目前的三个中的两个,另外增加三个节点。
假设目前的是北京1机房1、2、3节点,改造后变成北京1机房1、2节点+北京2机房1、2节点+上海机房1节点。
这种情况,可以直接在线部署切换不停机维护吗?
参考了文档,但是写的不是很清楚,可以提供一下相关操作命令或配置方法吗?
参考文档“:

通过拓扑 label 进行副本调度

https://docs.pingcap.com/zh/tidb/v8.1/schedule-replicas-by-topology-labels/

跨数据中心部署拓扑

https://docs.pingcap.com/zh/tidb/v8.1/geo-distributed-deployment-topology/

PD Control 使用说明

https://docs.pingcap.com/zh/tidb/v8.1/pd-control/

目前的操作
1、给tikv打标签
tiup cluster edit-config tidb # 会自动打开配置编辑器(vim)
tikv_servers:

  • host: 10.1.1.11
    #下面增加
    config:
    server.labels:
    zone: zone1
    dc: dc1
    rack: rack1
    host: host1
    #10.1.1.12 \10.1.1.13同样修改但是host不一样
    tiup cluster reload tidb -R tikv #重启生效
    2、修改pd配置
    tiup ctl:v8.1.2 pd -u http://10.1.1.11:2379 config set location-labels zone,dc,rack,host
    tiup ctl:v8.1.2 pd -u http://10.1.1.11:2379 config set isolation-level zone
    tiup cluster reload tidb -R pd #重启生效
    3、扩缩容
    把北京2和上海1的节点加入
    然后等数据更新完成后缩容掉10.1.1.13

理论上这样操作是可以,但是无法查看到底状态如何。
修改pd配置成功但是tiup cluster edit-config tidb无法查看到。
文档中似乎没有对pd进行区域标签设置的内容(tidb的内容都提到了,但是pd没有,不知道为什么),是不需要对pd进行区域设置吗?
使用命令行修改的内容,不会同步到配置文件中去,也没有相关的命令同步吗?怎么查看配置,怎么确保下次集群启动是用哪个配置启动的,不能导出这个配置吗?

label-property(已废弃)但文档中提示的配置还是用这个来限制pd选主,那这个是有效还是无效。

1 个赞

跨机房部署要设置tikv的

server.grpc-compression-type: gzip

但是tiup cluster edit-config tidb-cluster这里面又没有server_configs.tikv的项目。

可以尝试tiup扩容命令试试,扩容时,拓扑文件中设置下新节点的label信息,成功后再将已有的三节点缩容一个

1、补标签-tikv

tiup cluster edit-config tidb # 会自动打开配置编辑器(vim)

如果要在配置文件中设置,使用下列配置:

tikv_servers:
 - host: 192.168.2.121
   #下面增加
      config:
        server.labels:
          zone: xian
          dc: xian1
          rack: rack1
          host: host1
#- host: 192.168.2.122
          host: host2
#- host: 192.168.2.123
          dc: xian2

#重启tikv节点后生效

tiup cluster reload tidb -N 192.168.2.121:20160 # 只重启目标 TiKV 节点----display中的ID

tiup cluster reload tidb -R tikv #----display中的Role

#验证TiKV标签是否生效

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store

2、补标签-tidb-可选-一般用不上

tiup cluster edit-config tidb-cluster # 打开配置编辑器(vim)

      config:
        server.labels:
          zone: xian
          dc: xian1
          rack: rack1
          host: host1

tiup cluster reload tidb -R tidb #----display中的Role#重启 TiDB 节点

3、设置 PD 配置

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set location-labels zone,dc,rack,host

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set isolation-level zone

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set max-replicas 3

tiup cluster reload tidb -R pd

4、扩容

编辑文件 scale-out-topo.yaml

pd_servers:
  - host: 192.168.2.124
  - host: 192.168.2.125
tikv_servers:
  - host: 192.168.2.124
    config:
        server.labels:
          zone: xian
          dc: xian2
          rack: rack1
          host: host2
  - host: 192.168.2.125
    config:
        server.labels:
          zone: beijing
          dc: beijing1
          rack: rack1
          host: host1
     readpool.storage.use-unified-pool: true
     readpool.storage.low-concurrency: 10
     raftstore.raft-min-election-timeout-ticks: 50
     raftstore.raft-max-election-timeout-ticks: 60
tidb_servers:
  - host: 192.168.2.124
  - host: 192.168.2.125

tiup cluster check tidb scale-out.yml --cluster #检查集群存在的潜在风险

tiup cluster check tidb scale-out.yml --cluster --apply #自动修复集群存在的潜在风险

tiup cluster scale-out tidb scale-out.yml

tiup cluster reload tidb --skip-restart #更新集群配置

tiup cluster reload tidb -R prometheus #更新 Prometheus 配置并重启

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 member leader_priority pd-192.168.2.121-2379 5

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 member leader_priority pd-192.168.2.122-2379 5

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 member leader_priority pd-192.168.2.123-2379 5

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 member leader_priority pd-192.168.2.124-2379 5

tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 member leader_priority pd-192.168.2.125-2379 1

tiup cluster display tidb #查看集群状态

看起来可以了,不清楚是不是真的可以,会不会有问题

1 个赞

北京2机房2节点 + 上海机房1节点是吧,

大致是这样。
反正有一个地区两个机房,这两个机房各两个节点。
异地一个机房,一个节点。

你这也太省了,如果生产彻底挂了,备怎么起来?强制重建pd? 这个是风险操作吧?

  • 拓扑结构:
    北京1:TiKV节点1、2、3
    labels:region=prod,zone=bj1"
    北京2:TiKV节点4
    labels = “region=samecity,zone=bj2”
    上海1:TiKV节点5
    labels = “region=remote,zone=sh1”

  • 放置策略
    CREATE PLACEMENT POLICY default
    PRIMARY_REGION = “prod”
    REGIONS = “prod, samecity, remote”
    FOLLOWERS=4;
    ALTER RANGE GLOBAL PLACEMENT POLICY = ‘default’; – 全局应用,现有的库表,需要逐个设置

请问你们两地的网络环境是怎么样的?PD主节点在不同城市对性能影响大不大?

影响应该蛮大,网络一般,延时差不多20ms吧。
所以正常都用同城市的机房,异地只能做兜底一般用不上。

就是因为不懂啊。
话说这个不是集群吗,按道理,5 节点,只要有3节点正常,应该就可以正常使用吧。
不过昨天测试,把2、4节点停了,集群就不能使用了 :joy:

是不是因为region副本数设置的不够,总感觉这种多中心的方案很不靠谱

你们计划的region副本数设置多大?两地的网络环境如何?三个中心的节点客户端计划如何读写?

不知道啊,没用对 region进行设置,只设置了拓扑,没了解过具体的设置,这个不是集群自动调度吗?

两地三中心,客户端只读写其中的一地。另外那个中心留着不用。

不是的,要通过标签手工设置region调度的策略才可以的。

那你们这方案有点太浪费资源了。我记得是302那个课程里有讲过这种方案的设计。

那推荐怎么设计?
课程在哪里?
文档里面不是也讲的这种设计吗?就是没讲具体的设置,只给了个配置文件和简单的几句讲解。

302-TiDB 高级系统管理
模块8里有讲这些,正好限时免费学习的

感谢感谢,我先看看