Garnet 配置
如何配置 Garnet
Garnet 服务器 (GarnetServer.exe) 可以使用配置文件(例如 garnet.conf
或 redis.conf
)进行配置,而命令行参数可用于覆盖文件中指定的任何设置。/ 未在配置文件或命令行参数中指定的任何设置都将设置为 defaults.conf
文件中指定的默认值(可以通过命令行参数覆盖此文件的路径)。
Garnet 当前支持两种配置文件格式:
garnet.conf
文件格式(默认)- 一个 JSON 格式的设置集合redis.conf
文件格式 - 一个 Redis 配置文件格式的设置集合:关键字 参数1 参数2 参数3 ... 参数N
参考 Redis 文档。/ 重要: 不是所有 redis.conf 关键字都在 Garnet 中受支持。为了全面覆盖配置设置,请使用
garnet.conf
格式。
可以通过命令行参数指定配置文件路径(和默认文件路径)。
对于
garnet.conf
:GarnetServer.exe --config-import-path <文件路径>
对于
redis.conf
:GarnetServer.exe --config-import-path <文件路径> --config-import-format RedisConf
注意: 要更改默认配置文件的路径(和/或格式),请分别使用 config-default-import-path
和 config-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 -h
或 GarnetServer.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
文件,以获取最准确和最新的信息。