Garnet 配置

如何配置 Garnet

Garnet 服务器 (GarnetServer.exe) 可以使用配置文件(例如 garnet.confredis.conf)进行配置,而命令行参数可用于覆盖文件中指定的任何设置。/ 未在配置文件或命令行参数中指定的任何设置都将设置为 defaults.conf 文件中指定的默认值(可以通过命令行参数覆盖此文件的路径)。

Garnet 当前支持两种配置文件格式:

  1. garnet.conf 文件格式(默认)- 一个 JSON 格式的设置集合
  2. redis.conf 文件格式 - 一个 Redis 配置文件格式的设置集合:

    1. 关键字 参数1 参数2 参数3 ... 参数N

    参考 Redis 文档。/ 重要: 不是所有 redis.conf 关键字都在 Garnet 中受支持。为了全面覆盖配置设置,请使用 garnet.conf 格式。

可以通过命令行参数指定配置文件路径(和默认文件路径)。

  1. 对于 garnet.conf

    1. GarnetServer.exe --config-import-path <文件路径>
  2. 对于 redis.conf

    1. GarnetServer.exe --config-import-path <文件路径> --config-import-format RedisConf

注意: 要更改默认配置文件的路径(和/或格式),请分别使用 config-default-import-pathconfig-default-import-format 关键字。

garnet.conf

Garnet 的默认配置文件格式,支持全范围的可配置 Garnet 设置。/ garnet.conf 是一个 JSON 格式的文件,包含一系列配置设置。有关所有可用设置,请参见 defaults.conf 文件或参考完整的 Garnet 设置 列表

redis.conf

Garnet 支持 redis.conf 文件格式作为配置文件。请注意,并非所有 redis.conf 关键字都受支持。请参阅以下支持的 redis.conf 关键字列表:

redis.conf 关键字 garnet.conf 关键字 备注
bind bind 仅使用第一个地址
port port
maxmemory memory
logfile file-logger
loglevel logger-level
dir checkpointdir
requirepass password
aclfile acl-file
cluster-enabled cluster
cluster-node-timeout cluster-timeout
tls-port tls 值用于指示是否应使用 TLS,否则忽略端口号
tls-cert-file cert-file-name Garnet 目前支持使用 .pfx 文件和密码短语的 TLS,而 Redis 支持使用 .crt 和 .key 文件的 TLS。要在 Garnet 中使用 redis.conf 并使用 TLS,将您的证书转换为 .pfx 格式(详见 安全性 部分),然后使用 .pfx 文件路径作为 tls-cert-file 值。如果在创建原始证书时使用了密码短语,请在 tls-key-file-pass 参数中(或通过 --cert-password 命令行参数)指定它,就像在 Redis 中一样。在启动服务器时,如果适用,使用 --cert-subject-name 命令行参数设置证书主题名称。
tls-key-file cert-password tls-cert-file 注释
tls-auth-clients client-certificate-required tls-cert-file 注释
latency-tracking latency-monitor
io-threads numthreads
repl-diskless-sync-delay replica-sync-delay

命令行参数

Garnet 中的任何设置也可以通过指定命令行参数进行配置。/ 如果设置也在配置文件中指定,它将被命令行中指定的值覆盖。/ 有关所有可用的命令行设置,请运行 GarnetServer.exe -hGarnetServer.exe -help,或参考完整的 Garnet 设置 列表

可配置设置

| garnet.conf
关键字 | 命令行关键字(s) | 类型 | 有效值 | 描述 | | —- | —- | —- | —- | —- | | Port | --port | int | 范围中的整数:
[0, 65535] | 运行服务器的端口 | | Address | --bind | string | v4/v6 格式的 IP 地址 | 绑定服务器的 IP 地址(默认:任意) | | MemorySize | -m
--memory | string | 内存大小 | 总共使用的日志内存字节数(向下取 2 的幂) | | PageSize | -p
--page | string | 内存大小 | 每个页面的大小字节数(向下取 2 的幂) | | SegmentSize | -s
--segment | string | 内存大小 | 磁盘上每个日志段的大小字节数(向下取 2 的幂) | | IndexSize | -i
--index | string | 内存大小 | 哈希索引的大小字节数(向下取 2 的幂) | | IndexMaxSize | --index-max-size | string | 内存大小 | 哈希索引的最大大小字节数(向下取 2 的幂) | | MutablePercent | --mutable-percent | int | | 日志内存中保持可变的百分比 | | ObjectStoreTotalMemorySize | --obj-total-memory | string | 内存大小 | 总共使用的包括堆内存的对象存储日志内存字节数 | | ObjectStoreLogMemorySize | --obj-memory | string | 内存大小 | 不包括堆内存的对象存储日志内存使用的字节数 | | ObjectStorePageSize | --obj-page | string | 内存大小 | 每个对象存储页面的大小字节数(向下取 2 的幂) | | ObjectStoreSegmentSize | --obj-segment | string | 内存大小 | 磁盘上每个对象存储日志段的大小字节数(向下取 2 的幂) | | ObjectStoreIndexSize | --obj-index | string | 内存大小 | 对象存储哈希索引的大小字节数(向下取 2 的幂) | | ObjectStoreIndexMaxSize | --obj-index-max-size | string | 内存大小 | 对象存储哈希索引的最大大小字节数(向下取 2 的幂) | | ObjectStoreMutablePercent | --obj-mutable-percent | int | | 对象存储日志内存中保持可变的百分比 | | EnableStorageTier | --storage-tier | bool | | 启用记录的分层(混合日志)到存储,以支持比内存大的存储。使用 —logdir 指定存储目录。 | | CopyReadsToTail | --copy-reads-to-tail | bool | | 当记录从主存储的内存不可变区域或存储设备读取时,将它们复制到日志的尾部。 | | ObjectStoreCopyReadsToTail | --obj-copy-reads-to-tail | bool | | 当记录从对象存储的内存不可变区域或存储设备读取时,将它们复制到日志的尾部。 | | LogDir | -l
--logdir | string | | 分层记录(混合日志)的存储目录,如果启用了存储分层(—storage-tier)。如果未指定,则使用当前目录。 | | CheckpointDir | -c
--checkpointdir | string | | 检查点的存储目录。如果未指定,则使用 logdir。 | | Recover | -r
--recover | bool | | 如果存在,从最新的检查点和日志中恢复。

garnet.conf 关键字 命令行关键字(s) 类型 有效值 描述
DisablePubSub --no-pubsub bool 禁用服务器上的 pub/sub 功能。
EnableIncrementalSnapshots --incsnap bool 启用增量快照。
PubSubPageSize --pubsub-pagesize string 内存大小 用于 pub/sub 的日志页面大小(向下取 2 的幂)
DisableObjects --no-obj bool 禁用对数据结构对象的支持。
EnableCluster --cluster bool 启用集群。
CleanClusterConfig --clean-cluster-config bool 以干净的集群配置启动。
AuthenticationMode --auth GarnetAuthenticationMode NoAuth, Password, Aad, ACL Garnet 的认证模式。这影响 AUTH 命令的处理方式以及如何根据 Garnet 对客户端进行认证。值选项:NoAuth, Password, Aad, ACL
Password --password string 密码认证的认证字符串。
ClusterUsername --cluster-username string 用于认证集群内通信的用户名。
ClusterPassword --cluster-password string 用于认证集群内通信的密码。
AclFile --acl-file string 外部 ACL 用户文件。
AadAuthority --aad-authority string AAD 认证的权威机构。
AadAudiences --aad-audiences string AAD 令牌的受众,用于 AAD 认证。应为逗号分隔的字符串。
AadIssuers --aad-issuers string AAD 令牌的发行者,用于 AAD 认证。应为逗号分隔的字符串。
AuthorizedAadApplicationIds --aad-authorized-app-ids string AAD 认证的授权客户端应用程序 ID。应为逗号分隔的字符串。
EnableAOF --aof bool 启用写前日志(仅附加文件)。
AofMemorySize --aof-memory string 内存大小 总共使用的 AOF 内存缓冲区字节数(达到此限制后溢写到磁盘)(向下取 2 的幂)
AofPageSize --aof-page-size string 内存大小 每个 AOF 页面的大小字节数(向下取 2 的幂)
CommitFrequencyMs --aof-commit-freq int 范围中的整数: [-1, MaxValue] 写前日志(仅附加文件)提交问题的频率,单位为毫秒。0 = 每个操作立即提交,-1 = 使用 COMMITAOF 命令手动提交
WaitForCommit --aof-commit-wait bool 在返回结果给客户端之前等待 AOF 刷新提交。警告:将大大增加操作延迟。
AofSizeLimit --aof-size-limit string 内存大小 AOF 的最大大小(向下取 2 的幂),之后将应用不安全的截断。留空则除非进行检查点,否则 AOF 将无限制增长
CompactionFrequencySecs --compaction-freq int 范围中的整数: [0, MaxValue] 后台混合日志压缩频率,单位为秒。0 = 禁用(改为在检查点之前执行压缩)
CompactionType --compaction-type LogCompactionType None, Shift, ShiftForced, Scan, Lookup 混合日志压缩类型。值选项:None - 无压缩,Shift - 不压缩地移动开始地址(数据丢失),ShiftForced - 不压缩地移动开始地址(数据丢失)。立即删除文件 - 如果您计划在故障后恢复,请不要使用,Scan - 扫描旧页面并将活动记录移动到尾部(无数据丢失 - 需要进行检查点才能真正从磁盘中删除旧的数据文件),Lookup - 查看压缩范围内的每个记录,使用哈希链进行记录活动检查(无数据丢失 - 需要进行检查点才能真正从磁盘中删除旧的数据文件)
CompactionMaxSegments --compaction-max-segments int 范围中的整数: [0, MaxValue] 在触发压缩之前在磁盘上创建的日志段的数量。
ObjectStoreCompactionMaxSegments --obj-compaction-max-segments int 范围中的整数: [0, MaxValue] 在触发压缩之前在磁盘上创建的对象存储日志段的数量。
GossipSamplePercent --gossip-sp int 每次 gossip 迭代时 gossip 与集群节点的百分比。
GossipDelay --gossip-delay int 范围中的整数: [0, MaxValue] 集群模式 gossip 协议每个节点睡眠(以秒为单位)的延迟以发送更新的配置。
ClusterTimeout --cluster-timeout int 范围中的整数: [0, MaxValue] 集群节点超时是节点必须无法联系的秒数。
ClusterTlsClientTargetHost --cluster-tls-client-target-host string 在集群模式中使用 TLS 连接时,客户端目标主机的名称。
EnableTLS --tls bool 启用 TLS。
CertFileName --cert-file-name string TLS 证书文件名(例如:testcert.pfx)。
CertPassword --cert-password string TLS 证书密码(例如:placeholder)。
CertSubjectName --cert-subject-name string TLS 证书主题名称。
CertificateRefreshFrequency --cert-refresh-freq int 范围中的整数: [0, MaxValue] TLS 证书刷新频率,单位为秒(0 禁用)。
ClientCertificateRequired --client-certificate-required bool 是否需要 TLS 客户端证书。
CertificateRevocationCheckMode --certificate-revocation-check-mode X509RevocationMode NoCheck, Online, Offline 证书吊销检查模式,用于证书验证(NoCheck, Online, Offline)。
IssuerCertificatePath --issuer-certificate-path string 用于验证的发行者证书文件的完整路径。如果为空或 null,则不执行对发行者的验证。
LatencyMonitor --latency-monitor bool 跟踪各种事件的延迟。
MetricsSamplingFrequency --metrics-sampling-freq int 范围中的整数: [0, MaxValue] 指标采样频率,单位为秒。值为 0 禁用指标监控任务。
QuietMode -q -- bool 启用安静模式不会打印服务器版本和文本艺术。
LogLevel --logger-level LogLevel Trace, Debug, Information, Warning, Error, Critical, None 日志级别。值选项:Trace, Debug, Information, Warning, Error, Critical, None
DisableConsoleLogger --disable-console-logger bool 禁用控制台记录器。
FileLogger --file-logger string 启用文件记录器并写入指定路径。
ThreadPoolMinThreads --minthreads int 范围中的整数: [0, MaxValue] 线程池中的最小工作线程和完成线程,0 使用系统默认值。
ThreadPoolMaxThreads --maxthreads int 范围中的整数: [0, MaxValue] 线程池中的最大工作线程和完成线程,0 使用系统默认值。
UseAzureStorage --use-azure-storage bool 使用 Azure 页面 Blob存储进行存储,而不是本地存储。
garnet.conf 关键字 命令行关键字(s) 类型 有效值 描述
—- —- —- —- —-
AzureStorageConnectionString --storage-string string 建立连接到 Azure Blob 存储时使用的连接字符串。
CheckpointThrottleFlushDelayMs --checkpoint-throttle-delay int 范围中的整数: [-1, MaxValue] 我们应该以及在多大程度上限制检查点的磁盘 IO:-1 - 禁用节流;>= 0 - 在每个 WriteAsync 之后运行检查点刷新的单独任务,指定时间后休眠
EnableFastCommit --fast-commit bool 使用 FastCommit 进行 AOF 写入。
FastCommitThrottleFreq --fast-commit-throttle int 范围中的整数: [0, MaxValue] 将 FastCommit 限制为每 K 次提交写入一次元数据。
NetworkSendThrottleMax --network-send-throttle int 范围中的整数: [0, MaxValue] 每个会话限制最大未完成的网络发送数。
EnableScatterGatherGet --sg-get bool 是否我们对 MGET 或一系列连续的 GET 操作使用分散收集 IO - 有助于饱和磁盘随机读取 IO。
ReplicaSyncDelayMs --replica-sync-delay int 范围中的整数: [0, MaxValue] 我们是否以及在多大程度上(毫秒)限制副本同步:0 - 禁用节流
MainMemoryReplication --main-memory-replication bool 使用主内存复制模型。
OnDemandCheckpoint --on-demand-checkpoint bool 与主内存复制模型一起使用。按需进行检查点,以避免在附加时错过数据
UseAofNullDevice --aof-null-device bool 在主内存复制中,为 AOF 使用空设备。确保没有磁盘 IO,但在复制期间可能会导致数据丢失。
ConfigImportPath --config-import-path string 从提供的路径导入(加载)配置选项
ConfigImportFormat --config-import-format ConfigFileType GarnetConf, RedisConf 由 config-import-path 指定的路径中配置选项的格式
ConfigExportFormat --config-export-format ConfigFileType GarnetConf, RedisConf 导出配置选项到由 config-export-path 指定的路径的格式
UseAzureStorageForConfigImport --use-azure-storage-for-config-import bool 使用 Azure 存储来导入配置文件
ConfigExportPath --config-export-path string 将当前配置选项导出(保存)到提供的路径
UseAzureStorageForConfigExport --use-azure-storage-for-config-export bool 使用 Azure 存储来导出配置文件
UseNativeDeviceLinux --use-native-device-linux bool 在 Linux 上使用本地存储的本地设备
RevivBinRecordSizes --reviv-bin-record-sizes int[] #,#,…,#: 对于主存储,每个复活箱中的记录大小,按大小递增的顺序。取代默认的 —reviv;不能与 —reviv-in-chain-only 一起使用
RevivBinRecordCounts --reviv-bin-record-counts int[] #,#,…,#: 对于主存储,每个箱中的记录数:默认(未指定):如果指定了 reviv-bin-record-sizes,则每个箱有 256 条记录 # (一个值):如果指定了 reviv-bin-record-sizes,则所有箱都有这个数量的记录,否则出错 #,#,…,# (多个值):如果指定了 reviv-bin-record-sizes,则必须与该数组的大小相同,否则出错。取代默认的 —reviv;不能与 —reviv-in-chain-only 一起使用
RevivifiableFraction --reviv-fraction double 范围中的双精度浮点数: [0, 1] #: 从最高日志地址向下到只读区域的可变内存日志空间的一部分,有资格进行复活。适用于主存储和对象存储。
EnableRevivification --reviv bool 使用默认的 2 的幂大小的箱指定复活的快捷方式。此默认值可以被 —reviv-in-chain-only 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合覆盖。
RevivNumberOfBinsToSearch --reviv-search-next-higher-bins int 范围中的整数: [0, MaxValue] 如果在最佳拟合箱中无法满足搜索条件,则搜索这个数量的下一个更高箱。需要 —reviv 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合
RevivBinBestFitScanLimit --reviv-bin-best-fit-scan-limit int 范围中的整数: [0, MaxValue] 在找到第一次拟合后,扫描最佳拟合的记录数。需要 —reviv 或 reviv-bin-record-sizes 和 reviv-bin-record-counts 的组合 0: 使用第一次拟合 #: 在第一次拟合后限制扫描为此多条记录,最多为箱的记录数
RevivInChainOnly --reviv-in-chain-only bool 仅在标记链中的墓碑记录中复活(不使用自由列表)。不能与 reviv-bin-record-sizes 或 reviv-bin-record-counts 一起使用。默认情况下,通过对象存储传播。
RevivObjBinRecordCount --reviv-obj-bin-record-count int 范围中的整数: [0, MaxValue] 对象存储的单个空闲记录箱中的记录数。对象存储只有一个箱,与主存储不同。除非主存储使用空闲记录列表,否则将被忽略。
ObjectScanCountLimit --object-scan-count-limit int 范围中的整数: [0, MaxValue] *SCAN 命令一次迭代返回的项目限制
ExtensionBinPaths --extension-bin-paths string[] 服务器上允许管理员用户加载自定义命令二进制文件的目录列表
ExtensionAllowUnsignedAssemblies --extension-allow-unsigned bool 允许从未经数字签名的程序集加载自定义命令(不推荐)
IndexResizeFrequencySecs --index-resize-freq int 范围中的整数: [1, MaxValue] 索引调整大小检查频率,单位为秒
IndexResizeThreshold --index-resize-threshold int 范围中的整数: [1, 100] 溢出桶计数占总索引大小的百分比,以触发索引调整大小

请注意,这个列表是一个示例,可能不是完整的 Garnet 配置选项列表。具体的配置选项可能会根据 Garnet 的不同版本而有所变化。在实施任何配置更改之前,请参考最新的官方 Garnet 文档或 defaults.conf 文件,以获取最准确和最新的信息。