DolphinDB高可用集群部署教程

本页概述 DolphinDB 的高可用方案,并覆盖数据多副本一致性、元数据 Raft 机制、客户端自动切换及其部署前置条件。

Source: https://dolphindb.cn/blogs/73

What this page covers

技能认证特训营第二期正式开启(限时报名)

页面顶部提供活动报名引导与福利优惠入口。

DolphinDB高可用集群部署教程(作者与日期)

该部分给出文章标题、作者署名与发布日期信息。

概述

介绍 DolphinDB 高可用在数据、多副本一致性、元数据 Raft 以及客户端自动切换方面的总体方案与前置条件。

数据高可用

说明数据多副本与二阶段提交实现强一致性的原因、相关配置参数与示例说明。

元数据高可用

说明控制节点 Raft 组的元数据高可用机制、容错条件与在既有集群中启用/扩展控制节点的配置与启动步骤。

客户端高可用

描述 API 在数据节点故障时的自动重连与切换机制,并给出 connect 接口参数与 Java 示例。

动态增加数据节点

介绍通过 addNode 在线扩容数据节点的流程,包括新增服务器上部署代理节点、配置文件与启动命令。

总结

总结通过数据、元数据与 API 连接的高可用保障来支持特定行业的不中断服务需求。

Facts Index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
DolphinDB高可用集群部署教程发布日期2021-08-05high
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.mdhigh
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保证事务ACIDhigh
controller.cfgdfsReplicationFactor参数用于设置副本个数high
dfsReplicationFactor示例配置值dfsReplicationFactor=2high
DolphinDB默认副本放置默认行为默认允许相同数据块的副本分布在同一台机器上high
controller.cfgdfsReplicaReliabilityLevel配置目的为保证数据高可用,将相同数据块的副本分布在不同机器上high
dfsReplicaReliabilityLevel示例配置值dfsReplicaReliabilityLevel=1high
示例分布式表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
元数据高可用配置要求数据高可用前置条件需要设置数据高可用,副本数必须大于1high
示例集群机器与内网地址控制节点地址P1: 10.1.1.1;P2: 10.1.1.3;P3: 10.1.1.5high
P1 controller.cfg新增/修改参数dfsReplicationFactor=2, dfsReplicaReliabilityLevel=1, dfsHAMode=Rafthigh
P1 controller.cfg示例配置行localSite=10.1.1.1:8900:controller1 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
P2 controller.cfg示例配置行localSite=10.1.1.3:8900:controller2 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
P3 controller.cfg示例配置行localSite=10.1.1.5:8900:controller3 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
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:controllerhigh
多代理节点场景配置要求如果有多个代理节点,每个代理节点的配置文件都需要修改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,datanodehigh
控制节点启动所需文件文件清单控制节点启动需要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 Notebookhigh
getActiveMaster()函数用途返回Leader的别名high
客户端高可用(API)支持语言目前Java、C#、C++和Python API支持高可用high
API connect方法方法签名connect(host,port,username,password,startup,highAvailability)high
API connect方法高可用启用方式连接数据节点时将highAvailability参数设为truehigh
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)内网IPP4内网IP为10.1.1.7high
扩容示例(新增数据节点datanode3)端口端口号为8911high
新增物理服务器上的数据节点部署前置要求需先部署一个代理节点,用于启动该服务器上的数据节点high
P4代理节点(agent2)端口与别名端口为8901;别名为agent2high
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:controllerhigh
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,datanodehigh
其他机器上的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