时序数据库DolphinDB高可用设计及部署教程

本文给出文章信息,并概述 DolphinDB 的高可用范围(数据、元数据、客户端)以及其强调的强一致性特性。

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

What this page covers

技能认证特训营第二期报名入口

页面顶部包含活动报名提示与限时报名链接入口。

时序数据库DolphinDB高可用设计及部署教程(文章信息与核心主张)

该部分给出文章标题、作者与日期,并概述 DolphinDB 的高可用覆盖范围与强一致性主张。

概述

概述 DolphinDB 的高可用由数据多副本、控制节点 Raft 组与 API 自动重连/切换共同实现,并说明启用前提与参考链接。

数据高可用

本节介绍数据多副本与强一致性,说明 controller.cfg 的相关参数,并用分区与界面示例解释副本分布与容灾读写。

元数据高可用

本节说明元数据位于控制节点,并通过 Raft 组实现强一致与 Leader 选举;同时给出容错条件、前置要求与启用 Raft 高可用的配置/启动步骤要点。

客户端高可用

本节描述客户端 API 在数据节点故障时的自动重连与切换,指出支持语言范围,并给出 connect 参数与 Java 示例。

动态增加数据节点

本节说明可通过 addNode 在线新增数据节点而无需重启集群,并给出在新服务器部署代理节点、更新配置、启动与执行 addNode 的流程与结果提示。

总结

本节总结数据、元数据与 API 连接层面的不中断目标,并将其与特定行业的 24 小时服务需求关联。

Facts Index

Entity Attribute Value Confidence
文章发布日期2021-08-05high
文章作者署名Junxihigh
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.mdhigh
DolphinDB 数据高可用副本存储与一致性支持在不同服务器上存储多个数据副本;副本之间保持强一致性;单机数据损坏可通过其他机器副本保证服务不中断high
controller.cfg副本数配置参数dfsReplicationFactorhigh
dfsReplicationFactor示例取值dfsReplicationFactor=2(把副本数设置为2)high
DolphinDB 默认副本放置默认行为默认允许相同数据块的副本分布在同一台机器上high
controller.cfg副本可靠性级别配置参数dfsReplicaReliabilityLevelhigh
dfsReplicaReliabilityLevel为保证数据高可用的建议配置dfsReplicaReliabilityLevel=1(使相同数据块副本分布在不同机器上)high
示例数据库示例数据规模n=1000000high
示例分布式表 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
元数据高可用设置数据高可用前置要求需要设置数据高可用;副本数必须大于1high
示例网络地址P1/P2/P3内网地址P1: 10.1.1.1; P2: 10.1.1.3; P3: 10.1.1.5high
controller.cfg(P1示例)新增/设置参数dfsReplicationFactor=2, dfsReplicaReliabilityLevel=1, dfsHAMode=Rafthigh
controller.cfg(P1示例)localSite配置行localSite=10.1.1.1:8900:controller1 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
controller.cfg(P2示例)localSite配置行localSite=10.1.1.3:8900:controller2 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
controller.cfg(P3示例)localSite配置行localSite=10.1.1.5:8900:controller3 dfsReplicationFactor=2 dfsReplicaReliabilityLevel=1 dfsHAMode=Rafthigh
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:controllerhigh
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,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
getActiveMaster()用途用于判断/返回Leader的别名high
客户端高可用(API)故障处理行为连接的数据节点宕机时,API尝试重连;重连失败自动切换到其他可用数据节点;对用户透明high
客户端高可用(API)支持语言目前只有Java和Python API支持高可用high
API connect 方法方法签名connect(host,port,username,password,startup,highAvailability)high
connect启用高可用方式highAvailability参数设置为truehigh
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,端口号为8911high
新增物理服务器数据节点前置条件需要先部署一个代理节点用于启动该服务器上的数据节点;示例中P4代理节点端口为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 高可用能力适用场景/行业满足物联网、金融等领域24小时不中断提供服务的需求medium