扩缩容#

扩容#

随着业务的发展, 当前集群的拓扑不能满足要求就需要动态的扩容。扩容就是把一部分分片从现有tablet节点迁移到新的tablet节点上从而减小内存占用

1 启动一个新的tablet节点#

按照如下步骤启动tablet节点,参考部署文档

  • 检查时间和时区,关闭THP和swap

  • 下载部署包到新的节点并解压

  • 修改conf/tablet.flags配置文件,zk_cluster和zk_root_path和集群中其他节点保持一致。修改endpoint。

  • 启动tablet

      bash bin/start.sh start tablet
    

启动后查看新增节点是否加入集群。如果执行showtablet命令列出了新节点endpoint说明已经加入到集群中

$ ./bin/openmldb --zk_cluster=172.27.128.31:8090,172.27.128.32:8090,172.27.128.33:8090 --zk_root_path=/openmldb_cluster --role=ns_client
> showtablet
  endpoint            state           age
-------------------------------------------
  172.27.128.31:8541  kTabletHealthy  15d
  172.27.128.32:8541  kTabletHealthy  15d
  172.27.128.33:8541  kTabletHealthy  15d
  172.27.128.37:8541  kTabletHealthy  1min

2 迁移副本#

自动迁移#

可以通过OpenMLDB迁移工具 scaleout命令实现自动迁移

手动迁移#

副本迁移用到的命令是migrate。命令格式: migrate src_endpoint table_name partition des_endpoint

一旦表创建好了,不能新增和减少分片,只能迁移分片。迁移的时候只能迁移从分片, 不能迁移主分片

$ ./bin/openmldb --zk_cluster=172.27.128.31:8090,172.27.128.32:8090,172.27.128.33:8090 --zk_root_path=/openmldb_cluster --role=ns_client
> use demo_db
> showtable
  name    tid  pid  endpoint            role      ttl       is_alive  compress_type  offset   record_cnt  memused
----------------------------------------------------------------------------------------------------------------------
  flow    4   0    172.27.128.32:8541  leader    0min       yes       kNoCompress    0        0           0.000
  flow    4   0    172.27.128.33:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   0    172.27.128.31:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.33:8541  leader    0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.31:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.32:8541  follower  0min       yes       kNoCompress    0        0           0.000
> migrate 172.27.128.33:8541 flow 0 172.27.128.37:8541
> showopstatus flow
  op_id  op_type     name  pid  status  start_time      execute_time  end_time        cur_task
------------------------------------------------------------------------------------------------
  51     kMigrateOP  flow  0    kDone   20180824163316  12s           20180824163328  -
> showtable
  name    tid  pid  endpoint            role      ttl       is_alive  compress_type  offset   record_cnt  memused
----------------------------------------------------------------------------------------------------------------------
  flow    4   0    172.27.128.32:8541  leader    0min       yes       kNoCompress    0        0           0.000
  flow    4   0    172.27.128.37:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   0    172.27.128.31:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.33:8541  leader    0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.31:8541  follower  0min       yes       kNoCompress    0        0           0.000
  flow    4   1    172.27.128.32:8541  follower  0min       yes       kNoCompress    0        0           0.000

说明: 迁移副本还可以用删除副本然后新增副本的方式来操作。

缩容#

缩容就是减小现有集群的节点数。

1 选定需要下线的节点#

2 将需要下线节点上的分片迁移到其他节点上#

自动迁移#

可以通过OpenMLDB迁移工具 scalein命令实现自动迁移

手动迁移#

  • 执行showtable命令查看表分片分布

  • 执行migrage命令将副本迁移到其他节点。如果要下线的节点上有leader,需要执行changeleader命令将leader切换到其他节点上才能执行migrate

3 下线节点#

执行停止命令

bash bin/start.sh stop tablet

如果该节点部署有nameserver也需要把nameserver停掉

bash bin/start.sh stop nameserver

:保持高可用至少需要两个nameserver节点