Skip to content

如何配置 Garnet

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

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

  1. garnet.conf 文件格式(默认)- 一组以 JSON 格式排列的设置
  2. redis.conf 文件格式 - Redis 配置文件格式中的一组设置:
    keyword argument1 argument2 argument3 ... argumentN
    有关参考,请参阅 Redis 文档重要提示: Garnet 并不支持所有 redis.conf 关键字。为了完整覆盖配置设置,请使用 garnet.conf 格式。

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

  1. 对于 garnet.conf
    GarnetServer.exe --config-import-path <file-path>
  2. 对于 redis.conf
    GarnetServer.exe --config-import-path <file-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 Keywordsgarnet.conf Keywords注意
bindbind仅使用第一个地址
portport
maxmemorymemory
logfilefile-logger
loglevellogger-level
dircheckpointdir
requirepasspassword
aclfileacl-file
cluster-enabledcluster
cluster-node-timeoutcluster-timeout
tls-porttls否则端口号被忽略
tls-cert-filecert-file-nameGarnet 目前支持使用 .pfx 文件和密码来进行 TLS 加密,而 Redis 支持使用 .crt 和 .key 文件。为了在使用 redis.conf 文件配置 Garnet 的 TLS 加密,请将您的证书转换为 .pfx 格式(请参阅安全部分中的详细信息),然后将 .pfx 文件路径用作 tls-cert-file 的值。如果在创建原始证书时使用了密码,请像在 Redis 中一样在 tls-key-file-pass 参数中指定它(或通过 --cert-password 命令行参数指定)。启动服务器时,如果适用,请使用 --cert-subject-name 命令行参数设置证书主题名称。
tls-key-filecert-password请参阅 tls-cert-file 的注意事项
tls-auth-clientsclient-certificate-required请参阅 tls-cert-file 的注意事项
latency-trackinglatency-monitor
io-threadsnumthreads
repl-diskless-sync-delayreplica-sync-delay

命令行参数

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

可配置的设置

garnet.conf
keyword
Command line keyword(s)TypeValid Values描述
Port--portint整数范围:
[0, 65535]
运行服务器的端口
Address--bindstringIPv4/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-sizestring内存大小散列索引的最大大小(向下舍入为2的幂)
MutablePercent--mutable-percentint保持可变的日志内存百分比
ObjectStoreTotalMemorySize--obj-total-memorystring内存大小包括堆内存在内的总对象存储日志内存使用
ObjectStoreLogMemorySize--obj-memorystring内存大小不包括堆内存在内的对象存储日志内存使用
ObjectStorePageSize--obj-pagestring内存大小每个对象存储页面的大小(向下舍入为2的幂)
ObjectStoreSegmentSize--obj-segmentstring内存大小磁盘上每个对象存储日志段的大小(向下舍入为2的幂)
ObjectStoreIndexSize--obj-indexstring内存大小对象存储散列索引的大小(向下舍入为2的幂)
ObjectStoreIndexMaxSize--obj-index-max-sizestring内存大小对象存储散列索引的最大大小(向下舍入为2的幂)
ObjectStoreMutablePercent--obj-mutable-percentint保持可变的对象存储日志内存百分比
EnableStorageTier--storage-tierbool启用记录(混合日志)的分层存储,以支持大于内存的存储。使用 --logdir 指定存储目录。
CopyReadsToTail--copy-reads-to-tailbool从主存储的内存不可变区域或存储设备读取记录时,将其复制到日志的尾部。
ObjectStoreCopyReadsToTail--obj-copy-reads-to-tailbool从对象存储的内存不可变区域或存储设备读取记录时,将其复制到日志的尾部。
LogDir-l
--logdir
string用于分层记录(混合日志)的存储目录,如果启用了分层存储(--storage)。如果未指定,则使用当前目录。
CheckpointDir-c
--checkpointdir
string检查点的存储目录。如果未指定,则使用 logdir。
Recover-r
--recover
bool从最新的检查点和日志中恢复(如果存在)。
DisablePubSub--no-pubsubbool禁用服务器上的发布/订阅功能。
EnableIncrementalSnapshots--incsnapbool启用增量快照。
PubSubPageSize--pubsub-pagesizestring内存大小用于发布/订阅的日志页面大小(向下舍入为2的幂)
DisableObjects--no-objbool禁用数据结构对象的支持。
EnableCluster--clusterbool启用集群。
CleanClusterConfig--clean-cluster-configbool使用干净的集群配置启动。
AuthenticationMode--authGarnetAuthenticationModeNoAuth, Password, Aad, ACLGarnet的身份验证模式。这影响如何处理AUTH命令以及如何对客户端进行身份验证。值选项:NoAuth,Password,Aad,ACL
Password--passwordstring用于密码验证的身份验证字符串。
ClusterUsername--cluster-usernamestring用于对群集内部通信进行身份验证的用户名。
ClusterPassword--cluster-passwordstring用于对群集内部通信进行身份验证的密码。
AclFile--acl-filestring外部ACL用户文件。
AadAuthority--aad-authoritystringAAD身份验证的权限。
AadAudiences--aad-audiencesstringAAD身份验证令牌的听众。应该是一个逗号分隔的字符串。
AadIssuers--aad-issuersstringAAD身份验证令牌的发行者。应该是一个逗号分隔的字符串。
AuthorizedAadApplicationIds--aad-authorized-app-idsstring用于AAD身份验证的授权客户端应用程序ID。应该是一个逗号分隔的字符串。
EnableAOF--aofbool启用预写式日志(追加日志文件)。
AofMemorySize--aof-memorystring内存大小用于AOF内存缓冲区的总大小(向下舍入为2的幂)- 在此限制之后溢出到磁盘
AofPageSize--aof-page-sizestring内存大小每个AOF页面的大小(向下舍入为2的幂)
CommitFrequencyMs--aof-commit-freqint整数范围:
[-1, 最大值]
写前日志(追加日志文件)的提交问题频率,以毫秒为单位。0 =每个操作都发出一个立即提交,-1 =使用COMMITAOF命令手动发出提交
WaitForCommit--aof-commit-waitbool在将AOF刷新提交之前等待并返回结果给客户端。警告:这将极大地增加操作的延迟。
AofSizeLimit--aof-size-limitstring内存大小AOF的最大大小(向下舍入为2的幂),之后将应用不安全的截断。如果留空,则AOF将无限增长,除非采取检查点。
CompactionFrequencySecs--compaction-freqint范围内的整数:
[0, MaxValue]
后台混合日志压缩频率(以秒为单位)。 0 = 禁用(在检查点之前执行压缩)
CompactionFrequencySecs--compaction-freqint整数范围:
[0, 最大值]
后台混合日志压缩的频率,单位为秒。0 = 禁用(在检查点之前执行压缩)
CompactionType--compaction-typeLogCompactionTypeNone, Shift, ShiftForced, Scan, Lookup混合日志压缩类型。值选项:None - 无压缩,Shift - 移动起始地址而不压缩(数据丢失),ShiftForced - 移动起始地址而不压缩(数据丢失)。立即删除文件 - 如果计划在故障后恢复,则不要使用,Scan - 扫描旧页面并将活动记录移到尾部(无数据丢失 - 请确保在磁盘上实际删除旧数据之前进行检查点),Lookup - 查找压缩范围内的每个记录,用于哈希链进行记录存活性检查(无数据丢失 - 请确保在磁盘上实际删除旧数据之前进行检查点)
CompactionMaxSegments--compaction-max-segmentsint整数范围:
[0, 最大值]
触发压缩之前在磁盘上创建的日志段数。
ObjectStoreCompactionMaxSegments--obj-compaction-max-segmentsint整数范围:
[0, 最大值]
触发压缩之前在磁盘上创建的对象存储日志段数。
GossipSamplePercent--gossip-spint在每次散播迭代中与之通信的集群节点的百分比。
GossipDelay--gossip-delayint整数范围:
[0, 最大值]
集群模式下散播协议每个节点的睡眠(以秒为单位)延迟以发送更新的配置。
ClusterTimeout--cluster-timeoutint整数范围:
[0, 最大值]
集群节点超时是节点必须不可达的秒数。
ClusterTlsClientTargetHost--cluster-tls-client-target-hoststring使用TLS连接时,集群模式下的客户端目标主机的名称。
EnableTLS--tlsbool启用TLS。
CertFileName--cert-file-namestringTLS证书文件名(例如:testcert.pfx)。
CertPassword--cert-passwordstringTLS证书密码(例如:占位符)。
CertSubjectName--cert-subject-namestringTLS证书主题名称。
CertificateRefreshFrequency--cert-refresh-freqint整数范围:
[0, 最大值]
TLS证书刷新频率(以秒为单位)(0表示禁用)。
ClientCertificateRequired--client-certificate-requiredbool是否需要TLS客户端证书。
CertificateRevocationCheckMode--certificate-revocation-check-modeX509RevocationModeNoCheck, Online, Offline证书验证的证书吊销检查模式(NoCheck,Online,Offline)。
IssuerCertificatePath--issuer-certificate-pathstring用于验证的颁发者证书的完整路径文件。如果为空或null,则不会执行对颁发者的验证。
LatencyMonitor--latency-monitorbool跟踪各种事件的延迟。
MetricsSamplingFrequency--metrics-sampling-freqint整数范围:
[0, 最大值]
指标采样频率(以秒为单位)。值为0将禁用指标监视任务。
QuietMode-q
--
bool启用安静模式不打印服务器版本和文本艺术。
LogLevel--logger-levelLogLevelTrace, Debug, Information, Warning, Error, Critical, None日志级别。值选项:Trace, Debug, Information, Warning, Error, Critical, None
DisableConsoleLogger--disable-console-loggerbool禁用控制台记录器。
FileLogger--file-loggerstring启用文件记录器并写入指定路径。
ThreadPoolMinThreads--minthreadsint整数范围:
[0, 最大值]
线程池中的最小工作线程和完成线程数,0使用系统默认值。
ThreadPoolMaxThreads--maxthreadsint整数范围:
[0, 最大值]
线程池中的最大工作线程和完成线程数,0使用系统默认值。
值。
UseAzureStorage--use-azure-storagebool使用Azure页面Blob进行存储,而不是使用本地存储。
AzureStorageConnectionString--storage-stringstring在连接到Azure Blob存储时使用的连接字符串。
CheckpointThrottleFlushDelayMs--checkpoint-throttle-delayint整数范围:
[-1, 最大值]
是否以及多久应该限制检查点的磁盘IO:-1 - 禁用限制;>= 0 - 在单独的任务中运行检查点刷新,在每次WriteAsync之后睡眠指定的时间
EnableFastCommit--fast-commitbool写入AOF时使用FastCommit。
FastCommitThrottleFreq--fast-commit-throttleint整数范围:
[0, 最大值]
将FastCommit节流到每K次提交一次写入元数据。
NetworkSendThrottleMax--network-send-throttleint整数范围:
[0, 最大值]
限制每个会话的最大未完成网络发送。
EnableScatterGatherGet--sg-getbool我们是否对MGET或一批连续的GET操作使用分散聚集IO - 有助于饱和磁盘随机读取IO。
ReplicaSyncDelayMs--replica-sync-delayint整数范围:
[0, 最大值]
是否以及以多少毫秒(毫秒)节流复制同步:0 - 禁用节流
MainMemoryReplication--main-memory-replicationbool使用主存储器复制模型。
OnDemandCheckpoint--on-demand-checkpointbool与主存储器复制模型一起使用。按需进行检查点以避免在附加时丢失数据
UseAofNullDevice--aof-null-devicebool对于主存储器复制,使用空设备进行AOF。确保没有磁盘IO,但在复制期间可能导致数据丢失。
ConfigImportPath--config-import-pathstring从提供的路径导入(加载)配置选项
ConfigImportFormat--config-import-formatConfigFileTypeGarnetConf, RedisConf在config-import-path中指定的路径中的配置选项的格式
ConfigExportFormat--config-export-formatConfigFileTypeGarnetConf, RedisConf将当前配置选项导出(保存)到提供的路径中的格式
UseAzureStorageForConfigImport--use-azure-storage-for-config-importbool使用Azure存储导入配置文件
ConfigExportPath--config-export-pathstring将当前配置选项导出(保存)到提供的路径
UseAzureStorageForConfigExport--use-azure-storage-for-config-exportbool使用Azure存储导出配置文件
UseNativeDeviceLinux--use-native-device-linuxbool在Linux上使用本地设备进行本地存储
RevivBinRecordSizes--reviv-bin-record-sizesint[]#,#,...,#: 对于主存储器,按大小递增的记录大小,顺序为递增大小。代替默认的--reviv;不能与--reviv-in-chain-only一起使用
RevivBinRecordCounts--reviv-bin-record-countsint[]#,#,...,#: 对于主存储器,每个bin中的记录数:默认(未指定):如果指定了reviv-bin-record-sizes,则每个bin都是256条记录 #(一个值):如果指定了reviv-bin-record-sizes,则所有bin都具有此记录数,否则错误 #,#,...,#(多个值):如果指定了reviv-bin-record-sizes,则它的大小必须与该数组的大小相同,否则错误 代替默认的--reviv;不能与--reviv-in-chain-only一起使用
RevivifiableFraction--reviv-fractiondouble双精度浮点数范围:
[0, 1]
#: 主存储器中从高日志地址向下到只读区域的可恢复内存空间的分数。适用于主存储器和对象存储。
EnableRevivification--revivbool一种快捷方式,用于指定默认的2的幂大小的bin的恢复。此默认值可以被--reviv-in-chain-only或通过reviv-bin-record-sizes和reviv-bin-record-counts的组合覆盖。
RevivNumberOfBinsToSearch--reviv-search-next-higher-binsint整数范围:
[0, 最大值]
如果无法在最佳匹配的bin中满足搜索,则搜索这个数量的下一个更高的bin。需要--reviv或reviv-bin-record-sizes和reviv-bin-record-counts的组合
RevivBinBestFitScanLimit--reviv-bin-best-fit-scan-limitint整数范围:
[0, 最大值]
在找到最佳匹配后的扫描限制此数量的记录以获取最佳匹配。需要--reviv或reviv-bin-record-sizes和reviv-bin-record-counts的组合 0:使用第一个匹配 #: 在第一个匹配后限制扫描到这么多记录,直到bin的记录计数为止
RevivInChainOnly--reviv-in-chain-onlybool仅在标签链中恢复被墓碑化的记录(不使用空闲列表)。无法与reviv-bin-record-sizes或reviv-bin-record-counts一起使用。默认情况下传播到对象存储。
RevivObjBinRecordCount--reviv-obj-bin-record-countint整数范围:
[0, 最大值]
对象存储中单个空闲记录bin中的记录数。与主存储器不同,对象存储仅有一个bin。仅当主存储器使用空闲记录列表时才有效。
ObjectScanCountLimit--object-scan-count-limitint整数范围:
[0, 最大值]
在*SCAN命令的一次迭代中返回的项目限制数。
ExtensionBinPaths--extension-bin-pathsstring[]服务器上的目录列表,管理员用户可以从中加载自定义命令二进制文件
ExtensionAllowUnsignedAssemblies--extension-allow-unsignedbool允许从未经数字签名的程序集加载自定义命令(不推荐)
IndexResizeFrequencySecs--index-resize-freqint整数范围:
[1, 最大值]
指数调整检查频率,以秒为单位
IndexResizeThreshold--index-resize-thresholdint整数范围:
[1, 100]
触发指数调整的溢出桶计数与总指数大小的百分比

[^1]:表示内存大小的字符串。可以是多个字节,也可以遵循以下模式:1k、1kb、5M、5Mb、10g、10GB 等。