缩容 TiFlash 节点
如果要缩容 IP 地址为 10.0.1.4 的一个 TiFlash 节点,可以按照如下步骤进行操作。
1. 根据 TiFlash 剩余节点数调整数据表的副本数
查询是否有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。
tobe_left_nodes表示缩容后的 TiFlash 节点数。如果查询结果为空,可以开始执行缩容。如果查询结果不为空,则需要修改相关表的 TiFlash 副本数。SELECT * FROM information_schema.tiflash_replica WHERE REPLICA_COUNT > 'tobe_left_nodes';
对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句,
new_replica_num必须小于等于tobe_left_nodes:ALTER TABLE <db-name>.<table-name> SET tiflash replica 'new_replica_num';
重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。
2. 执行缩容操作
接下来,请任选下列方案其一进行缩容。
方案一:通过 TiUP 缩容 TiFlash 节点
通过以下命令确定需要下线的节点名称:
tiup cluster display <cluster-name>
执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为
10.0.1.4:9000tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000
方案二:手动缩容 TiFlash 节点
在特殊情况下(比如需要强制下线节点),或者 TiUP 操作失败的情况下,可以使用以下方法手动下线 TiFlash 节点。
使用 pd-ctl 的 store 命令在 PD 中查看该 TiFlash 节点对应的 store id。
在 pd-ctl(tidb-ansible 目录下的
resources/bin包含对应的二进制文件)中输入 store 命令。若使用 TiUP 部署,可以调用以下命令代替
pd-ctl:tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store
注意
如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的
IP:端口即可。
在 pd-ctl 中下线该 TiFlash 节点。
在 pd-ctl 中输入
store delete <store_id>,其中<store_id>为上一步查到的该 TiFlash 节点对应的 store id。若通过 TiUP 部署,可以调用以下命令代替
pd-ctl:tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store delete <store_id>
注意
如果集群中有多个 PD 实例,只需在以上命令中指定一个活跃 PD 实例的
IP:端口即可。
等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。
手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。
从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:
tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force
注意
如果在集群中所有的 TiFlash 节点停止运行之前,没有取消所有同步到 TiFlash 的表,则需要手动在 PD 中清除同步规则,否则无法成功完成 TiFlash 节点的下线。
手动在 PD 中清除同步规则的步骤如下:
查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。
curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash
[ { "group_id": "tiflash", "id": "table-45-r", "override": true, "start_key": "7480000000000000FF2D5F720000000000FA", "end_key": "7480000000000000FF2E00000000000000F8", "role": "learner", "count": 1, "label_constraints": [ { "key": "engine", "op": "in", "values": [ "tiflash" ] } ] } ]
删除所有与 TiFlash 相关的数据同步规则。以
id为table-45-r的规则为例,通过以下命令可以删除该规则。curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r
3. 查看集群状态
tiup cluster display <cluster-name>




