TiDB 集群扩容缩容方案

    下面分别介绍如何增加或者删除 PD,TiKV 以及 TiDB 的节点。

    下面用到的 pd-ctl 文档可以参考 pd-control

    假设现在我们有三个 PD 服务,详细信息如下:

    我们可以使用 参数,将一个新的 PD 服务加入到现有的 PD 集群里面。
    如果我们需要添加 pd4,只需要在 --join 参数里面填入当前 PD 集群任意一个 PD 服务的 client url,比如:

    1. --client-urls="http://host4:2379" \
    2. --peer-urls="http://host4:2380" \
    3. --join="http://host1:2379"

    动态删除节点

    如果我们需要删除 pd4,可以通过 pd-ctl 来完成:

    如果想把现有的 PD 节点迁移到新的机器上,我们可以先在新的机器上添加节点,然后把旧的机器上的节点删除掉。
    迁移过程中应该一个节点一个节点逐个迁移,每完成一个步骤可以先查看一下当前的所有节点信息来进行确认。

    我们可以通过 pd-ctl 来查看当前所有 TiKV 节点的信息:

    1. ./pd-ctl -u http://host1:2379

    动态添加节点

    安全地删除(下线)一个 TiKV 服务需要先告诉 PD,这样 PD 可以先把这个 TiKV 服务上面的数据迁移到其他 TiKV 服务上,保证数据有足够的副本数。

    假设我们需要删除 store id 为 1 的 TiKV 服务,可以通过 pd-ctl 来完成:

    然后可以查看这个 TiKV 服务的状态:

    1. ./pd-ctl -u http://host1:2379
    2. >> store 1
    3. {
    4. "store": {
    5. "id": 1,
    6. "state": 1,
    7. "state_name": "Offline"
    8. "status": {
    9. ...
    10. }
    11. }

    我们可以通过这个 store 的 state_name 来确定这个 store 的状态:

    • state_name=Up: 这个 store 正常服务
    • state_name=Disconnected: 当前没有检测到这个 store 的心跳,可能是故障或网络连接中断
    • state_name=Down: 超过一小时(可通过 max-down-time 配置)没有收到 store 心跳,此时 PD 会为这个 store 上的数据添加副本
    • : 这个 store 已经完成下线,此时 store 上已经没有数据,可以关闭实例

    动态迁移节点

    TiDB 是一个无状态的服务,这也就意味着我们能直接添加和删除 TiDB。
    需要注意的是,如果我们在 TiDB 的服务的前面搭建了一个 proxy(譬如 HAProxy),则需要更新 proxy 的配置并重新载入。