# 集群操作

# 1、功能概述

开发sudis_adm命令行程序,是用作Sudis Cluster Manager(以下简称 manager)的客户端。用户可通过sudis_adm向manage、agent发送约定好的消息,进而操作集群。

# 2、安装使用

sudis_adm是编译好的Linux命令行程序,伴随sudis的安装,会出现在/opt/sudis/bin目录下,若系统权限允许,可直接运行。

# 3、功能列表

# 3.1、Agent服务

# 命令列表

命令 说明
ping ping agent
createmanager 创建manager服务,创建成功时自动启动
getmachinestats 获取物理机器的资源使用情况
gethoststats 获取服务的资源占用情况
startmanager 使用配置文件启动主从manager
stopmanger 停止一个manager

# 命令详细说明:

  • # ping

    该命令用于ping agent服务是否可连接,用于操作集群

    参数说明:

    • --addr:agent服务地址,格式为:ip:port

    示例:ping 地址为127.0.0.1 端口号为16384的agent服务

    /opt/sudis/bin/sudis_adm agent ping --addr 127.0.0.1:16384
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent ping --addr 127.0.0.1:16384
    meta:
      id: 10
      code: 0
      msg: Success
    

  • # createmanager

    该命令用于创建集群管理服务manager

    参数说明:

    • --port:通过此端口连接agent(默认为16384)
    • --master:主管理器的IP地址,格式为:ip:port:agentport
    • --slave:从管理器的IP地址,格式为:ip:port:agentport

    示例:创建一个manager主机端口为16667,从机端口为16668

    /opt/sudis/bin/sudis_adm agent createmanager --master 127.0.0.1:16667:16384 --slave 127.0.0.1:16668:16384
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent createmanager --master 127.0.0.1:16667:16384 --slave 127.0.0.1:16668:16384
    meta:
      id: 11
      code: 0
      msg: Success
    

  • # getmachinestats

    该命令用于获取agent机器的资源使用情况

    参数说明:

    • --addr:通过此端口连接agent(默认为16384)

    示例:获取主机为127.0.0.1端口号为16384的agent主机资源使用情况

    /opt/sudis/bin/sudis_adm agent getmachinestats --addr 127.0.0.1:16384
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent getmachinestats --addr 127.0.0.1:16384
    meta:
      id: 17
      code: 0
      msg: Success
    stats:
      cpu_stats:
        idle: 99.3700027
      mem_stats:
        total_size: 67265400832
        avail_size: 45177835520
      stor_stats:
        total_size: 48842928128
        avail_size: 26244808704
    sudis_instances: 7
    host_name: web2
    

  • # gethoststats

    该命令用于获取agent机器的资源占用情况

    参数说明:

    • --addr:要连接的agent地址
    • --port:需要查询的服务端口

    示例:获取主机为127.0.0.1端口号为16384的agent主机的10001端口资源占用情况

    /opt/sudis/bin/sudis_adm agent gethoststats --addr 127.0.0.1:16384 --port 10001
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent gethoststats --addr 127.0.0.1:16384 --port 10001
    meta:
      id: 12
      code: 0
      msg: Success
    stats:
      cpu_stats:
        idle: 100
      mem_stats:
        total_size: 67265400832
        avail_size: 660979712
      stor_stats:
        total_size: 0
        avail_size: 0
    

  • # startmanager

    该命令用于启动主从manager

    参数说明:

    • --dirid: 可选,指定启动manager的目录id,可选1、2,默认1;用于在测试环境下,两个manager需要被部署在同一台机器上时,是启动1还是2;当addrs提供两个地址时,该参数无效
    • --addrs: 主从manager所在机器上的agent地址,eg:192.168.1.1:16384 192.168.1.2:16384,允许一次只启动一个cms,提供一个地址即可

    示例:启动127.0.0.1机器上的manager

    /opt/sudis/bin/sudis_adm agent startmanager --addrs 127.0.0.1:16384
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent startmanager --addrs 127.0.0.1:16384
    meta:
      id: 18
      code: 0
      msg: Success
    

  • # stopmanger

    该命令用于停止一个manager

    参数说明:

    • --addr:manager所在机器上的agent地址+manager端口,eg: 127.0.0.1:16384:16667

    示例:停止16667主

    /opt/sudis/bin/sudis_adm agent stopmanager --addr 127.0.0.1:16384:16667
    
    [sudis@web2 bin]$/opt/sudis/bin/sudis_adm agent stopmanager --addr 127.0.0.1:16384:16667
    meta:
      id: 18
      code: 0
      msg: Success
    

# 3.2、Manager服务

# 命令列表

命令 说明
--addr 可选,指定manager地址与端口号,默认127.0.0.1:16667,注意:manager相关命令必须发送给manager master,如果默认地址不对,请携带这个参数
listmanagers 获取主从manager信息(ip、port、role、state、cfg_path)
listclusters 获取当前manager上的所有集群的id及name
createcluster 创建集群,必须满足hostsnumber = master+slave*master
showcluster 获取cluster信息
scaleupcluster 集群扩容
scaledowncluster 集群缩容
deletecluster 删除id为cluster_id的集群,若集群未停止,会先stop
listhosts 显示集群所包含的hosts信息
addhost 增加节点到指定cluster,作为谁的slave
removehost 移除cluster_id上节点id为host_id的host
listslots 显示集群上从offset开始的count个slots信息(keys、datasize)
assignslots 手动分派slots,createcluster后,可使用此命令修改默认分配
migrateslot 迁移slot到新host
startcluster 启动cluster服务
stopcluster 停止cluster服务

# 命令详细说明:

  • # --addr

    可选,指定manager地址与端口号,默认为127.0.0.1:16667,命令使用master执行

  • # listmanagers

    获取manager信息

    示例:获取主机为127.0.0.1端口号为16667的manager信息

    /opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 listmanagers
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listmanagers
    meta:
      id: 20
      code: 0
      msg: Success
    id: 0
    port: 16667
    ip_addr: 127.0.0.1
    role: HOST_ROLE_MANAGER_MASTER
    state: 2
    cfg_path: /opt/sudis/cms/1/manager_config.yaml
    peer_port: 16668
    peer_ip_addr: 127.0.0.1
    
  • # listclusters

    获取当前manager上的所有集群列表

    示例:获取主机为127.0.0.1端口号为16667的manager的集群列表

    /opt/sudis/bin/sudis_adm manager listclusters
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listclusters
    meta:
      id: 6
      code: 0
      msg: Success
    identitys:
      - name: clustertest
        cluster_id: 1
    
  • # createcluster

    创建集群

    参数说明:

    • --type:可选,集群类型,参数可填0或1,默认是0;0:cluster 1:sentinel
    • --name:可选,集群名称
    • --port:可选,在data node使用的统一data port时使用
    • --hosts: ip1:agentport1[:dataport1] ··· 节点ip及及对应机器上的agent port[及节点data port]
    • --masternum:主节点个数
    • --replicas:每个主节点所带从节点个数

    示例:创建一个集群四个节点,两主两从

    /opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 createcluster --name clustertest2 --masternum 2 --replicas 1 --hosts 127.0.0.1:16384:9996 127.0.0.1:16384:9995 127.0.0.1:16384:9994 127.0.0.1:16384:9993
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager --addr 127.0.0.1:16667 createcluster --name clustertest2 --masternum 2 --replicas 1 --hosts 127.0.0.1:16384:9996 127.0.0.1:16384:9995 127.0.0.1:16384:9994 127.0.0.1:16384:9993
    meta:
      id: 1
      code: 0
      msg: Success
    cluster_id: 2
    
  • # showcluster

    获取指定集群详细信息

    参数说明:

    • --cluster_id:集群ID

    示例:获取ID为2的集群详细信息

    /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 2
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager showcluster --cluster_id 2
    meta:
      id: 2
      code: 0
      msg: Success
    state: 1
    config:
      name: clustertest2
      master_num: 2
      replica: 1
    db_usage:
      keys: 0
      data_size: 0
    hosts_details:
      - host:
          id: 1
          port: 9996
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_MASTER
        state: NODE_STATE_INIT
        slots_str: "[0,8191]"
        master_id: 0
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 2
          port: 9995
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_SLAVE
        state: NODE_STATE_INIT
        slots_str: ""
        master_id: 1
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 3
          port: 9994
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_MASTER
        state: NODE_STATE_INIT
        slots_str: "[8192,16383]"
        master_id: 0
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 4
          port: 9993
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_SLAVE
        state: NODE_STATE_INIT
        slots_str: ""
        master_id: 3
        db_usage:
          keys: 0
          data_size: 0
    
  • # listhosts

    获取指定集群的hosts信息

    参数说明:

    • --cluster_id:集群ID

    示例:获取ID为2的集群的hosts信息

    /opt/sudis/bin/sudis_adm manager listhosts --cluster_id 2
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listhosts --cluster_id 2
    meta:
      id: 5
      code: 0
      msg: Success
    hosts_details:
      - host:
          id: 1
          port: 9996
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_MASTER
        state: NODE_STATE_INIT
        slots_str: "[0,8191]"
        master_id: 1
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 2
          port: 9995
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_SLAVE
        state: NODE_STATE_INIT
        slots_str: ""
        master_id: 1
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 3
          port: 9994
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_MASTER
        state: NODE_STATE_INIT
        slots_str: "[8192,16383]"
        master_id: 3
        db_usage:
          keys: 0
          data_size: 0
      - host:
          id: 4
          port: 9993
          ip_addr: 127.0.0.1
          agent_port: 16384
        role: HOST_ROLE_DATA_SLAVE
        state: NODE_STATE_INIT
        slots_str: ""
        master_id: 3
        db_usage:
          keys: 0
          data_size: 0
    
  • # addhost

    为指定的集群增加节点

    参数说明:

    • --cluster_id:集群ID
    • --host: 需要增加的节点的ip:agentport:dataport

    示例:为集群ID为2的集群增加一个节点

    /opt/sudis/bin/sudis_adm manager addhost --cluster_id 2 --host 127.0.0.1:16384:9992
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager addhost --cluster_id 2 --host 127.0.0.1:16384:9992
    meta:
      id: 7
      code: 0
      msg: Success
    host_id: 5
    
  • # removehost

    移除指定集群上的节点

    参数说明:

    • --cluster_id:集群ID
    • --host_id: 需要移除的host_id

    示例:移除ID为2集群上host_id为5的节点

    /opt/sudis/bin/sudis_adm manager removehost --cluster_id 2 --host_id 5
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager removehost --cluster_id 2 --host_id 5
    meta:
      id: 8
      code: 0
      msg: Success
    
  • # listslots

    显示指定集群上从offset开始的count个slots信息

    参数说明:

    • --cluster_id:集群ID
    • --offset:可选,起始位置
    • --count:可选,长度

    示例:获取集群ID为2区间为1024-1028的slots信息

    /opt/sudis/bin/sudis_adm manager listslots --cluster_id 2 --offset 1024 --count 5
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager listslots --cluster_id 2 --offset 1024 --count 5
    meta:
      id: 9
      code: 0
      msg: Success
    slots:
      - id: 1024
        host_id: 1
        keys: 0
        data_size: 0
      - id: 1025
        host_id: 1
        keys: 0
        data_size: 0
      - id: 1026
        host_id: 1
        keys: 0
        data_size: 0
      - id: 1027
        host_id: 1
        keys: 0
        data_size: 0
      - id: 1028
        host_id: 1
        keys: 0
        data_size: 0
    
  • # assignslots

    手动分配slots,在创建集群之后,启动之前使用

    参数说明:

    • --cluster_id:集群ID
    • --slots_range:slots区间
    • --host_id:master节点ID

    示例:将集群ID为2的1024-8191slots分配给ID为3的master

    /opt/sudis/bin/sudis_adm manager assignslots --cluster_id 2 --slots_range [1024,8191] --host_id 3
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager assignslots --cluster_id 2 --slots_range [1024,8191] --host_id 3
    meta:
      id: 13
      code: 0
      msg: Success
    
  • # startcluster

    启动指定集群

    参数说明:

    • --cluster_id:集群ID

    示例:启动ID为2的集群

    /opt/sudis/bin/sudis_adm manager startcluster --cluster_id 2
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager startcluster --cluster_id 2
    meta:
      id: 15
      code: 0
      msg: Success
    
  • # stopcluster

    停止指定集群

    参数说明:

    • --cluster_id:集群ID

    示例:停止ID为2的集群

    /opt/sudis/bin/sudis_adm manager stopcluster --cluster_id 2
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager stopcluster --cluster_id 2
    meta:
      id: 16
      code: 0
      msg: Success
    
  • # deletecluster

    删除指定集群

    参数说明:

    • --cluster_id:集群ID

    示例:删除ID为2的集群

    /opt/sudis/bin/sudis_adm manager deletecluster --cluster_id 2
    
    [sudis@web2 ~]$/opt/sudis/bin/sudis_adm manager deletecluster --cluster_id 2
    meta:
      id: 4
      code: 0
      msg: Successs
    
  • # scaleupcluster

    集群扩容

    参数说明:

    • --cluster_id: 集群ID
    • --hosts: 新增节点(ip:agentport:dataport)

    示例:为ID为1的集群新增2个节点

    /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.215:16384:10001 192.168.1.220:16384:10001
    
    [root@192-168-1-213 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.215:16384:10001 192.168.1.220:16384:10001
    meta:
      id: 3
      code: 0
      msg: Success
    host_id:
      - 3
      - 4
    
  • # scaledowncluster

    集群缩容

    参数说明:

    • --cluster_id: 集群ID
    • --host_id: 集群节点ID

    示例:对集群中master节点3进行缩容

    /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaledowncluster --cluster_id 1 --host_id 3
    
    [root@192-168-1-213 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.213:16667 scaledowncluster --cluster_id 1 --host_id 3 4
    meta:
      id: 18
      code: 0
      msg: Success
    

# 3.3、集群扩缩容场景演示

# 准备机器

ip示例:192.168.1.225、192.168.1.226、192.168.1.227、192.168.1.228。

准备2台机器,用于创建一主一从的集群。

IP为:192.168.1.225、192.168.1.226。

# 启动agent服务

启动192.168.1.225、192.168.1.226的agent服务

[root@192-168-1-225 ~]# systemctl start sudis_agent

# 查看状态

[root@192-168-1-225 ~]# systemctl status sudis_agent
● sudis_agent.service - sudis_agent Service
  Loaded: loaded (/usr/lib/systemd/system/sudis_agent.service; linked; vendor preset: disabled)
  Active: active (running) since Wed 2024-06-26 18:21:52 CST; 1 day 20h ago
Main PID: 3865353 (sudis_agent)
   Tasks: 12 (limit: 23672)
  Memory: 76.1M
  CGroup: /system.slice/sudis_agent.service
          └─3865353 /opt/sudis/bin/sudis_agent -c /opt/sudis/agent/agent_config.yaml

# 创建manager服务

在192.168.1.225机器上创建manager服务

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm agent createmanager --master 192.168.1.225:16667:16384 --slave 192.168.1.226:16668:16384
meta:
 id: 11
 code: 0
 msg: Success

在192.168.1.225上查看主从manager信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager listmanagers
meta:
 id: 20
 code: 0
 msg: Success
id: 0
port: 16667
agent_port: 16384
ip_addr: 192.168.1.225
role: HOST_ROLE_MANAGER_MASTER
state: 2
cfg_path: /opt/sudis/cms/1/manager_config.yaml
peer_port: 16668
peer_ip_addr: 192.168.1.226

# 创建1主1从集群

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 createcluster --name testcluster --masternum 1 --replicas 1 --hosts 192.168.1.225:16384:10001 192.168.1.226:16384:10001
meta:
 id: 1
 code: 0
 msg: Success
cluster_id: 1

查看集群创建信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 listclusters
meta:
 id: 6
 code: 0
 msg: Success
identitys:
 - name: testcluster
   cluster_id: 1

查看集群详细信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
 id: 2
 code: 0
 msg: Success
state: 1
config:
 type: CLUSTER_TYPE_CLUSTER
 name: testcluster
 master_num: 1
 replica: 1
db_usage:
 keys: 0
 data_size: 0
hosts_details:
 - host:
     id: 1
     port: 10001
     ip_addr: 192.168.1.225
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_MASTER
   state: NODE_STATE_INIT
   slots_str: "[0,16383]"
   master_id: 0
   db_usage:
     keys: 0
     data_size: 0
 - host:
     id: 2
     port: 10002
     ip_addr: 192.168.1.226
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_SLAVE
   state: NODE_STATE_INIT
   slots_str: ""
   master_id: 1
   db_usage:
     keys: 0
     data_size: 0

# 启动集群

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager startcluster --cluster_id 1
meta:
 id: 15
 code: 0
 msg: Success

查看集群详细信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
 id: 2
 code: 0
 msg: Success
state: 4
config:
 type: CLUSTER_TYPE_CLUSTER
 name: testcluster
 master_num: 1
 replica: 1
db_usage:
 keys: 0
 data_size: 0
hosts_details:
 - host:
     id: 1
     port: 10001
     ip_addr: 192.168.1.225
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_MASTER
   state: NODE_STATE_OK
   slots_str: "[0,16383]"
   master_id: 0
   db_usage:
     keys: 0
     data_size: 0
 - host:
     id: 2
     port: 10002
     ip_addr: 192.168.1.226
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_SLAVE
   state: NODE_STATE_OK
   slots_str: ""
   master_id: 1
   db_usage:
     keys: 0
     data_size: 0

# 扩展集群

1、在192.168.1.225机器上进行扩展

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.225:16667 scaleupcluster --cluster_id 1 --hosts 192.168.1.227:16384:10001 192.168.1.228:16384:10001
meta:
 id: 3
 code: 0
 msg: Success
host_id:
 - 3
 - 4

查看集群的日志

1、当日志停止后代表扩容成功

[root@192-168-1-225 ~]# tail -f /opt/sudis/cms/1/cluster_service.log

扩容成功后查看集群信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
 id: 2
 code: 0
 msg: Success
state: 5
config:
 type: CLUSTER_TYPE_CLUSTER
 name: mytest
 master_num: 2
 replica: 1
db_usage:
 keys: 56550
 data_size: 7843671
hosts_details:
 - host:
     id: 1
     port: 10001
     ip_addr: 192.168.1.225
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_MASTER
   state: NODE_STATE_OK
   slots_str: "[109,16383]"
   master_id: 0
   db_usage:
     keys: 0
     data_size: 0
 - host:
     id: 2
     port: 10001
     ip_addr: 192.168.1.226
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_SLAVE
   state: NODE_STATE_OK
   slots_str: ""
   master_id: 1
   db_usage:
     keys: 0
     data_size: 0
 - host:
     id: 3
     port: 10001
     ip_addr: 192.168.1.227
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_MASTER
   state: NODE_STATE_OK
   slots_str: "[0,108]"
   master_id: 0
   db_usage:
     keys: 56550
     data_size: 7843671
 - host:
     id: 4
     port: 10001
     ip_addr: 192.168.1.228
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_SLAVE
   state: NODE_STATE_OK
   slots_str: ""
   master_id: 5
   db_usage:
     keys: 0
     data_size: 0

# 缩容集群

执行缩容命令

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager --addr 192.168.1.215:16667 scaledowncluster --cluster_id 1 --host_id 3
meta:
 id: 18
 code: 0
 msg: Success

查看225的cms log日志

1、当日志停止后代表缩容成功

[root@192-168-1-225 ~]# tail -f /opt/sudis/cms/1/cluster_service.log

缩容后查看集群详细信息

[root@192-168-1-225 ~]# /opt/sudis/bin/sudis_adm manager showcluster --cluster_id 1
meta:
 id: 2
 code: 0
 msg: Success
state: 4
config:
 type: CLUSTER_TYPE_CLUSTER
 name: testcluster
 master_num: 1
 replica: 1
db_usage:
 keys: 0
 data_size: 0
hosts_details:
 - host:
     id: 1
     port: 10001
     ip_addr: 192.168.1.225
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_MASTER
   state: NODE_STATE_OK
   slots_str: "[0,16383]"
   master_id: 0
   db_usage:
     keys: 0
     data_size: 0
 - host:
     id: 2
     port: 10002
     ip_addr: 192.168.1.226
     agent_port: 16384
     cport: 0
   role: HOST_ROLE_DATA_SLAVE
   state: NODE_STATE_OK
   slots_str: ""
   master_id: 1
   db_usage:
     keys: 0
     data_size: 0