时序数据库DolphinDB高可用设计及部署教程
本文给出文章信息,并概述 DolphinDB 的高可用范围(数据、元数据、客户端)以及其强调的强一致性特性。
Source: https://dolphindb.cn/blogs/64
What this page covers
- 文章信息与核心主张(高可用范围与一致性)。
- 高可用总体机制与部署前提。
- 数据高可用:多副本、参数配置与示例说明。
- 元数据高可用:控制节点 Raft、容错与启用步骤。
- 客户端高可用:API 自动重连/切换与示例。
- 动态扩容:在线新增数据节点的流程。
- 总结:面向 24 小时不中断服务需求的定位。
技能认证特训营第二期报名入口
页面顶部包含活动报名提示与限时报名链接入口。
- 提供活动报名入口信息。
- 强调限时报名提示。
时序数据库DolphinDB高可用设计及部署教程(文章信息与核心主张)
该部分给出文章标题、作者与日期,并概述 DolphinDB 的高可用覆盖范围与强一致性主张。
- 作者署名为 Junxi。
- 发布日期为 2021-08-05。
- 提出提供数据、元数据与客户端的高可用方案。
- 强调节点故障时业务不中断的目标。
- 提出高可用方案确保强一致性,并与其它时序数据库作对比表述。
概述
概述 DolphinDB 的高可用由数据多副本、控制节点 Raft 组与 API 自动重连/切换共同实现,并说明启用前提与参考链接。
- 数据高可用使用多副本机制。
- 元数据存储在控制节点上。
- 元数据高可用通过构建控制节点 Raft 组实现。
- API 提供自动重连与自动切换机制。
- 高可用仅在集群中支持,单实例不支持。
数据高可用
本节介绍数据多副本与强一致性,说明 controller.cfg 的相关参数,并用分区与界面示例解释副本分布与容灾读写。
- 支持在不同服务器上存储多个数据副本。
- 副本之间保持强一致性。
- 副本数可通过 controller.cfg 的 dfsReplicationFactor 配置。
- 副本可靠性级别可通过 dfsReplicaReliabilityLevel 配置。
- Web 集群管理界面提供 DFS Explorer 用于查看数据分布情况。
元数据高可用
本节说明元数据位于控制节点,并通过 Raft 组实现强一致与 Leader 选举;同时给出容错条件、前置要求与启用 Raft 高可用的配置/启动步骤要点。
- 元数据包含数据块位置等信息。
- 元数据不可用时,即使数据块完整也无法正常访问数据。
- Raft 组只有一个 Leader,其它为 Follower。
- Leader 不可用时会立即选举新的 Leader 提供元数据服务。
- 控制节点数量至少为 3 个。
客户端高可用
本节描述客户端 API 在数据节点故障时的自动重连与切换,指出支持语言范围,并给出 connect 参数与 Java 示例。
- 连接的数据节点宕机时,API 会先尝试重连。
- 重连失败时,API 会自动切换到其他可用数据节点执行任务。
- 该切换过程对用户透明。
- 目前只有 Java 和 Python API 支持高可用。
- connect 方法通过 highAvailability 参数启用高可用(设置为 true)。
动态增加数据节点
本节说明可通过 addNode 在线新增数据节点而无需重启集群,并给出在新服务器部署代理节点、更新配置、启动与执行 addNode 的流程与结果提示。
- 可使用 addNode 命令在线增加数据节点,无需重启集群。
- 示例在新服务器 P4(10.1.1.7)增加数据节点 datanode3(端口 8911)。
- 新增物理服务器数据节点前,需要先部署代理节点用于启动该服务器上的数据节点。
- 需要将多台服务器上的 cluster.nodes 修改为一致的内容。
- 执行 addNode 后,新数据节点可能显示存在但处于关闭状态,需要手动启动。
总结
本节总结数据、元数据与 API 连接层面的不中断目标,并将其与特定行业的 24 小时服务需求关联。
- 面向物联网、金融等领域的 24 小时不中断服务需求。
- 强调通过多层面的高可用能力支持持续提供服务。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 文章 | 发布日期 | 2021-08-05 | high |
| 文章 | 作者署名 | Junxi | high |
| DolphinDB | 高可用方案覆盖范围 | 提供数据、元数据以及客户端的高可用方案;节点故障时数据库仍可正常运作,保证业务不中断 | medium |
| DolphinDB 高可用 | 一致性特性 | 确保强一致性(与其它时序数据库不同) | medium |
| DolphinDB | 数据高可用机制 | 采用多副本机制;相同数据块的副本存储在不同的数据节点上;当某些数据节点宕机时,只要至少1个副本可用,数据库就可提供服务 | high |
| DolphinDB | 元数据存储位置 | 元数据存储在控制节点上 | high |
| DolphinDB 元数据高可用 | 实现方式 | 采用Raft协议;通过构建多个控制节点组成Raft组;宕机控制节点少于半数时集群仍可提供服务 | high |
| DolphinDB API | 高可用连接机制 | 提供自动重连和切换机制;连接的数据节点宕机时先尝试重连,失败则自动切换到其他数据节点执行任务;对用户透明 | high |
| DolphinDB 高可用功能 | 部署前提/支持范围 | 需先部署DolphinDB集群;高可用仅在集群中支持,单实例不支持 | high |
| 多服务器集群部署教程 | 参考链接 | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md | high |
| DolphinDB 数据高可用 | 副本存储与一致性 | 支持在不同服务器上存储多个数据副本;副本之间保持强一致性;单机数据损坏可通过其他机器副本保证服务不中断 | high |
| controller.cfg | 副本数配置参数 | dfsReplicationFactor | high |
| dfsReplicationFactor | 示例取值 | dfsReplicationFactor=2(把副本数设置为2) | high |
| DolphinDB 默认副本放置 | 默认行为 | 默认允许相同数据块的副本分布在同一台机器上 | high |
| controller.cfg | 副本可靠性级别配置参数 | dfsReplicaReliabilityLevel | high |
| dfsReplicaReliabilityLevel | 为保证数据高可用的建议配置 | dfsReplicaReliabilityLevel=1(使相同数据块副本分布在不同机器上) | high |
| 示例数据库 | 示例数据规模 | n=1000000 | high |
| 示例分布式表 trades | 分区数量与分区键含义 | trades表被分成3个分区;每个日期表示一个分区 | high |
| DolphinDB Web集群管理界面 | 提供的功能模块 | 提供DFS Explorer用于查看数据分布情况 | high |
| 示例分区 20180801 | 副本分布与可用性说明 | Sites列显示date=2018.08.01的数据分布在18104datanode和18103datanode上;即使18104datanode宕机,只要18103datanode正常仍可对该分区读写 | medium |
| 元数据 | 定义/示例 | 包括每个数据块存储在哪些数据节点上的哪个位置等信息 | high |
| 元数据不可用 | 影响 | 即使数据块完整,系统也无法正常访问数据 | high |
| 控制节点Raft组 | 角色与一致性 | Raft组中只有一个Leader,其它为Follower;Leader与Follower上的元数据保持强一致性;数据节点只能与Leader交互 | high |
| 控制节点Raft组 | 故障切换机制 | 当前Leader不可用时系统会立即选举新的Leader提供元数据服务 | high |
| 控制节点Raft组 | 容错条件 | 可容忍小于半数的控制节点宕机 | high |
| 包含三个控制节点的集群 | 可容忍故障控制节点数 | 1个 | high |
| 包含五个控制节点的集群 | 可容忍故障控制节点数 | 2个 | high |
| 元数据高可用设置 | 控制节点数量要求 | 控制节点数量至少为3个 | high |
| 元数据高可用设置 | 数据高可用前置要求 | 需要设置数据高可用;副本数必须大于1 | high |
| 示例网络地址 | P1/P2/P3内网地址 | P1: 10.1.1.1; P2: 10.1.1.3; P3: 10.1.1.5 | high |
| controller.cfg(P1示例) | 新增/设置参数 | dfsReplicationFactor=2, dfsReplicaReliabilityLevel=1, dfsHAMode=Raft | high |
| controller.cfg(P1示例) | localSite配置行 | localSite=10.1.1.1:8900:controller1 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| controller.cfg(P2示例) | localSite配置行 | localSite=10.1.1.3:8900:controller2 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| controller.cfg(P3示例) | localSite配置行 | localSite=10.1.1.5:8900:controller3 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| agent.cfg(P1示例) | sites参数含义与顺序约束 | sites表示代理节点与所有控制节点的局域网信息;代理节点信息必须在所有控制节点信息之前 | high |
| agent.cfg(P1示例) | 配置示例行 | localSite=10.1.1.1:8901:agent1 controllerSite=10.1.1.1:8900:controller1 sites=10.1.1.1:8901:agent1:agent,10.1.1.1:8900:controller1:controller,10.1.1.3:8900:controller2:controller,10.1.1.5:8900:controller3:controller | high |
| agent.cfg | 多代理节点配置要求 | 如果有多个代理节点,每个代理节点的配置文件都需要修改 | high |
| cluster.nodes(P1示例) | 增加控制节点信息后的示例内容 | localSite,mode 10.1.1.1:8900:controller1,controller 10.1.1.2:8900:controller2,controller 10.1.1.3:8900:controller3,controller 10.1.1.1:8901:agent1,agent 10.1.1.1:8911:datanode1,datanode 10.1.1.1:8912:datanode2,datanode | high |
| 控制节点启动文件 | 需要的配置文件 | 控制节点启动需要cluster.nodes和cluster.cfg;将P1的cluster.nodes和cluster.cfg复制到P2和P3的config目录 | high |
| 控制节点启动命令 | 命令示例 | nohup ./dolphindb -console 0 -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes & | high |
| 代理节点启动命令 | 命令示例 | nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log & | high |
| 集群管理操作(数据节点) | 限制/约束 | 启动、关闭数据节点以及修改节点配置只能在Leader的集群管理界面操作 | high |
| getActiveMaster() | 用途 | 用于判断/返回Leader的别名 | high |
| 客户端高可用(API) | 故障处理行为 | 连接的数据节点宕机时,API尝试重连;重连失败自动切换到其他可用数据节点;对用户透明 | high |
| 客户端高可用(API) | 支持语言 | 目前只有Java和Python API支持高可用 | high |
| API connect 方法 | 方法签名 | connect(host,port,username,password,startup,highAvailability) | high |
| connect | 启用高可用方式 | highAvailability参数设置为true | high |
| Java API 高可用示例 | 示例代码 | import com.xxdb; DBConnection conn = new DBConnection(); boolean success = conn.connect("10.1.1.1", 8911,"admin","123456","",true); | high |
| Java API 高可用示例 | 故障切换结果说明 | 若10.1.1.1:8911宕机,API会自动连接到其他可用的数据节点 | medium |
| 动态增加数据节点 | 能力说明 | 可使用addNode命令在线增加数据节点,无需重启集群 | high |
| 新增数据节点示例 | 服务器与网络信息 | 在新服务器P4(内网IP为10.1.1.7)增加数据节点datanode3,端口号为8911 | high |
| 新增物理服务器数据节点 | 前置条件 | 需要先部署一个代理节点用于启动该服务器上的数据节点;示例中P4代理节点端口为8901,别名agent2 | high |
| P4 agent.cfg 示例 | 配置行 | localSite=10.1.1.7:8901:agent2 controllerSite=10.1.1.1:8900:controller1 sites=10.1.1.7:8901:agent2:agent,10.1.1.1:8900:controller1:controller,10.1.1.3:8900:controller2:controller,10.1.1.5:8900:controller3:controller | high |
| P4 cluster.nodes 示例 | 文件内容 | localSite,mode 10.1.1.1:8900:controller1,controller 10.1.1.2:8900:controller2,controller 10.1.1.3:8900:controller3,controller 10.1.1.1:8901:agent1,agent 10.1.1.7:8901:agent2,agent 10.1.1.1:8911:datanode1,datanode 10.1.1.1:8912:datanode2,datanode | high |
| cluster.nodes 同步要求 | 变更要求 | 把P1、P2和P3上的cluster.nodes修改为与P4的cluster.nodes相同 | high |
| P4 代理节点启动命令 | 命令示例 | nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log & | high |
| addNode | 新增数据节点命令示例 | addNode("10.1.1.7",8911,"datanode3") | high |
| 新增数据节点后的状态 | 结果说明 | 执行addNode后刷新Web管理界面可见新数据节点已存在但处于关闭状态,需要手动启动 | high |
| DolphinDB 高可用能力 | 适用场景/行业 | 满足物联网、金融等领域24小时不中断提供服务的需求 | medium |