返回首页

gbase数据、南大通用产品文档:GBase8a集群扩容操作流程

更新日期:2024年09月11日


扩容VC 内data 节点:
1.
给需要扩容的数据节点装集群软件。包括步骤:修改demo.options 文件执行
gcinstall 脚本安装软件。
2.
将扩容节点添加到指定VC 中。包括步骤:新建addnode.xml执行gcadmin
addnodes 添加节点进VC
3.
给扩容后的VC 中所有节点生成新的distribution,并根据新的distribution 生成
新的datanodemap。包括步骤:修改gcChangeInfo.xml 为扩容后所有节点执
行gcadmin distribution 生成新distribution(需传入数据库用户名、密码)执
行initnodedatamap 生成新的nodedatamap。
4.
将原集群数据迁移到新的nodedatamap 上,删除原集群旧的distribution 和
nodedatamap。包括步骤:rebalance 迁移数据gcadmin rmdistribution。

扩容集群的gcluster 节点:
停止整个集群所有节点的服务修改demo.options 使用gcinstall 脚本安装该节点上
集群软件。

扩容复合节点(gcluster 和gnode 同在一个服务器上):
1.
给需要扩容的gnode 节点和gcluster 节点安装集群软件。包括步骤:停止整个
集群所有节点的服务修改demo.options 文件执行gcinstall 脚本安装软件。
2.
将扩容节点添加到指定VC 中。包括步骤:新建addnode.xml执行gcadmin
addnodes 添加节点进VC
3.
给扩容后的VC 中所有节点生成新的distribution,并根据新的distribution 生成
新的datanodemap。包括步骤:修改gcChangeInfo.xml 为扩容后所有节点执
行gcadmin distribution 生成新distribution(需传入数据库用户名、密码)执

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
231
行initnodedatamap 生成新的nodedatamap。
4.
将原集群数据迁移到新的nodedatamap 上,删除原集群旧的distribution 和
nodedatamap。包括步骤:rebalance 迁移数据gcadmin rmdistribution。
注意

V9.5.3 当前只支持coordinator 节点和data 节点的扩容,
不支持gcware 的扩
容。

扩容安装操作必须在已有Coordinator 节点上使用DBA(gbase)用户执行。

扩容安装操作需要申请新的license 许可文件,license 文件的获取可参考

概述
预写日志记录(WAL)是确保数据持久性的标准方法。WAL 的主要概念是,数据文件
(表和索引所在的位置)
的更改只有在记录这些更改之后才会写入,
即只有在描述这些更改
的日志记录被刷新到永久存储之后才会写入。
MOT 全面集成GBase 8c 的封装日志记录设施。除持久性外,这种方法的另一个好处是
能够将WAL 用于复制目的。
支持三种日志记录方式:两种标准同步和一种异步方式。标准GBase 8c 磁盘引擎也支
持这三种日志记录方式。此外,在MOT 中,组提交(Group-Commit)选项还提供了特殊的
NUMA 感知优化。Group-Commit 在维护ACID 属性的同时提供最高性能。
为保证持久性,MOT 全面集成GBase 8c 的WAL 机制,通过GBase 8c 的XLOG 接口
持久化WAL 记录。这意味着,每次MOT 记录的添加、更新和删除都记录在WAL 中。这确
保了可以从这个非易失性日志中重新生成和恢复最新的数据状态。
例如,
如果向表中添加了
3 个新行,删除了2 个,更新了1 个,那么日志中将记录6 个条目。

MOT 日志记录和GBase 8c 磁盘表的其他记录写入同一个WAL 中。

MOT 只记录事务提交阶段的操作。

MOT 只记录更新的增量记录,以便最小化写入磁盘的数据量。

在恢复期间,从最后一个已知或特定检查点加载数据;然后使用WAL 重做日志完成从
该点开始发生的数据更改。

WAL 重做日志将保留所有表行修改,直到执行一个检查点为止(如上所述)。然后可
以截断日志,以减少恢复时间和节省磁盘空间。
为了确保日志IO 设备不会成为瓶颈,日志文件必须放在具有低时延的驱动器上。
日志类型
支持两个同步事务日志选项和一个异步事务日志选项(标准GBase 8c 磁盘引擎也支持
这些选项)。MOT 还支持同步的组提交日志记录与NUMA 感知优化,如下所述。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
494
根据您的配置,实现以下类型的日志记录:

同步重做日志记录
同步重做日志记录选项是最简单、
最严格的重做日志记录器。
当客户端应用程序提交事
务时,事务重做条目记录在WAL 重做日志中,如下所示:
(1)
当事务正在进行时,它存储在MOT 内存中。
(2)
事务完成后,客户端应用程序发送提交命令,该事务被锁定,然后写入磁盘上的WAL
重做日志。这意味着,当事务日志条目写入日志时,客户端应用程序仍在等待响应。
(3)
一旦事务的整个缓冲区被写入日志,
就更改内存中的数据,
然后提交事务。
事务提交后,
客户端应用程序收到事务完成通知。
技术说明
当事务结束时,同步重做日志处理程序(SynchronousRedoLogHandler)序列化事务缓
冲区,并写入XLOG iLogger 实现。
图13- 6 同步日志记录
总结
同步重做日志记录选项是最安全、
最严格的,
因为它确保了客户端应用程序和每个事务
提交时的WAL 重做日志条目的完全同步,从而确保了总的持久性和一致性,并且绝对不会
丢失数据。
此日志记录选项可防止客户端应用程序在事务尚未持久化到磁盘时将事务标记为
成功的情况。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
495
同步重做日志记录选项的缺点是,
它是三个选项中最慢的日志机制。
这是因为客户端应
用程序必须等到所有数据都写入磁盘,并且磁盘频繁写入(这通常使数据库变慢)。

组同步重做日志记录
组同步重做日志记录选项与同步重做日志记录选项非常相似,
因为它还确保完全持久性,
绝对不会丢失数据,并保证客户端应用程序和WAL 重做日志条目的完全同步。不同的是,
组同步重做日志记录选项将事务重做条目组同时写入磁盘上的WAL 重做日志,而不是在提
交时写入每个事务。使用组同步重做日志记录可以减少磁盘I/O 数量,从而提高性能,特别
是在运行繁重的工作负载时。
MOT 引擎通过根据运行事务的核的NUMA 槽位自动对事务进行分组,
使用非统一内存
访问(NUMA)感知优化来执行同步的组提交记录。
有关NUMA 感知内存访问的更多信息,请参见NUMA-aware 分配和亲和性。
当一个事务提交时,一组条目记录在WAL 重做日志中,如下所示:
(1)
当事务正在进行时,
它存储在内存中。
MOT 引擎根据运行事务的核的NUMA 槽位对桶
中的事务进行分组。
这意味着在同一槽位上运行的所有事务都被分在一组,
并且多个组
将根据事务运行的核心并行填充。
这样,
将事务写入WAL 更为有效,
因为来自同一个槽位的所有缓冲区都一起写入磁盘。
每个线程在属于单个槽位的单核/CPU 上运行,每个线程只写运行于其上的核的槽位。
(2)
在事务完成并且客户端应用程序发送Commit 命令之后,
事务重做日志条目将与属于同
一组的其他事务一起序列化。
(3)
当特定一组事务满足配置条件后,如重做日志(MOT)小节中描述的已提交的事务数
或超时时间,该组中的事务将被写入磁盘的WAL 中。这意味着,当这些日志条目被写
入日志时,发出提交请求的客户端应用程序正在等待响应。
(4)
一旦NUMA-aware 组中的所有事务缓冲区都写入日志,该组中的所有事务都将对内存
存储执行必要的更改,并且通知客户端这些事务已完成。
技术说明
4 种颜色分别代表4 个NUMA 节点。因此,每个NUMA 节点都有自己的内存日志,允
许多个连接的组提交。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
496
图13- 7 组提交——具有NUMA 感知
总结
组同步重做日志记录选项是一个极其安全和严格的日志记录选项,
因为它保证了客户端
应用程序和WAL 重做日志条目的完全同步,从而确保总的持久性和一致性,并且绝不会丢
失数据。
此日志记录选项可防止客户端应用程序在事务尚未持久化到磁盘时将事务标记为成
功的情况。
一方面,该选项的磁盘写入次数比同步重做日志记录选项少,这可能意味着它更快。缺
点是事务被锁定的时间更长,这意味着它们被锁定,直到同一NUMA 内存中的所有事务都
写入磁盘上的WAL 重做日志为止。
使用此选项的好处取决于事务工作负载的类型。例如,
此选项有利于事务多的系统(而
对于事务少的系统而言,则较少使用,因为磁盘写入量也很少)。

异步重做日志记录
异步重做日志记录选项是最快的日志记录方法,但是,
它不能确保数据不会丢失。
也就
是说,
某些仍位于缓冲区且尚未写入磁盘的数据在电源故障或数据库崩溃时可能会丢失。

客户端应用程序提交事务时,
事务重做条目将记录在内部缓冲区中,
并按预先配置的时间间
隔写入磁盘。客户端应用程序不会等待数据写入磁盘,
而是继续到下一个事务。因此异步重
做日志记录的速度最快。
当客户端应用程序提交事务时,事务重做条目记录在WAL 重做日志中,如下所示:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
497
(1)
当事务正在进行时,它存储在MOT 内存中。
(2)
在事务完成并且客户端应用程序发送Commit 命令后,
事务重做条目将被写入内部缓冲
区,但尚未写入磁盘。然后更改MOT 数据内存,并通知客户端应用程序事务已提交。
(3)
后台运行的重做日志线程按预先配置的时间间隔收集所有缓存的重做日志条目,
并将它
们写入磁盘。
技术说明
在事务提交时,事务缓冲区被移到集中缓冲区(指针分配,而不是数据副本),并为事
务分配一个新的事务缓冲区。一旦事务缓冲区移动到集中缓冲区,且事务线程不被阻塞,事
务就会被释放。实际写入日志使用Postgres WALWRITER 线程。当WALWRITER 计时器到
期时,
它首先调用异步重做日志处理程序
(通过注册的回调)
来写缓冲区,
然后继续其逻辑,
并将数据刷新到XLOG 中。
图13- 8 异步日志记录
总结
异步重做日志记录选项是最快的日志记录选项,
因为它不需要客户端应用程序等待数据
写入磁盘。此外,它将许多事务重做条目分组并把它们写入一起,从而减少降低MOT 引擎
速度的磁盘I/O 数量。
异步重做日志记录选项的缺点是它不能确保在崩溃或失败时数据不会丢失。
已提交但尚

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
498
未写入磁盘的数据在提交时是不持久的,
因此在出现故障时无法恢复。
异步重做日志记录选
项对于愿意牺牲数据恢复(一致性)而不是性能的应用程序来说最为相关。

日志记录设计细节
下面将详细介绍内储存引擎模块中与持久化相关的各个组件的设计细节。
图13- 9 三种日志记录选项
重做日志组件由使用内储存引擎的后端线程和WAL 编写器使用,以便持久化其数据。
检查点通过Checkpoint 管理器执行,由Postgres 的Checkpointer 触发。

日志记录设计概述
预写日志记录(WAL)是确保数据持久性的标准方法。WAL 的核心概念是,数据文件
(表和索引所在的位置)
的更改只有在记录了这些更改之后才会写入,
这意味着在描述这些
更改的日志记录被刷新到永久存储之后。
在内储存引擎中,我们使用现有的GBase 8c 日志设施,并没有从头开始开发低级别的
日志API,以减少开发时间并使其可用于复制目的。

单事务日志记录
在内储存引擎中,事务日志记录存储在事务缓冲区中,事务缓冲区是事务对象(TXN)
的一部分。
在调用addToLog()时记录事务缓冲区–如果缓冲区超过阈值,
则将其刷新并重新
使用。当事务提交并通过验证阶段(OCC SILO[对比:磁盘与MOT]验证)或由于某种原因
中止时,相应的消息也会保存在日志中,以便能够在恢复期间确定事务的状态。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
499
图13- 10 单事务日志记录
并行日志记录由MOT 和磁盘引擎执行。但是,MOT 引擎通过每个事务的日志缓冲区、
无锁准备和单个日志记录增强了这种设计。

异常处理
持久化模块通过Postgres 错误报告基础设施(ereport)处理异常。系统日志中会记录每
个错误情况的错误信息。此外,使用Postgres 内置的错误报告基础设施将错误报告到封装。
该模块上报有如下异常:
表13- 7 异常处理
异常条件
异常码
场景描述
最终结果
WAL 写入失

ERRCODE_FDW_ERROR
在任何情况
下,
WAL 写入
失败
事务终止
文件IO 错误:
写入、打开等
ERRCODE_IO_ERROR
检查点:在任
何文件访问错
误时调用
严重:进程存

内存不足
ERRCODE_INSUFFICIENT_RESOURCES
检查点:本地
内存分配失败
严重:进程存


GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
500
逻辑、DB 错

ERRCODEINTERNAL
错误
检查点:算法
失败或无法检
索表数据或索

严重:进程存

语法
支持向量机分类模型的训练函数的语法如下:
svm_classification(
source_table,
model_table,
dependent_varname,
independent_varname,
params
)
参数说明

source_table:含训练数据的输入表。

model _table:保存训练结果的结果表。

dependent_varname:因变量的列名。

independent_varname:自变量的列名,数组类型。

params:模型训练参数。
其中的模型训练参数(params)是以逗号分割的键-值(key-value)对,支持的键值
如下:
init_stepsize(初始步长)
缺省值: [0.01]. 初始的学习步长。一个比较小的值可以保证收敛结果,而较
大的值可以提高修炼速度。
decay_factor(衰减系数)。
缺省值:[0.9].控制迭代过程中使用的学习步长: 0 表示恒定步长; -1 表示反
向缩放,步长= 初始步长/ 迭代次数; > 0 表示指数衰减, 步长= 初始步
长*衰减系数^迭代次数。
max_iter(最大迭代次数)
缺省值:[100].
tolerance(容忍度)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1429
缺省值:1e-10. 两次迭代的模型差值小于容忍度时结束迭代。
Lambda(正则化参数)
缺省值:[0.01]. 必须大于0,不能为负值。
结果表说明
训练函数成功执行后,会创建保存模型信息的结果表,结果表包含如下字段用来
表示模型信息:

coef:相关系数,用于预测。

loss:损失函数值。

norm_of_gradient:损失函数的梯度值。

num_iterations:迭代次数。

num_rows_processed:处理的数据行数。

num_rows_skipped:略过的数据行数。

dep_var_mapping:因变量的可能取值。
摘要表说明
训练结束还会生出一个摘要表,其名为结果表表名加上”_summary”,摘要表的字
段说明如下:

method:挖掘算法名称,SVC 代表SVM 分类算法。

source_table:输入表名。

model_table:结果表名。

dependent_varname:因变量名。

independent_varname:自变量名。

grouping_col:分组列名。

optim_params:优化参数。

num_all_groups:全部分组数。

num_failed_groups:训练失败分组数。

total_rows_processed:处理的数据行数。

total_rows_skipped:略过的数据行数。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1430