关于分布式系统:干货丨如何水平扩展和垂直扩展DolphinDB集群

10次阅读

共计 4148 个字符,预计需要花费 11 分钟才能阅读完成。

随着业务的扩大,数据量一直积攒,数据库系统的数据容量和计算能力会逐步不堪重负,因而优良的数据库系统必须具备良好的扩展性。DolphinDB 集群中的数据节点是集计算和存储于一体的,所以要进步计算能力和数据容量,只需针对数据节点即可。DolphinDB 既反对程度扩大,即减少节点,也反对垂直扩大,即减少节点的存储。

在扩大集群前,须要对 DolphinDB 集群有根本的概念。DolphinDB 集群由 3 个角色组成:管制节点(Controller)、代理节点(Agent)和数据节点(Data Node)。每个角色任务分配如下:

  • 管制节点负责管理元数据,提供 Web 集群管理工具。
  • 代理节点负责节点的启动和进行,每台服务器上必须有一个代理节点。
  • 数据节点负责计算和存储。

与集群相干的配置文件,个别位于 config 目录下:

controller.cfg:位于管制节点所在的服务器,负责定义管制节点的相干配置,如 IP、端口号、管制节点连接数下限等。

cluster.cfg:位于管制节点所在的服务器,负责定义集群内每一个节点的个性化配置,如存储门路、连接数、内存限度等。

cluster.nodes:位于管制节点所在的服务器,集群的成员配置文件,蕴含节点的 IP、端口、节点别名和角色。

agent.cfg:蕴含代理节点的 IP、端口和管制节点的 IP 和端口。每个物理服务器必须有一个代理节点。

如果是程度扩大集群,须要批改集群的成员配置文件(cluster.nodes),如果数据节点位于新的物理服务器上,那么还须要部署一个新的代理节点(agent.cfg)来负责新物理机上节点的启停,而后重启管制节点来加载新的数据节点。当新的数据节点启动后,节点的计算能力会即时纳入集群的计算资源兼顾,然而曾经存储在集群中的数据不会调整到新的数据节点,零碎会将后续新进入的数据按策略调配到各个数据节点。

如果是垂直扩大集群,只须要批改数据节点的配置文件(cluster.cfg),为指定节点的 volumes 参数减少门路。

上面将具体介绍扩大集群的步骤。

1. 集群配置阐明

集群部署能够参考教程多物理服务器集群部署。

示例集群有 3 个数据节点,每个数据节点位于一台物理服务器上,管制节点位于另外一台物理服务器上:

管制节点:172.18.0.10

数据节点 1:172.18.0.11

数据节点 2:172.18.0.12

数据节点 3:172.18.0.13

各个配置文件的信息如下:

controller.cfg

localSite=172.18.0.10:8990:ctl8990

cluster.nodes

localSite,mode
172.18.0.11:8701:agent1,agent
172.18.0.12:8701:agent2,agent
172.18.0.13:8701:agent3,agent
172.18.0.11:8801:node1,datanode
172.18.0.12:8802:node2,datanode
172.18.0.13:8803:node3,datanode

数据节点 1 所在物理服务器上的 agent.cfg

localSite=172.18.0.11:8701:agent1
controllerSite=172.18.0.10:ctl8900

为了体现扩大后的成果,咱们首先在集

群中创立一个分布式数据库,并写入数据:

data = table(1..1000 as id,rand(`A`B`C,1000) as name)
// 分区时预留了 1000 的余量,准备后续写入测试用
db = database("dfs://scaleout_test_db",RANGE,cutPoints(1..2000,10))
tb = db.createPartitionedTable(data,"scaleoutTB",`id)
tb.append!(data)

执行完后通过 Web 的 DFS Explorer 察看数据的散布状况:

扩大集群后,咱们能够通过追加新的数据来察看新的节点或存储是否启用。

2. 程度扩大

因为业务数据量增大,集群的存储和计算能力不能满足要求,现新增一台服务器,并把它退出原来的集群作为一个新的节点。新增的服务器 IP 地址为 172.18.0.14,采纳 8804 端口号,别名为 node4。新增服务器须要部署代理节点,采纳 8701 端口,别名为 agent4.

步骤如下:

(1)部署新的代理节点

把 DolphinDB 的安装包拷贝至新的服务器,并解压。在 server 文件夹下新增 config 文件夹,并创立 agent.cfg,减少以下内容:

# 指定 Agent 自身的 ip 和端口
localSite=172.18.0.14:8701:agent4
#通知 Agent 本集群的 controller 地位
controllerSite=172.18.0.10:8990:ctl8990
mode=agent

(2)批改集群成员配置

到管制节点所在的物理服务器,批改 config/cluster.nodes,新增集群成员信息。批改后的文件内容为:

localSite,mode
172.18.0.11:8701:agent1,agent
172.18.0.12:8701:agent2,agent
172.18.0.13:8701:agent3,agent
172.18.0.14:8701:agent4,agent
172.18.0.11:8801:node1,datanode
172.18.0.12:8802:node2,datanode
172.18.0.13:8803:node3,datanode
172.18.0.14:8804:node4,datanode

(3)重启集群

Linux 环境下,应用命令 pkill dolphindb,敞开集群。期待端口资源开释后,重新启动 controller 和各个 agent,命令如下:

启动 controller:

nohup ./dolphindb -console 0 -mode controller -script dolphindb.dos -config config/controller.cfg -logFile log/controller.log -nodesFile config/cluster.nodes &

启动 agent:

./dolphindb -mode agent -home data -script dolphindb.dos -config config/agent.cfg -logFile log/agent.log

在浏览器地址栏中输出管制节点的 IP 和端口号,如 172.18.0.10:8990,来拜访 Web,咱们能够看到新减少的代理节点 agent4 曾经启动,数据节点 node4 处于关停状态。

启动各个节点,集群即可失常应用。

上面咱们往集群上的数据库 dfs://scaleout_test_db 写入一些数据,验证新的数据节点是否曾经启用。

tb = database("dfs://scaleout_test_db").loadTable("scaleoutTB")
tb.append!(table(1001..1500 as id,rand(`A`B`C,500) as name))

察看 DFS Explorer,能够看到有数据分布到新的节点 node4 上。

有时候咱们会发现,某些数据会迁徙到其余节点。这与 DolphinDB 的 recovery 机制无关。DolphinDB 集群反对数据主动 recovery。当零碎检测到集群局部节点长时间没有心跳时,断定为宕机,将从其余正本中主动复原数据并且放弃整个集群的正本数稳固。这是当某个节点长时间未启动,数据会产生迁徙的起因。DolphinDB 的 recovery 机制和管制节点的以下配置参数无关:

# 集群内每个数据正本数,默认 2
dfsReplicationFactor=2
#正本安全策略,0 多个正本容许存在一个节点 1 多个正本必须分存到不同节点, 默认 0
dfsReplicaReliabilityLevel=1
#节点心跳进行多久开启 Recovery, 默认不启用,单位 ms
dfsRecoveryWaitTime=30000

dfsRecoveryWaitTime 管制 recovery 的启动,如果没有设置该参数,则敞开 recovery 性能,默认是敞开状态。等待时间的设置次要是为了防止一些打算内的停机保护导致不必要的 recovery,须要用户依据运维的理论状况来设置。

从稳定性上来讲,正本数越多数据越不容易因意外失落,然而正本数过多也会导致系统保留数据时性能低下,所以 dfsReplicationFactor 的值不倡议低于 2,然而具体设置多高须要用户依据整体集群的节点数、数据稳定性需要、零碎写入性能需求来综合思考。

dfsReplicaReliabilityLevel 在生产环境下倡议设置为 1,即多个正本位于不同的服务器上。

3. 垂直扩大

假如 node3 所在的服务器自身的磁盘空间有余,现减少了一块磁盘,门路为 /dev/disk2,须要把它纳入 node3 的存储。数据节点的存储门路是由配置文件中的 volumes 参数指定,如果初始集群没有指定 volumes 参数,那么默认的存储门路为 [HomeDir]/DataNodeAlias]/storage,即 node3 的默认存储门路为 data/node3/storage。

在管制节点的 cluster.cfg 文件中加上以下内容:

node3.volumes=data/node3/storage,/dev/disk2/node3

留神,如果须要在默认门路前面增加存储门路,须要显式设置默认门路,否则会造成默认门路下的元数据失落。

批改配置后,只须要重启数据节点,无需重启管制节点。

上面往集群写入新的数据,查看数据是否被写入新的磁盘。

tb = database("dfs://scaleout_test_db").loadTable("scaleoutTB")
tb.append!(table(1501..2000 as id,rand(`A`B`C,500) as name))

到磁盘上察看数据是否被写入:

DolphinDB 能反对的数据规模没有明确的下限,齐全取决于投入资源的多少。

正文完
 0