DolphinDB高可用集群部署教程
本页概述 DolphinDB 的高可用方案,并覆盖数据多副本一致性、元数据 Raft 机制、客户端自动切换及其部署前置条件。
Source: https://dolphindb.cn/blogs/73
What this page covers
- DolphinDB 高可用总体方案概览(数据、元数据、客户端)。
- 数据高可用:多副本与 2PC、一致性原因与配置参数示例。
- 元数据高可用:控制节点 Raft 组、容错条件与启用步骤。
- 客户端高可用:API 自动重连/切换与 connect 参数示例。
- 动态扩容:使用 addNode 在线增加数据节点的流程。
- 活动报名入口(技能认证特训营第二期)。
技能认证特训营第二期正式开启(限时报名)
页面顶部提供活动报名引导与福利优惠入口。
- 本页包含“技能认证特训营第二期”的报名入口信息。
- 报名链接指向外部 H5 活动页面。
DolphinDB高可用集群部署教程(作者与日期)
该部分给出文章标题、作者署名与发布日期信息。
- 本文发布日期为 2021-08-05。
- 该部分呈现文章标题与作者信息条目。
概述
介绍 DolphinDB 高可用在数据、多副本一致性、元数据 Raft 以及客户端自动切换方面的总体方案与前置条件。
- 高可用方案覆盖数据、元数据与客户端三个层面。
- 数据高可用使用多副本机制,副本存放在不同数据节点上。
- 数据副本一致性通过二阶段提交协议(2PC)实现。
- 元数据存储在控制节点上,并采用 Raft 协议实现高可用。
- 高可用仅在集群中支持,单实例不支持。
数据高可用
说明数据多副本与二阶段提交实现强一致性的原因、相关配置参数与示例说明。
- 数据副本间及数据与元数据间可通过 2PC 实现强一致性。
- 选择 2PC 的原因之一与“单集群可支持千万级以上分区数”相关。
- dfsReplicationFactor 参数用于设置副本个数。
- 默认允许同一数据块的副本分布在同一台机器上。
- dfsReplicaReliabilityLevel 可用于将副本分布在不同机器上以提升可用性。
- Web 集群管理界面提供 DFS Explorer 用于查看数据分布。
- 示例中某分区存在多个副本,单个数据节点宕机时仍可读写该分区数据。
元数据高可用
说明控制节点 Raft 组的元数据高可用机制、容错条件与在既有集群中启用/扩展控制节点的配置与启动步骤。
- 元数据包含数据块存储位置等信息。
- 元数据不可用会导致系统无法正常访问数据。
- Raft 组只有一个 Leader,其余为 Follower。
- 数据节点只能与 Leader 交互以获取元数据服务。
- Leader 不可用时会选举新的 Leader 提供服务。
- 配置要求包括:控制节点数量至少为 3。
- 节点管理操作(如启动/关闭数据节点、修改配置)只能在 Leader 的界面进行。
客户端高可用
描述 API 在数据节点故障时的自动重连与切换机制,并给出 connect 接口参数与 Java 示例。
- 目前 Java、C#、C++ 和 Python API 支持高可用。
- connect 方法签名包含 highAvailability 参数。
- 连接数据节点时将 highAvailability 设为 true 可启用高可用。
- 当连接的数据节点宕机时,API 会自动连接到其他可用数据节点。
动态增加数据节点
介绍通过 addNode 在线扩容数据节点的流程,包括新增服务器上部署代理节点、配置文件与启动命令。
- 可使用 addNode 在线增加数据节点,无需重启集群。
- 在新增物理服务器上部署数据节点前,需要先部署代理节点。
- 新增服务器的 agent.cfg 需要包含 localSite、controllerSite 与 sites 等配置。
- 其他机器上的 cluster.nodes 需要同步为与新增服务器一致的内容。
- 执行 addNode 后,新数据节点默认处于关闭状态,需要手动启动。
总结
总结通过数据、元数据与 API 连接的高可用保障来支持特定行业的不中断服务需求。
- 高可用可用于满足物联网、金融等领域 24 小时不中断服务需求。
- 整体思路包含数据层、元数据层与客户端连接层的可用性保障。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |
| DolphinDB高可用集群部署教程 | 发布日期 | 2021-08-05 | high |
| DolphinDB高可用方案 | 覆盖范围 | 提供数据、元数据以及客户端的高可用方案;节点故障时数据库仍可正常运作以保证业务不中断 | high |
| DolphinDB数据高可用 | 机制 | 采用多副本机制:相同数据块的多个副本存储在不同的数据节点(data node)上;只要至少1个副本可用即可提供服务 | high |
| DolphinDB多副本一致性 | 协议 | 通过二阶段提交协议(2PC)实现数据副本一致性 | high |
| DolphinDB元数据高可用 | 元数据存储位置 | 元数据存储在控制节点(conroller)上 | high |
| DolphinDB元数据高可用 | 协议 | 采用Raft协议;构建多个控制节点组成Raft组;宕机控制节点少于半数时集群仍可提供服务 | high |
| DolphinDB API | 高可用行为 | 提供自动重连与切换机制:当前连接的数据节点宕机时API尝试重连,失败后自动切换到其他数据节点执行任务;对用户透明 | high |
| DolphinDB高可用功能 | 部署前置条件 | 需要先部署DolphinDB集群;高可用仅在集群中支持,单实例不支持 | high |
| 多服务器集群部署教程 | 参考链接 | https://link.zhihu.com/?target=https%3A//gitee.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md | high |
| DolphinDB高可用架构图(配图说明) | 架构组成与协议 | 客户端应用通过API与数据节点交互;数据以多副本存储在DFS中并用2PC确保一致性;右侧为多个控制节点组成的Raft组管理元数据;通过副本切换与Raft选主维持服务连续性 | medium |
| DolphinDB数据高可用 | 一致性范围 | 采用二阶段提交协议实现数据副本之间以及数据与元数据之间的强一致性 | high |
| DolphinDB采用2PC而非Raft/Paxos用于海量分区多副本一致性 | 原因(因素1) | 单集群可支持千万级以上分区数;使用Raft/Paxos创建千万级协议组成本太高 | high |
| DolphinDB采用2PC而非Raft/Paxos用于数据副本一致性 | 原因(因素2) | 使用Raft/Paxos查询时只有一个副本可用;对OLAP场景浪费资源 | high |
| DolphinDB采用2PC与事务保证 | 原因(因素3) | 写入跨分区时即使采用Raft/Paxos仍需2PC保证事务ACID | high |
| controller.cfg | dfsReplicationFactor参数 | 用于设置副本个数 | high |
| dfsReplicationFactor | 示例配置值 | dfsReplicationFactor=2 | high |
| DolphinDB默认副本放置 | 默认行为 | 默认允许相同数据块的副本分布在同一台机器上 | high |
| controller.cfg | dfsReplicaReliabilityLevel配置目的 | 为保证数据高可用,将相同数据块的副本分布在不同机器上 | high |
| dfsReplicaReliabilityLevel | 示例配置值 | dfsReplicaReliabilityLevel=1 | high |
| 示例分布式表trades | 分区数量与分区键 | trades表被分成3个分区;每个日期表示一个分区 | high |
| DolphinDB Web集群管理界面 | DFS Explorer功能 | 提供DFS Explorer以查看数据分布情况 | high |
| DFS Explorer截图(配图说明) | 展示内容 | 显示分区表多个日期分区与Sites列中每个分区副本所在数据节点(示例:18104datanode、18103datanode) | medium |
| 分区20180801副本分布示例 | Sites列显示的数据节点 | date=2018.08.01 分布在18104datanode和18103datanode上 | high |
| 数据节点容错示例(20180801分区) | 可用性结论 | 即使18104datanode宕机,只要18103datanode正常,用户仍可对date=2018.08.01数据读写 | high |
| 元数据 | 示例内容 | 包括每个数据块存储在哪些数据节点上的哪个位置等信息 | high |
| 元数据不可用的影响 | 后果 | 即使数据块完整,系统也无法正常访问数据 | high |
| 控制节点Raft组 | 角色与一致性 | Raft组只有一个Leader,其余为Follower;Leader与Follower的元数据保持强一致性;数据节点只能与Leader交互 | high |
| Raft故障切换 | Leader不可用时的行为 | 系统会立即选举新的Leader提供元数据服务 | high |
| Raft组容错条件 | 可容忍宕机数 | 宕机控制节点数小于半数仍可服务;3个控制节点可容忍1个故障;5个控制节点可容忍2个故障 | high |
| 元数据高可用配置要求 | 控制节点数量 | 控制节点数量至少为3个 | high |
| 元数据高可用配置要求 | 数据高可用前置条件 | 需要设置数据高可用,副本数必须大于1 | high |
| 示例集群机器与内网地址 | 控制节点地址 | P1: 10.1.1.1;P2: 10.1.1.3;P3: 10.1.1.5 | high |
| P1 controller.cfg | 新增/修改参数 | dfsReplicationFactor=2, dfsReplicaReliabilityLevel=1, dfsHAMode=Raft | high |
| P1 controller.cfg | 示例配置行 | localSite=10.1.1.1:8900:controller1 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| P2 controller.cfg | 示例配置行 | localSite=10.1.1.3:8900:controller2 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| P3 controller.cfg | 示例配置行 | localSite=10.1.1.5:8900:controller3 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Raft | high |
| agent.cfg sites参数 | 含义与顺序约束 | sites表示代理节点与所有控制节点的局域网信息;代理节点信息必须在所有控制节点信息之前 | high |
| P1 agent.cfg | 示例配置行 | 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 |
| 多代理节点场景 | 配置要求 | 如果有多个代理节点,每个代理节点的配置文件都需要修改 | high |
| P1 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.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 |
| Leader判断方法 | 步骤 | 在浏览器输入任意控制节点IP:端口打开集群管理界面,点击Node列控制节点别名进入DolphinDB Notebook | high |
| getActiveMaster()函数 | 用途 | 返回Leader的别名 | high |
| 客户端高可用(API) | 支持语言 | 目前Java、C#、C++和Python API支持高可用 | high |
| API connect方法 | 方法签名 | connect(host,port,username,password,startup,highAvailability) | high |
| API connect方法 | 高可用启用方式 | 连接数据节点时将highAvailability参数设为true | high |
| Java API高可用示例 | connect调用示例 | DBConnection conn = new DBConnection(); boolean success = conn.connect("10.1.1.1", 8911,"admin","123456","",true); | high |
| API故障切换示例 | 行为 | 若数据节点10.1.1.1:8911宕机,API会自动连接到其他可用数据节点 | high |
| 动态增加数据节点 | 能力与影响 | 可使用addNode命令在线增加数据节点,无需重启集群 | high |
| 扩容示例(新增服务器P4) | 内网IP | P4内网IP为10.1.1.7 | high |
| 扩容示例(新增数据节点datanode3) | 端口 | 端口号为8911 | high |
| 新增物理服务器上的数据节点部署 | 前置要求 | 需先部署一个代理节点,用于启动该服务器上的数据节点 | high |
| P4代理节点(agent2) | 端口与别名 | 端口为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 database高可用 | 行业/场景适用性 | 可满足物联网、金融等领域24小时不中断提供服务的需求 | medium |