DolphinDB集群如何扩展节点和存储
本页是一篇说明DolphinDB集群如何扩展节点与存储的文章,并提供作者与发布日期信息。
Source: https://dolphindb.cn/blogs/74
What this page covers
- 扩容背景与总体思路(增加节点与单节点扩存)。
- 集群角色与扩展机制(默认目录、配置生效方式等)。
- 涉及的配置文件与操作方式(含Web管理界面)。
- 示例:新增物理机与数据节点的步骤与验证。
- 示例:通过volumes扩展单节点存储与验证。
- 常见问题:DFS Explorer观察与Recovery机制参数。
技能认证特训营第二期限时报名
页面顶部包含活动报名提示与报名链接。
- 该部分用于引导读者进行活动报名。
- 该部分提供报名入口链接信息。
DolphinDB集群如何扩展节点和存储(作者与日期)
该部分给出文章标题、作者名与发布日期信息。
- 文章主题为DolphinDB集群扩展节点与存储。
- 文章发布日期为2021-08-05。
概述
说明上线前容量规划与业务增长带来的扩容需求,并指出可通过增加节点扩展计算与容量,也支持单节点扩存。
- 扩容需求可能来自业务增长与容量规划调整。
- DolphinDB节点将计算与存储集成在同一节点上。
- 增加节点可用于提升计算能力与数据容量。
- 也支持对原有节点单独增加存储。
扩展机制
介绍集群角色与扩展节点/扩展存储的基本机制,包括默认存储目录与配置生效方式等。
- DolphinDB集群由Controller、Agent、Data Node三个角色组成。
- Controller负责管理集群元数据,并提供Web集群管理工具。
- Agent部署在每台物理机上,负责本机节点的启动和停止。
- Data Node是计算和数据节点。
- 扩展节点需要修改配置文件,并通过Controller重启载入新配置。
- 新增节点启动后,其计算能力会即时纳入集群资源统筹。
- 新增Data Node默认以[Home Dir]/[Data Node Alias]/storage作为存储区域。
- 新节点启动后默认存储目录会被自动创建并初始化。
方法
说明扩展节点与扩展存储涉及的配置文件,以及通过新增Agent、修改配置并在Web界面启停的总体方式。
- controller.cfg用于定义控制节点相关配置。
- cluster.cfg用于配置集群内每个节点的个性化配置。
- cluster.nodes用于定义节点与代理清单,供Controller获取节点信息。
- agent.cfg用于定义代理节点属性,并部署在各物理机上。
- 在新物理机部署Agent后,可通过Web界面完成详细配置与节点启停。
- volumes属性支持用逗号分隔指定多个存储目录。
扩展节点
以示例集群为背景,给出新增物理机与新增数据节点的配置、重启步骤与验证方式。
- 示例原集群为4台服务器,操作系统为ubuntu 16.04。
- 示例环境使用的DolphinDB版本为0.7。
- 示例拓扑包含controller与datanode1/2/3的IP映射。
- 扩展目标是新增一台服务器作为新节点以增加计算和存储能力。
- 新增物理机IP为172.18.0.14。
- 新增数据节点标识为172.18.0.14:8804:datanode4。
- 新增机器的Agent配置包含localSite与controllerSite等参数示例。
- cluster.nodes示例中新增agent4与node4条目。
- 示例中通过Web管理界面地址http://172.18.0.10:8990观察与管理集群。
- 示例重启步骤包含关闭Controller(pkill dolphindb)并等待端口释放。
- 重启后Web界面可见新增agent4为已启动状态,并可启动所有节点。
- 验证示例通过向scaleoutTB追加id为1001..1500的数据。
- 在DFS Explorer中可观察到数据分布到新的node4节点上。
扩展存储
描述为node3新增磁盘并通过volumes配置或动态添加使其生效,并给出写入验证方法与结果。
- 示例背景为node3所在服务器磁盘空间不足,需要扩展磁盘/dev/disk2。
- 节点存储可通过配置文件中的volumes属性配置。
- 未配置volumes时默认路径为[HomeDir]/[Data Node Alias]/Storage(示例为data/node3/storage)。
- 设置volumes时必须显式包含原默认路径,否则可能导致元数据丢失。
- 可在controller执行loadClusterNodesConfigs()以重新载入节点配置。
- 示例中配置完成后无需重启controller,只需重启node3使配置生效。
- 可在node3执行addVolumes("/dev/disk2/node3")动态添加存储并立即生效。
- addVolumes的效果不持久化,重启后会被配置覆盖。
- 验证示例通过向scaleoutTB追加id为1501..2000的数据。
- 示例中通过观察磁盘路径确认数据已写入。
- 示例新增路径下会自动生成CHUNKS、CHUNK_METADATA、DATABASE及LOG等目录。
常见问题
解释DFS Explorer中site变化与Recovery机制的关系,并列出相关配置项、默认值与建议。
- 集群支持数据自动Recovery机制。
- 当检测到节点长时间无心跳并判定宕机时,会从其他副本恢复数据。
- 数据稳定的前提是宕机节点数少于系统设置的数据副本数。
- dfsReplicationFactor表示数据副本数,示例为2(默认2)。
- dfsRecoveryWaitTime用于控制recovery启动,单位为ms。
- 文中说明默认不设置即关闭recovery功能。
- 文中建议生产环境将dfsReplicaReliabilityLevel设置为1。
Facts index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| DolphinDB集群如何扩展节点和存储(文章) | 发布日期 | 2021-08-05 | high |
| DolphinDB | 节点架构特性 | 节点集计算和存储于一体;增加计算能力和数据容量可通过增加节点实现;也支持对原有节点单独增加存储。 | high |
| DolphinDB集群 | 组成角色 | 由控制节点(Controller)、代理节点(Agent)、数据节点(Data Node)三个角色组成。 | high |
| Controller(控制节点) | 职责 | 负责管理集群元数据,并提供Web集群管理工具。 | high |
| Agent(代理节点) | 部署位置与职责 | 部署在每一台物理机上,负责本机节点的启动和停止。 | high |
| Data Node(数据节点) | 职责 | 计算和数据节点。 | high |
| DolphinDB集群扩展节点 | 生效方式 | 需要修改节点配置文件,并通过集群Controller重启来载入新的节点配置。 | high |
| 在新物理机上新增节点 | 前置要求 | 需要部署新的Agent服务负责新物理机上的节点启停。 | high |
| 新增节点加入集群后 | 计算资源纳入时效 | 新节点启动后计算能力会即时纳入集群计算资源统筹。 | medium |
| 新增Data Node默认存储目录 | 默认存储区域 | 默认将[Home Dir]/[Data Node Alias]/storage作为数据存储区域。 | high |
| [Home Dir]示例(-home data) | 路径含义 | 通过启动命令增加 -home data,使[Home Dir]指向可执行文件同级目录下的/data/目录;示例node3默认目录为 /data/node3/storage。 | high |
| 新节点存储目录初始化 | 自动化行为 | 新节点启动后默认存储目录会被自动创建并初始化用于存储集群的分布式数据。 | high |
| 仅扩展存储空间 | 操作方式 | 修改节点配置文件,为指定节点volumes属性增加路径。 | high |
| DolphinDB集群配置文件 | controller.cfg用途 | 定义控制节点相关配置,如IP端口、控制节点连接数上限等。 | high |
| DolphinDB集群配置文件 | cluster.cfg用途 | 配置集群内每个节点的个性化配置(如node3的volumes属性等)。 | high |
| DolphinDB集群配置文件 | cluster.nodes用途 | 定义集群内部的节点和代理清单;控制节点通过该文件获取集群节点信息。 | high |
| DolphinDB集群配置文件 | agent.cfg用途 | 定义代理节点属性(代理节点IP端口、所属集群控制节点等);与代理节点程序一起部署在各台物理机上。 | high |
| 扩展节点操作方式 | Web界面支持 | 新物理机上部署Agent后,详细配置与节点启停可在Web集群管理界面方便完成。 | medium |
| volumes属性 | 多目录支持 | 支持用逗号分隔指定多个存储目录;扩存时可在原volumes后追加存储目录。 | high |
| 示例原集群环境 | 服务器与系统 | 原有服务器4台,操作系统均为ubuntu 16.04。 | high |
| 示例原集群环境 | DolphinDB版本 | DolphinDB 0.7 | high |
| 示例原集群拓扑 | 节点与IP映射 | 172.18.0.10: controller;172.18.0.11: datanode1;172.18.0.12: datanode2;172.18.0.13: datanode3。 | high |
| controller.cfg(示例) | localSite配置 | localSite=172.18.0.10:8990:ctl8990 | high |
| cluster.nodes(示例) | agent与datanode条目 | 包含agent1/agent2/agent3(172.18.0.11/12/13:8701)与node1/node2/node3(172.18.0.11:8801;172.18.0.12:8802;172.18.0.13:8803)。 | high |
| 启动Controller脚本(示例) | 命令 | nohup ./dolphindb -console 0 -mode controller -script dolphindb.dos -config config/controller.cfg -logFile log/controller.log -nodesFile config/cluster.nodes & | high |
| 启动Agent脚本(示例) | 命令 | ./dolphindb -mode agent -home data -script dolphindb.dos -config config/agent.cfg -logFile log/agent.log | high |
| 示例验证数据(初始写入) | 创建并写入分布式数据库与分区表 | 创建data表(id 1..1000,name为rand(`A`B`C,1000)),创建dfs://scaleout_test_db为RANGE分区(cutPoints(1..2000,10)),创建分区表scaleoutTB并append初始数据。 | high |
| DFS Explorer | 用途(示例中) | 通过集群web界面dfs explorer观察生成的数据分布情况。 | high |
| 多物理机上部署集群教程 | 参考链接 | https://link.zhihu.com/?target=https%3A//gitee.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md | high |
| 扩容验证方法(节点/存储) | 方式 | 扩展完成后用同样方式追加数据以验证新节点和新存储是否启用。 | high |
| 本次扩展目标 | 扩容内容 | 为增加计算和存储能力,新增一台服务器加入原有集群作为新节点。 | high |
| 新增物理机 | IP | 172.18.0.14 | high |
| 新增节点信息(目标) | 地址与标识 | 172.18.0.14:8804:datanode4 | high |
| 新机器Agent配置(agent.cfg示例) | localSite | localSite=172.18.0.14:8701:agent4 | high |
| 新机器Agent配置(agent.cfg示例) | controllerSite | controllerSite=172.18.0.10:8990:ctl8990 | high |
| 新机器Agent配置(agent.cfg示例) | mode | mode=agent | high |
| cluster.nodes扩容配置(示例) | 新增Agent条目 | 172.18.0.14:8704:agent4,agent | high |
| cluster.nodes扩容配置(示例) | 新增Data Node条目 | 172.18.0.14:8804:node4,datanode | high |
| 重启集群步骤(示例) | Web管理界面地址 | http://172.18.0.10:8990 | high |
| 重启集群步骤(示例) | 关闭Controller命令 | pkill dolphindb | high |
| 重启集群步骤(示例) | 等待时间 | 等待半分钟之后(等待端口释放,时间可能因操作系统不同)。 | medium |
| 重启后Web界面观察(示例) | 状态变化 | 可看到新增agent4且为已启动状态,并可在Web界面启动所有节点。 | medium |
| 扩展节点验证写入(示例) | 追加数据范围 | 向scaleoutTB追加id为1001..1500的数据(500行)。 | high |
| 扩展节点验证结果(示例) | 数据分布 | 在dfs explorer中可看到数据已分布到新的node4节点上。 | medium |
| 扩展存储背景(示例) | 原因与目标 | node3所在服务器磁盘空间不足,扩展一块磁盘(路径为/dev/disk2)并纳入node3存储。 | high |
| 节点存储配置 | volumes属性作用 | 节点存储可通过配置文件中的volumes属性配置。 | high |
| 默认存储路径(未配置volumes时) | 默认值 | 默认存储路径为[HomeDir]/[Data Node Alias]/Storage;本例为 data/node3/storage。 | high |
| 从默认路径增加磁盘的配置注意事项 | 风险 | 设置volumes属性时必须显式包含原默认路径,否则会导致默认路径下元数据丢失。 | high |
| cluster.cfg(示例) | node3默认volumes行 | node3.volumes=data/node3/storage | high |
| Controller重载节点配置(示例) | 函数 | 在controller上执行loadClusterNodesConfigs()使Controller重新载入节点配置。 | high |
| Web界面配置的重载行为 | 自动化 | 若在集群管理web界面完成上述步骤,重载过程会自动完成,无需手工执行。 | medium |
| 存储扩展配置生效方式(示例) | 重启要求 | 配置完成后无需重启controller,只需在web界面重启node3节点使新配置生效。 | high |
| addVolumes函数 | 用途与持久化 | 可在node3执行addVolumes("/dev/disk2/node3")动态添加volumes使新存储马上生效;效果不持久化,重启后会被新配置覆盖。 | high |
| 扩展存储验证写入(示例) | 追加数据范围 | 向scaleoutTB追加id为1501..2000的数据(500行)。 | high |
| 扩展存储验证结果(示例) | 磁盘写入 | 到磁盘路径下观察数据已被写入。 | medium |
| 新增存储路径目录结构(示例) | 生成内容 | 在/dev/disk2/node3下自动生成CHUNKS、CHUNK_METADATA、DATABASE及LOG等文件夹。 | medium |
| DolphinDB Recovery机制 | 能力 | 集群支持数据自动Recovery机制;当检测到部分节点长时间无心跳(判定宕机)时,会从其他副本自动恢复数据并保持副本数稳定。 | high |
| Recovery导致的数据迁移前提(文中说明) | 条件 | 数据稳定的前提是宕掉的节点数少于系统设置的数据副本数。 | high |
| controller.cfg参数 | dfsReplicationFactor默认值与含义 | dfsReplicationFactor=2;表示集群内每个数据副本数,默认2。 | high |
| controller.cfg参数 | dfsReplicaReliabilityLevel默认值与含义(文中注释) | dfsReplicaReliabilityLevel=1;注释描述“0 多个副本允许存在一个节点 1 多个副本必须分存到不同节点,默认0”。(页面存在“默认0”与赋值1的表述并存) | medium |
| controller.cfg参数 | dfsRecoveryWaitTime默认与示例值 | dfsRecoveryWaitTime=30000;注释称“默认不启用,单位ms”。 | medium |
| dfsRecoveryWaitTime | 作用与默认行为 | 控制recovery启动;默认不设置即关闭recovery功能;设置等待时间用于避免计划内停机维护导致不必要的recovery。 | high |
| dfsReplicationFactor建议 | 建议值 | 不建议低于2;具体设置需综合考虑节点数、稳定性需求与写入性能需求。 | medium |
| dfsReplicaReliabilityLevel建议 | 生产建议 | 生产环境建议设置为1;0建议仅用于学习或测试环境。 | high |