数据节点

概念

数据节点为一种逻辑节点,其中保存用户数据信息。

数据节点中没有专门的编目信息集合,因此第一次访问集合前需要向编目节点请求该集合的元数据信息。

在独立模式中,数据节点为单独的服务提供者,直接与应用程序或客户端进行通讯,并且不需要访问任何编目信息。

在集群模式中,数据节点属于某个数据分区组,可参考 分区组

管理数据节点

新增数据分区组

如果新增节点涉及到新增主机,用户需先按照在集群中新增主机一节完成主机的主机名和参数配置。

一个集群中可以配置多个分区组。通过增加分区组,可以充分利用物理设备进行水平扩展。

  • 操作方法:
  1. 建数据分区组,与编目分区组不同的是,该操作不会创建任何数据节点,其中参数为数据组名:

    1. > var dataRG = db.createRG( "datagroup1" )

    Note:

    更多创建数据分区组的内容,可参考 Sdb.createRG()

  2. 数据组中新增一个数据节点,可以根据需要多次执行该命令来创建多个数据节点:

    1. > dataRG.createNode( "sdbserver1", 11820, "/opt/sequoiadb/database/data/11820" )

    其中:

    • host:指定数据节点的主机名;

    • service:指定数据节点的服务端口;用户需确保该端口号,以及往后延续的五个端口号未被占用。如设置为11820,请确保11820/11821/11822/11823/11824/11825端口都未被占用;

    • dbpath:数据文件路径用于存放数据节点的数据文件,需确保数据管理员(安装时创建,默认为sdbadmin)用户有写权限;

    • config:该参数为可选参数,用于配置更多细节参数,格式必须为 json 格式,参数参见数据库配置一节;如需要配置日志大小参数{logfilesz:64}。

    Note:

    更多创建节点的内容,可参考 SdbReplicaGroup.createNode()

  3. 启动数据节点:

    1. > dataRG.start()

分区组中新增节点

如果新增节点涉及到新增主机,用户需按照在集群中新增主机一节完成主机的主机名和参数配置。

某些分区组可能在创建时设定的副本数较少,随着物理设备的增加,可能需要增加副本数以提高分区组数据可靠性。

  • 操作方法:
  1. 取数据分区组,参数 groupname 为数据分区组组名:

    1. > var dataRG = db.getRG( <groupname> )
  2. 创建一个新的数据节点:

    1. > var node1 = dataRG.createNode( <host>, <service>, <dbpath>, [config] )
  3. 启动新增的数据节点:

    1. > node1.start()

Note:

创建数据节点组和部署数据节点的详细内容可参考 集群模式

查看数据节点

在 Sdb Shell 中可以查看某个的数据分区组中数据节点的列表,其中参数 groupname 为数据分区组组名:

  1. > db.getRG( <groupname> ).getDetail()

故障恢复

数据节点发生故障后,重新启动时会自动检测数据库目录下 .SEQUOIADB_STARTUP 隐藏文件。

如果该文件存在则说明上次的执行意外终止(例如 kill -9)。对于意外终止的节点,系统会将该数据节点置入崩溃恢复状态。

在崩溃恢复的过程中,数据节点会与该组中的一个正常节点进行全量同步。在这种情况下,被恢复的节点中所有数据作废,同步到的新数据作为基准。可参考 全量同步

假设该节点没有被意外终止(例如kill -15),则进入增量同步状态。在这种情况下,如果当前其它数据节点中包含的最老日志已经比被恢复节点新,则进入全量同步状态,否则只同步增量日志。可参考 数据复制

如果该数据组中所有节点都被意外终止,则需要以独立模式启动一个节点进行本地恢复。在该模式中,数据会被导出并再次导入,以过滤掉所有可能出现的数据损坏。当其中一个节点被本地恢复后,需要将其数据目录拷贝入其它所有数据节点。

Note:

用户可以通过数据的 备份恢复 降低数据丢失的风险。