节点配置
节点配置对于每个节点都是独立的,不会在集群范围中共享。
在 Ignite 3 中,配置文件支持 HOCON
或 JSON
格式。配置文件有一个名为ignite
的根节点
,所有配置项都是该节点的子节点、孙节点等。
1.检查节点配置
使用命令行工具可以获取节点配置信息:
- 启动命令行工具并接入节点;
- 运行
node config show
命令。
命令行工具会输出完整节点配置,如果只想要部分配置,可以将所需的属性作为命令行参数就可以缩小搜索范围,例如:
shell
node config show ignite.clientConnector
2.调整节点配置
可以使用命令行工具调整节点的配置,做法如下:
- 启动命令行工具并接入某个节点,该节点会成为后续操作的
默认
节点; - 要更新该节点的配置,运行
node config updatenode config update
命令并提供新的参数作为命令参数,例如:shellnode config update ignite.clientConnector.connectTimeout=10000
- 要更新其他节点的配置,需要先明确指定目标节点。例如,对于名为
node1
的节点:shellnode config update -n node1 ignite.nodeAttributes.nodeAttributes={clientConnector.attribute="10900"}
- 重启该节点以使配置生效。
3.导出节点配置
使用以下命令可以将节点配置导出为 HOCON
格式的文件:
shell
bin/ignite3 node config show > node-config.conf
4.配置参数
4.1.客户端连接器配置
客户端连接器的参数配置,请参见客户端连接器相关章节的内容。
4.2.计算配置
json
{
"ignite" : {
"compute" : {
"queueMaxSize" : 2147483647,
"statesLifetimeMillis" : 60000,
"threadPoolSize" : 10,
"threadPoolStopTimeoutMillis" : 10000
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
queueMaxSize | 2147483647 | 队列中的最大计算任务数 | 是 | 是 | 1 - Integer.MAX_VALUE |
statesLifetimeMillis | 60000 | 作业完成后作业状态的生命周期(毫秒) | 是 | 是 | 0 - inf |
threadPoolSize | 10 | 可用于计算作业的线程数 | 是 | 是 | 1 - Integer.MAX_VALUE |
threadPoolStopTimeoutMillis | 10000 | 作业线程池停止超时(毫秒) | 是 | 是 | 1 - inf |
4.3.关键线程配置
json
{
"ignite" : {
"criticalWorkers" : {
"livenessCheckInterval" : 200,
"maxAllowedLag" : 500,
"nettyThreadsHeartbeatInterval" : 100
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
livenessCheckInterval | 200 | 关键线程执行的存活检查的间隔(毫秒) | 是 | 是 | 1 - inf(不大于 maxAllowedLag 的一半) |
maxAllowedLag | 500 | 从上次心跳到当前时间的最大允许延迟(毫秒),如果超过,则认为关键线程已被阻塞。 | 是 | 是 | 1 - inf(应至少是 livenessCheckInterval 的两倍) |
nettyThreadsHeartbeatInterval | 100 | 用于更新 Netty 线程心跳时间戳的心跳间隔(毫秒) | 是 | 是 | 1 - inf |
4.4.代码部署配置
json
{
"ignite" : {
"deployment" : {
"deploymentLocation" : "deployment"
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
deploymentLocation | deployment | 相对于工作目录的目录名,所有的部署单元都要保存在该位置 | 是 | 否 | 有效的路径 |
4.5.网络配置
json
{
"ignite" : {
"network" : {
"fileTransfer" : {
"chunkSize" : 1048576,
"maxConcurrentRequests" : 4,
"responseTimeout" : 10000,
"threadPoolSize" : 8
},
"inbound" : {
"soBacklog" : 128,
"soKeepAlive" : true,
"soLinger" : 0,
"soReuseAddr" : true,
"tcpNoDelay" : true
},
"listenAddress" : "",
"membership" : {
"failurePingInterval" : 1000,
"membershipSyncInterval" : 30000,
"scaleCube" : {
"failurePingRequestMembers" : 3,
"gossipInterval" : 200,
"gossipRepeatMult" : 3,
"membershipSuspicionMultiplier" : 5,
"metadataTimeout" : 3000
}
},
"nodeFinder" : {
"netClusterNodes" : [ "localhost:3344" ],
"type" : "STATIC"
},
"outbound" : {
"soKeepAlive" : true,
"soLinger" : 0,
"tcpNoDelay" : true
},
"port" : 3344,
"shutdownQuietPeriod" : 0,
"shutdownTimeout" : 15000,
"ssl" : {
"ciphers" : "",
"clientAuth" : "none",
"enabled" : false,
"keyStore" : {
"password" : "********",
"path" : "",
"type" : "PKCS12"
},
"trustStore" : {
"password" : "********",
"path" : "",
"type" : "PKCS12"
}
}
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
fileTransfer | 文件传输配置 | ||||
fileTransfer.chunkSize | 1048576 | 区块大小(字节) | 是 | 是 | 1 - 1 - Integer.MAX_VALUE |
fileTransfer.maxConcurrentRequests | 4 | 最大并发请求数 | 是 | 是 | 1 - Integer.MAX_VALUE |
fileTransfer.responseTimeout | 10000 | 文件传输期间的节点响应超时 | 是 | 是 | 0 - inf |
fileTransfer.threadPoolSize | 8 | 文件发送方线程池大小 | 是 | 是 | 1 - Integer.MAX_VALUE |
inbound | 服务器套接字配置,具体请参加 TCP 和 套接字的文档 | ||||
inbound.soBacklog | 128 | 积压量的大小 | 是 | 是 | 0 - Integer.MAX_VALUE |
inbound.soKeepAlive | true | 是否允许保活状态的数据包 | 是 | 是 | true ,false |
inbound.soLinger | 0 | 关闭的套接字应延迟多长时间 | 是 | 是 | 0-65535 |
inbound.soReuseAddr | true | 是否允许地址复用 | 是 | 是 | true ,false |
inbound.tcpNoDelay | true | 是否使用 TCP_NODELAY 选项 | 是 | 是 | true ,false |
listenAddress | 要监听的地址(IP或主机名),如果为空则监听所有的地址 | 是 | 是 | 有效的地址 | |
membership | 节点成员资格配置 | ||||
membership.failurePingInterval | 1000 | 故障检测 ping 间隔 | 是 | 是 | 0 - inf |
membership.membershipSyncInterval | 30000 | 定期成员数据同步间隔 | 是 | 是 | 0 - inf |
membership.scaleCube | ScaleCube 配置 | ||||
scaleCube.failurePingRequestMembers | 3 | 为间接 ping 请求随机选择的成员数 | 是 | 是 | 1 - inf |
scaleCube.gossipInterval | 200 | Gossip传播间隔 | 是 | 是 | 1 - inf |
scaleCube.gossipRepeatMult | 3 | Gossip 重复乘数 | 是 | 是 | 1 - inf |
scaleCube.membershipSuspicionMultiplier | 5 | 用于计算超时的乘数,超过该值后节点将被视为无效 | 是 | 是 | 1 - inf |
scaleCube.metadataTimeout | 3000 | 元数据更新操作的超时时间(毫秒) | 是 | 是 | 1 - inf |
nodeFinder | 节点在集群中探测其他节点的配置 | ||||
nodeFinder.netClusterNodes | 集群中所有节点的地址,采用 host:port 格式 | 是 | 是 | 有效的地址 | |
nodeFinder.type | STATIC | 节点探测器类型 | 是 | 是 | 当前仅支持STATIC |
outbound | 输出请求的配置 | ||||
outbound.soKeepAlive | true | 是否允许保活状态的数据包 | 是 | 是 | true ,false |
outbound.soLinger | 0 | 关闭的套接字应延迟多长时间 | 是 | 是 | 0-65535 |
outbound.tcpNoDelay | true | 是否使用 TCP_NODELAY 选项 | 是 | 是 | true ,false |
port | 3344 | 节点端口 | 是 | 是 | 有效的端口号 |
shutdownQuietPeriod | 0 | 节点关闭期间 Ignite 确保在节点自行关闭之前不提交任何任务的时间段,如果在此期间提交了任务还可以被接受 | 是 | 否 | 0 - inf |
shutdownTimeout | 15000 | 节点关闭前的最长时间,无论在shutdownQuietPeriod 期间是否提交了新的网络消息。 | 是 | 否 | 0 - inf |
ssl.ciphers | 要启用的密码列表,以逗号分隔。为空表示自动选择密码 | 是 | 是 | TLS_AES_256_GCM_SHA384 等(标准密码 ID) | |
ssl.clientAuth | none | 是否启用 SSL 客户端身份验证以及是否为强制性身份验证 | 是 | 是 | none ,optional ,require |
ssl.enabled | false | 是否为节点启用 SSL | 是 | 是 | true ,false |
ssl.keyStore | SSL 密钥库配置 | ||||
keyStore.password | 密钥库密码 | 是 | 是 | 有效的密码 | |
keyStore.path | 密钥库路径 | 是 | 是 | 有效的路径 | |
keyStore.type | PKCS12 | 密钥库类型 | 是 | 是 | PKCS12 ,JKS |
ssl.trustStore | SSL 信任库配置 | ||||
trustStore.password | 信任库密码 | 是 | 是 | 有效的密码 | |
trustStore.path | 信任库路径 | 是 | 是 | 有效的路径 | |
trustStore.type | PKCS12 | 信任库类型 | 是 | 是 | PKCS12 ,JKS |
4.6.节点属性
json
{
"ignite" : {
"nodeAttributes" : {
"nodeAttributes" : [ ]
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
nodeAttributes | 用于将数据动态分发到具有指定属性值的节点的节点属性列表。 | 是 | 是 | JSON 格式的列表 |
4.7.Raft配置
json
{
"ignite" : {
"raft" : {
"fsync" : true,
"logPath" : "",
"logStripesCount" : 4,
"logYieldStrategy" : false,
"responseTimeout" : 3000,
"retryDelay" : 200,
"retryTimeout" : 10000,
"rpcInstallSnapshotTimeout" : 300000,
"stripes" : 10,
"volatileRaft" : {
"logStorage" : {
"name" : "unlimited"
}
}
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
fsync | true | 是否使用全同步模式在集群中传输数据。 | 是 | 是 | true 、false |
logPath | 存储 Raft 日志的目录。 | 是 | 是 | 有效路径 | |
logStripesCount | 4 | 日志管理器的 Disruptor 中的并行度 | 是 | 是 | 1 - inf |
logYieldStrategy | false | 如果为 true ,则在日志管理器的 Disruptor 中使用非阻塞策略。 | 是 | 是 | true ,false |
responseTimeout | 3000 | Raft 客户端将尝试从远程对等体接收响应的时间段 | 是 | 否 | 0 - inf |
retryDelay | 200 | Raft 客户端重新发送失败请求的延迟 | 是 | 否 | 0 - inf |
retryTimeout | 10000 | Raft 客户端尝试从远程对等体接收成功响应的时间段 | 是 | 否 | 0 - inf |
installSnapshotTimeout | 300000 | 允许将 Raft 快照传输给接收方并安装该快照的最长时间 | 是 | 否 | 1 - inf |
volatileRaft.logStorageBudget.name | unlimited | 节点使用的日志存储名。 | 是 | 否,但是新的值仅适用于新的分区 | unlimited 、entry-count |
4.8.REST配置
json
{
"ignite" : {
"rest" : {
"dualProtocol" : false,
"httpToHttpsRedirection" : false,
"port" : 10300,
"ssl" : {
"ciphers" : "",
"clientAuth" : "none",
"enabled" : false,
"keyStore" : {
"password" : "********",
"path" : "",
"type" : "PKCS12"
},
"port" : 10400,
"trustStore" : {
"password" : "********",
"path" : "",
"type" : "PKCS12"
}
}
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
dualProtocol | false | 端点是否同时使用 HTTP 和 HTTPS 协议。 | 是 | 是 | true ,false |
httpToHttpsRedirection | false | 是否将 HTTP 端点重定向到 HTTPS 端点。 | 是 | 是 | true ,false |
port | 10300 | 节点的 REST 端点的端口。 | 是 | 是 | 有效的端口 |
ssl.ciphers | 显式设置节点 SSL 密码。 | 是 | 是 | 查看可选值 | |
ssl.clientAuth | 是否启用 SSL 客户端身份验证以及是否为强制性身份验证。 | 是 | 是 | none 、optional 、require | |
ssl.enabled | false | 是否为节点启用 SSL。 | 是 | 是 | true ,false |
ssl.keyStore | SSL 密钥库配置 | ||||
keyStore.password | 密钥库密码 | 是 | 是 | 有效的密码 | |
keyStore.path | 密钥库路径 | 是 | 是 | 有效的路径 | |
keyStore.type | PKCS12 | 密钥库类型 | 是 | 是 | PKCS12 、JKS |
ssl.port | 10400 | 用于 SSL 连接的端口。 | 是 | 是 | 有效的端口 |
ssl.trustStore | SSL 信任库配置 | ||||
trustStore.password | 信任库密码 | 是 | 是 | 有效的密码 | |
trustStore.path | 信任库路径 | 是 | 是 | 有效的路径 | |
trustStore.type | PKCS12 | 信任库类型 | 是 | 是 | PKCS12 、JKS |
4.9.快照配置
json
{
"ignite" : {
"snapshot" : {
"threadPoolSize" : 20
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
threadPoolSize | 20 | 创建或还原快照时Ignite用于IO操作的线程数。 | 是 | 是 | 1 - Integer.MAX_VALUE |
4.10.SQL配置
json
{
"ignite" : {
"sql" : {
"execution" : {
"threadCount" : 4
},
"nodeMemoryQuota" : "60%",
"planner" : {
"threadCount" : 4
}
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
execution.threadCount | 4 | 用于查询执行的线程数。 | 是 | 是 | 1 - Integer.MAX_VALUE |
nodeMemoryQuota | 60% | 节点级用于 SQL 查询的内存限制,具有维度标识符的数字:% :节点堆内存的百分比;k :KB;m :MB;g :GB,带有任何维度标识符的0 都会关闭内存配额。 | 是 | 否 | 0-100%,0-9223372036854775807k/m/g |
planner.threadCount | 4 | 用于查询计划的线程数。 | 是 | 是 | 1 - Integer.MAX_VALUE |
4.11.存储配置
Ignite 的持久化追求读写的高性能。使用持久化时,Ignite 将所有数据存储在磁盘上,并将尽可能多的数据加载到内存中进行处理。Ignite 会将每个分区存储在磁盘上的单独文件中,除了数据分区之外,Ignite 还存储索引和元数据。
每个 Ignite 存储引擎可以有多个存储配置。
检查点是将脏页从内存复制到磁盘上分区文件的过程。脏页是在内存中更新但未写入相应分区文件的页。检查点完成后,所有更改都将保存到磁盘上,并在节点故障并重启时仍然可用。检查点旨在确保数据的持久性并在节点发生故障时进行恢复。此过程通过使磁盘上的页面保持最新状态,能更高效地利用磁盘空间。
json
{
"ignite" : {
"storage" : {
"engines" : {
"aimem" : {
"pageSize" : 16384
},
"aipersist" : {
"checkpoint" : {
"checkpointDelayMillis" : 200,
"checkpointThreads" : 4,
"compactionThreads" : 4,
"frequency" : 180000,
"frequencyDeviation" : 40,
"logReadLockThresholdTimeout" : 0,
"readLockTimeout" : 10000,
"useAsyncFileIoFactory" : true
},
"pageSize" : 16384
},
"rocksdb" : {
"flushDelayMillis" : 100
},
"profiles" : [ {
"engine" : "aipersist",
"name" : "default",
"replacementMode" : "CLOCK",
"size" : 268435456
},
{
"engine" : "aimem",
"name" : "default_aimem",
"emptyPagesPoolSize" : 100,
"eviction" : {
"batchSize" : 200,
"interval" : 60000,
"lwmThreshold" : 1000,
"lwmUpdateInterval" : 60000,
"mode" : "DISABLED",
"threshold" : "90%"
},
"initSize" : 268435456,
"maxSize" : 268435456
},
{
"engine" : "rocksdb",
"name" : "default_rocksdb",
"size" : 268435456,
"writeBufferSize" : 67108864
} ]
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
engines.aimem | 内存存储配置 | ||||
aimem.pageSize | 16384 | 内存存储的页面大小(字节)。 | 是 | 是 | 1024-16384 |
engines.aipersist | 原生存储配置 | ||||
aipersist.checkpoint.checkpointDelayMillis | 200 | 在收到命令后启动检查点之前的延迟。 | 是 | 否 | 0 - inf |
aipersist.checkpoint.checkpointThreads | 4 | 用于检查点的线程数。 | 是 | 是 | 1 - inf |
aipersist.checkpoint.compactionThreads | 4 | 用于数据压缩的线程数。 | 是 | 是 | 1 - inf |
aipersist.checkpoint.interval | 180000 | 检查点之间的间隔(毫秒)。 | 是 | 否 | 0 - inf |
aipersist.checkpoint.intervalDeviation | 40 | 从下一个计划检查点之前的时间段中添加或减去的抖动(百分比)。 | 是 | 否 | 0 - 100 |
aipersist.checkpoint.logReadLockThresholdTimeout | 0 | 记录长读锁定的阈值(毫秒)。 | 是 | 是 | 0 - inf |
aipersist.checkpoint.readLockTimeout | 10000 | 检查点读取锁获取的超时时间(毫秒)。 | 是 | 是 | 0 - inf |
aipersist.checkpoint.useAsyncFileIoFactory | true | Ignite 是否使用异步文件 I/O 操作程序。 | 是 | 是 | true 、false |
aipersist.pageSize | 16384 | 原生存储的页面的大小(字节)。 | 否 | 不适用 | 1024-16384 |
engines.rocksdb | RocksDB 存储配置 | ||||
rocksdb.flushDelayMillis | 100 | 执行 Raft 触发的刷新之前的延迟。 | 是 | 引擎注册时刷新 | 0 - inf |
profiles | 可用存储配置的列表。 | ||||
engine | 存储引擎。 | 否 | 不适用 | aimem 、aipersist 、rocksdb | |
name | 用户定义的配置名。 | 否 | 不适用 | 有效的名字 | |
replacementMode | CLOCK | 页面替换算法。 | 是 | 是 | CLOCK 、RANDOM_LRU 、SEGMENTED_LRU |
size | 268435456 | 内存区的大小(字节)。 | 是 | 是 | 最小268435456,最大由操作系统的可寻址内存限制定义 |
aipersist.size | 268435456 | 堆外内存区的大小(字节)。 | 是 | 是 | 最小268435456,最大由操作系统的可寻址内存限制定义 |
aipersist.replacementMode | CLOCK | 页面替换算法。 | 是 | 是 | CLOCK 、RANDOM_LRU 、SEGMENTED_LRU |
aimem.initSize | 268435456 | 初始内存区大小(字节),超过该值后,会申请新的内存块。 | 是 | 是 | 最小256MB,最大由操作系统的可寻址内存限制定义 |
aimem.maxSize | 268435456 | 最大内存区大小(字节)。 | 是 | 是 | 最小256MB,最大由操作系统的可寻址内存限制定义 |
aimem.eviction.mode | DISABLED | 退出模式。 | 是 | 否 | DISABLED 、HISTORY_ONLY 、RANDOM |
aimem.eviction.threshold | 90% | 发起退出的阈值。具有维度标识符的数字:% :aimem.maxSize 的百分比;k :KB;m :MB;g :GB,例如,90% 指只有在90%的数据区被占用后,页面内存才会开始退出。 | 是 | 不适用 | 0-100%,0-9223372036854775807k/m/g |
aimem.eviction.lwmUpdateInterval | 60000 | 低水位线更新频率(毫秒)。 | 是 | 否 | 1 - inf |
aimem.eviction.interval | 60000 | 数据退出迭代的间隔(毫秒)。 | 是 | 否 | 1 - inf |
aimem.eviction.lwmThreshold | 1000 | 如果低水位线低于当前时间戳的evictionLwmThreshold ,则触发行退出。 | 是 | 否 | 0 - inf |
aimem.eviction.batchSize | 60000 | 数据退出每批次的行数。 | 是 | 否 | 1 - inf |
rocksdb.size | 268435456 | RocksDB 的堆外缓冲区大小(字节)。 | 是 | 是 | 最小值为0,最大由操作系统的可寻址内存限制定义 |
rocksdb.writeBufferSize | 67108864 | RocksDB 的写缓冲区大小(字节)。 | 是 | 是 | 最小值为1,最大由操作系统的可寻址内存限制定义 |
5.系统配置
本章节介绍 Ignite 的内部属性。虽然也可以像编辑所有其他属性一样编辑这些属性,即使用命令行工具的node config update
命令,但建议开发者慎重修改。这些属性可以适用某个节点(见下文),也可以适用整个集群。
提示
注意,属性名为驼峰式。
json
{
"ignite" : {
"system" : {
"cmgPath" : "",
"metastoragePath" : "",
"partitionsBasePath" : "",
"partitionsLogPath" : "",
"properties":[]
}
}
}
属性 | 默认值 | 描述 | 可修改 | 需要重启 | 可选值 |
---|---|---|---|---|---|
system.cmgPath | 集群管理组信息的存储路径。仅当节点是 CMG 的一部分时适用。数据默认存储在{IGNITE_HOME}/work/cmg ,建议仅在空节点上更改此路径。 | 是 | 是 | 有效的绝对路径。 | |
system.metastoragePath | 集群元信息的存储路径。仅当节点是元存储组的一部分时适用。数据默认存储在{IGNITE_HOME}/work/metastorage ,建议仅在空节点上更改此路径。 | 是 | 是 | 有效的绝对路径。 | |
system.partitionsBasePath | 数据分区的存储路径。分区默认存储在{IGNITE_HOME}/work/partitions 。建议仅在空节点上更改此路径。 | 是 | 是 | 有效的绝对路径。 | |
system.partitionsLogPath | 数据分区的 Raft 日志存储路径。分区默认存储在{system.partitionsBasePath}/log ,建议仅在空节点上更改此路径。 | 是 | 是 | 有效的绝对路径。 | |
system.properties | Ignite 组件使用的系统属性。 | 是 | 是 | 属性数组。 |
18624049226