InfluxDB集群扩容、重平衡步骤(1.8版本)

集群管理

集群扩容

开始之前,请停止将历史数据写入InfluxDB。历史数据具有过去任何时间的时间戳。在写入历史数据时执行重新平衡可能会导致数据丢失。

集群扩容包括两个步骤:

  1. 加入新的data节点
  2. 重新平衡集群

加入节点

加入节点请使用add-data命令,且请仅对新加入的节点执行一次该命令

# Pattern
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret <internal-share-secret> add-data <data-node-tcp-bind-address>

# Example
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' add-data enterprise-data-03:8088

若因故障、更改配置或其他原因需要更换、重新上线节点,请使用update-data命令。具体参照更换节点章节。

集群平衡

集群平衡有以下两个目标:

  1. shards在所有data节点上均匀分布
  2. 保证每个shard都具备n个副本,n为复制因子

集群平衡从扩容的目的出发,有以下两个可选的平衡方案:

  1. 加入节点以扩充磁盘容量或增加写入吞吐量,选方案1
  2. 加入节点以提高数据可用性或增加查询吞吐量,选方案2

以下两个方案假设原data节点有enterprise-data-01enterprise-data-02两个,数据库的复制因子为2,新加入节点为enterprise-data-03.

方案1

该方案保持复制因子不变,新加入节点起到扩充磁盘容量或增加写入吞吐量的作用。

步骤1:截断热分片

热分片指的是正在接收写入请求的分片。执行以下命令,集群将自动创建一个分布在所有data节点上的分片接收新写入的请求,除此之外的分片将变为冷分片:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' truncate-shards

预期输出:

Truncated shards.

执行该命令后,保证了数据的一致性,可对所有冷分片调整在集群节点上的分布情况,而任何热碎片或新碎片现在都均匀分布在集群中,不需要进一步干预。

步骤2:确认冷分片情况

在加入了新的data节点且复制因子不变的情况下,每个节点所拥有的分片需要进行调整。这一步需要确认哪些分片需要复制到新节点上,而哪些分片需要从旧节点上移除。

在这一步,没有具体的要求和算法规定哪些分片要迁移到新节点上,只需要在加入新节点后,冷分片数量在各个节点上分布大致均匀,或者根据机器性能差异,达到每个机器cpu、内存即可。

执行命令查看分片在集群的分布情况:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' show-shards

预期输出:

Shards
==========
ID   Database    Retention Policy   Desired Replicas   [...]   End                               Owners
21   telegraf    autogen            2                  [...]   2017-01-26T18:00:00Z              [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088}]
22   telegraf    autogen            2                  [...]   2017-01-26T18:05:36.418734949Z*   [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088}]
24   telegraf    autogen            2                  [...]   2017-01-26T19:00:00Z              [{5 enterprise-data-02:8088} {6 enterprise-data-03:8088}]

执行命令查看本地节点的分片信息:

find /var/lib/data/ -mindepth 3 -type d -exec du -h {} \;
步骤3:复制分片

执行命令:

# Pattern
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret <internal-share-secret> copy-shard <source_TCP_address> <destination_TCP_address> <shard_ID>

# Example
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey'  copy-shard enterprise-data-01:8088 enterprise-data-03:8088 22

预期输出:

Copied shard <shard_ID> from <source_TCP_address> to <destination_TCP_address>
步骤4:确认已复制的分片

执行命令查看分片在集群的分布情况:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' show-shards

预期输出:

Shards
==========
ID   Database    Retention Policy   Desired Replicas   [...]   End                               Owners
22   telegraf    autogen            2                  [...]   2017-01-26T18:05:36.418734949Z*   [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088} {6 enterprise-data-03:8088}]

确认本地节点的分片文件,分片文件位于:

/var/lib/data/<database>/<retention_policy>/<shard_ID>

举个例子,查看22号分片文件信息:

# On the source data node (enterprise-data-01)

~# ls /var/lib/data/telegraf/autogen/22
000000001-000000001.tsm # 👍

# On the new data node (enterprise-data-03)

~# ls /var/lib/data/telegraf/autogen/22
000000001-000000001.tsm # 👍

分片复制后,需要同时确认show-shards命令和本地分片文件中被复制的分片信息正常,二者缺一不可。如果出现异常情况,需要再次执行步骤3.

步骤5:移除不必要的分片

这一步将原data节点不必要的分片移除,使分片副本数与复制因子保持一致,且分片分布大致均匀,以达到重平衡的目的。

执行命令:

influxd-ctl -auth-type jwt -secret <internal-share-secret> remove-shard <source_TCP_address> <shard_ID>

预期输出:

Removed shard <shard_ID> from <source_TCP_address>
步骤6:确认集群重平衡

全部分片迁移完毕后,执行命令:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecret' show-shards

预期输出:

Shards
==========
ID   Database    Retention Policy   Desired Replicas   [...]   End                               Owners
22   telegraf    autogen            2                  [...]   2017-01-26T18:05:36.418734949Z*   [{5 enterprise-data-02:8088} {6 enterprise-data-03:8088}]

可看到迁移的分片仅有两个owner,与复制因子保持一致。

方案2

该方案增加复制因子不变,新加入节点起到提高集群可用性或增加查询吞吐量的作用。

再次说明,假设原data节点有enterprise-data-01enterprise-data-02两个,数据库的复制因子为2,新加入节点为enterprise-data-03.

步骤1:更新保留策略

在这一步,更新每个保留策略,将复制因子从2变为3,保证系统自动将新创建的分片分布在3个data节点上。

执行命令:

curl -XPOST "http://enterprise-data-02:8086/query" --header 'Authorization: Bearer someToken' --data-urlencode "q=ALTER RETENTION POLICY autogen ON telegraf REPLICATION 3"

查看更改后的结果:

curl -XPOST "http://enterprise-data-02:8086/query" --header 'Authorization: Bearer someToken' --data-urlencode "q=SHOW RETENTION POLICIES ON telegraf"

预期输出:

{"results":[{"statement_id":0,"series":[{"columns":["name","duration","shardGroupDuration","replicaN","default"],"values":[["autogen","0s","168h0m0s",3👍,true]]}]}]}
步骤2:截断热分片

热分片指的是正在接收写入请求的分片。执行以下命令,集群将自动创建一个分布在所有data节点上的分片接收新写入的请求,除此之外的分片将变为冷分片:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' truncate-shards

预期输出:

Truncated shards.

执行该命令后,保证了数据的一致性,可对所有冷分片调整在集群节点上的分布情况,而任何热碎片或新碎片现在都均匀分布在集群中,不需要进一步干预。

步骤3:确认冷分片情况

在加入了新的data节点且复制因子不变的情况下,每个节点所拥有的分片需要进行调整。这一步需要确认哪些分片需要复制到新节点上,而哪些分片需要从旧节点上移除。

在这一步,没有具体的要求和算法规定哪些分片要迁移到新节点上,只需要在加入新节点后,冷分片数量在各个节点上分布大致均匀,或者根据机器性能差异,达到每个机器cpu、内存即可。

因为方案2更改了复制因子,冷分片数量需要和复制因子保持一致,因此以下步骤仅需要复制冷分片到新节点上,不需要从原节点移除。

执行命令查看分片在集群的分布情况:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' show-shards

预期输出:

Shards
==========
ID   Database    Retention Policy   Desired Replicas   [...]   End                               Owners
21   telegraf    autogen            3                  [...]   2017-01-26T18:00:00Z              [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088}]
22   telegraf    autogen            3                  [...]   2017-01-26T18:05:36.418734949Z*   [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088}]
24   telegraf    autogen            3                  [...]   2017-01-26T19:00:00Z              [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088} {6 enterprise-data-03:8088}]

执行命令查看本地节点的分片信息:

find /var/lib/data/ -mindepth 3 -type d -exec du -h {} \;
步骤4:复制分片

执行命令:

# Pattern
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret <internal-share-secret> copy-shard <source_TCP_address> <destination_TCP_address> <shard_ID>

# Example
./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey'  copy-shard enterprise-data-01:8088 enterprise-data-03:8088 22

预期输出:

Copied shard <shard_ID> from <source_TCP_address> to <destination_TCP_address>
步骤5:确认集群重平衡

执行命令查看分片在集群的分布情况:

./influxd-ctl -bind "localhost:8091" -auth-type jwt -secret 'someSecretKey' show-shards

预期输出:

Shards
==========
ID   Database    Retention Policy   Desired Replicas   [...]   End                               Owners
22   telegraf    autogen            3                  [...]   2017-01-26T18:05:36.418734949Z*   [{4 enterprise-data-01:8088} {5 enterprise-data-02:8088} {6 enterprise-data-03:8088}]

确认本地节点的分片文件,分片文件位于:

/var/lib/data/<database>/<retention_policy>/<shard_ID>

举个例子,查看22号分片文件信息:

# On the source data node (enterprise-data-01)

~# ls /var/lib/data/telegraf/autogen/22
000000001-000000001.tsm # 👍

# On the new data node (enterprise-data-03)

~# ls /var/lib/data/telegraf/autogen/22
000000001-000000001.tsm # 👍

分片复制后,需要同时确认show-shards命令和本地分片文件中被复制的分片信息正常,二者缺一不可。如果出现异常情况,需要再次执行步骤4.

可以看到,复制后的冷分片副本数量和复制因子保持一致,集群达到了重平衡。

更换节点

参考

wiki: Home · chengshiwen/influxdb-cluster Wiki · GitHub

集群重平衡:Rebalance InfluxDB Enterprise clusters

更换节点:Replace InfluxDB Enterprise cluster meta nodes and data nodes | InfluxDB Enterprise 1.8 Documentation (influxdata.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值