乐趣区

关于高可用:技术干货丨时序数据库DolphinDB高可用设计及部署教程

DolphinDB 提供数据、元数据以及客户端的高可用计划,使得数据库节点产生故障时,数据库仍然能够失常运作,保障业务不会中断。

与其它时序数据库不同的是,DolphinDB 的高可用确保强一致性。

1. 概述

DolphinDB database 采纳多正本机制,雷同数据块的正本存储在不同的数据节点上。即便集群中某个或多个数据节点宕机,只有集群中还有至多 1 个正本可用,那么数据库就能够提供服务。

元数据存储在管制节点上。为了保障元数据的高可用,DolphinDB 采纳 Raft 协定,通过构建多个管制节点来组成一个 Raft 组,只有宕机的管制节点少于半数,集群依然可提供服务。

DolphinDB API 提供了主动重连和切换机制,如果以后连贯的数据节点宕机,API 会尝试重连,若重连失败就会主动切换连贯到其余数据节点执行工作。切换数据节点对用户是通明的,用户不会感知到以后连贯的节点曾经切换。

如果要应用高可用性能,请先部署 DolphinDB 集群。高可用性能仅在集群中反对,在单实例中不反对。集群部署请参考多服务器集群部署教程。

  1. 数据高可用

为了保证数据的平安和高可用,DolphinDB 反对在不同的服务器上存储多个数据正本,并且数据正本之间放弃强一致性。即便一台机器上的数据损坏,也能够通过拜访其余机器上的正本数据来保障数据服务不中断。

正本的个数可由在 controller.cfg 中的 dfsReplicationFactor 参数来设定。例如,把正本数设置为 2:

dfsReplicationFactor=2

默认状况下,DolphinDB 容许雷同数据块的正本散布在同一台机器上。为了保证数据高可用,须要把雷同数据块的正本散布在不同的机器上。可在 controller.cfg 增加以下配置项:

dfsReplicaReliabilityLevel=1

上面通过一个例子直观地解释 DolphinDB 的数据高可用。首先,在集群的数据节点上执行以下脚本以创立数据库:

n=1000000
date=rand(2018.08.01..2018.08.03,n)
sym=rand(`AAPL`MS`C`YHOO,n)
qty=rand(1..1000,n)
price=rand(100.0,n)
t=table(date,sym,qty,price)
if(existsDatabase("dfs://db1")){dropDatabase("dfs://db1")
}
db=database("dfs://db1",VALUE,2018.08.01..2018.08.03)
trades=db.createPartitionedTable(t,`trades,`date).append!(t)

分布式表 trades 被分成 3 个分区,每个日期示意一个分区。DolphinDB 的 Web 集群治理界面提供了 DFS Explorer,能够不便地查看数据分布状况。trades 表各个分区的散布状况如下图所示:

以 20180801 这个分区为例,Sites 列显示,date=2018.08.01 的数据分布在 18104datanode 和 18103datanode 上。即便 18104datanode 宕机,只有 18103datanode 失常,用户依然对 date=2018.08.01 的数据进行读写操作。

  1. 元数据高可用

数据存储时会产生元数据,例如每个数据块存储在哪些数据节点上的哪个地位等信息。如果元数据不能应用,即便数据块残缺,零碎也无奈失常拜访数据。

元数据寄存在管制节点。咱们能够在一个集群中部署多个管制节点,通过元数据冗余来保障元数据服务不中断。一个集群中的所有管制节点组成一个 Raft 组,Raft 组中只有一个 Leader,其余都是 Follower,Leader 和 Follower 上的元数据放弃强一致性。数据节点只能和 Leader 进行交互。如果以后 Leader 不可用,零碎会立刻选举出新的 Leader 来提供元数据服务。Raft 组可能容忍小于半数的管制节点宕机,例如蕴含三个管制节点的集群,能够容忍一个管制节点呈现故障;蕴含五个管制节点的集群,能够容忍两个管制节点呈现故障。要设置元数据高可用,管制节点的数量至多为 3 个,同时须要设置数据高可用,即正本数必须大于 1。

通过以下例子来介绍如何要为一个已有的集群启动元数据高可用。假如已有集群的管制节点位于 P1 机器上,当初要减少两个管制节点,别离部署在 P2、P3 机器上。它们的内网地址如下:

P1: 10.1.1.1
P2: 10.1.1.3
P3: 10.1.1.5

(1) 批改已有管制节点的配置文件

在 P1 的 controller.cfg 文件增加下列参数:dfsReplicationFactor=2, dfsReplicaReliabilityLevel=1, dfsHAMode=Raft。批改后的 controller.cfg 如下:

localSite=10.1.1.1:8900:controller1
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

(2) 部署两个新的管制节点

别离在 P2、P3 下载 DolphinDB 服务器程序包,并解压,例如解压到 /DolphinDB 目录。

在 /DolphinDB/server 目录下创立 config 目录。在 config 目录下创立 controller.cfg 文件,填写以下内容:

P2

localSite=10.1.1.3:8900:controller2
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

P3

localSite=10.1.1.5:8900:controller3
dfsReplicationFactor=2
dfsReplicaReliabilityLevel=1
dfsHAMode=Raft

(3) 批改已有代理节点的配置文件

在已有的 agent.cfg 文件中增加 sites 参数,它示意本机器代理节点和所有管制节点的局域网信息,代理节点信息必须在所有管制节点信息之前。例如,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

如果有多个代理节点,每个代理节点的配置文件都须要批改。

(4) 批改已有管制节点的集群成员配置文件

在 P1 的 cluster.nodes 上减少管制节点的局域网信息。例如,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

(5) 为新的管制节点增加集群成员配置文件和节点配置文件

管制节点的启动须要 cluster.nodes 和 cluster.cfg。把 P1 上的 cluster.nodes 和 cluster.cfg 复制到 P2 和 P3 的 config 目录。

(6) 启动高可用集群

  • 启动管制节点

别离在每个管制节点所在机器上执行以下命令:

nohup ./dolphindb -console 0 -mode controller -home data -config config/controller.cfg -clusterConfig config/cluster.cfg -logFile log/controller.log -nodesFile config/cluster.nodes &
  • 启动代理节点

在部署了代理节点的机器上执行以下命令:

nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log &

启动、敞开数据节点以及批改节点配置只能在 Leader 的集群治理界面操作。

  • 如何判断哪个管制节点为 Leader

在浏览器地址栏中输出任意管制节点的 IP 地址和端口号关上集群治理界面,例如 10.1.1.1:8900,点击 Node 列的管制节点别名 controller1 进入 DolphinDB Notebook。

执行 getActiveMaster() 函数,该函数返回 Leader 的别名。

在浏览器地址栏中输出 Leader 的 IP 地址和端口号关上 Leader 的集群治理界面。

  1. 客户端高可用

应用 API 与 DolphinDB server 的数据节点进行交互时,如果连贯的数据节点宕机,API 会尝试重连,若重连失败会主动切换到其余可用的数据节点。这对用户是通明的。目前只有 Java 和 Python API 反对高可用。

API 的 connect 办法如下:

connect(host,port,username,password,startup,highAvailability)

应用 connect 办法连贯数据节点时,只须要指定 highAvailability 参数为 true。

以下例子设置 Java API 高可用:

import com.xxdb;
DBConnection conn = new DBConnection();
boolean success = conn.connect("10.1.1.1", 8911,"admin","123456","",true);

如果数据节点 10.1.1.1:8911 宕机,API 会主动连贯到其余可用的数据节点。

  1. 动静减少数据节点

用户能够应用 addNode 命令在线减少数据节点,无需重启集群。

下例中阐明如何在新的服务器 P4(内网 IP 为 10.1.1.7)上减少新的数据节点 datanode3,端口号为 8911。

在新的物理服务器上减少数据节点,须要先部署一个代理节点,用于启动该服务器上的数据节点。P4 的代理节点的端口为 8901,别名为 agent2。

在 P4 上下载 DolphinDB 程序包,解压到指定目录,例如 /DolphinDB。

进入到 /DolphinDB/server 目录,创立 config 目录。

在 config 目录下创立 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

在 config 目录下创立 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

把 P1, P2 和 P3 上的 cluster.nodes 批改为与 P4 的 cluster.nodes 雷同。

执行以下 Linux 命令启动 P4 上的代理节点:

nohup ./dolphindb -console 0 -mode agent -home data -config config/agent.cfg -logFile log/agent.log &

在任意一个数据节点上执行以下命令:

addNode("10.1.1.7",8911,"datanode3")

执行下面的脚本后,刷新 Web 集群治理界面,能够发现新减少的数据节点曾经存在,但它处于敞开状态,须要手动启动新增的数据节点。

  1. 总结

通过保证数据、元数据服务以及 API 连贯不中断,DolphinDB 能够满足物联网、金融等畛域 24 小时不中断提供服务的需要。

退出移动版