配置说明

获取配置

Remote command

可以通过 Remote commandsconfig-dump 命令获取 Pegasus server 的 全部 配置,输出格式为 ini 文件格式,包括 section,key,当前的配置值,以及简要说明。

例如,以下输出片段:

>>> remote_command -l 127.0.0.1:34601 config-dump
COMMAND: config-dump

CALL [user-specified] [127.0.0.1:34601] succeed:
[apps..default]
; arguments for the app instances
arguments =

; delay seconds for when the apps should be started
delay_seconds = 0

; Thread pools needed to be started for this app
pools =

; RPC server listening ports needed for this app
ports =

; The app type name, as given when registering by dsn::service_app::register_factory<T>("<type>")
type =

; Whether to run the app instances or not
run = true

; The count of app instances for this type (ports are automatically calculated accordingly to avoid conflict, i.e., ports, ports+1, ports+2, ...)
count = 1

HTTP API

可以通过 HTTP接口/config/configs 路径获取 Pegasus server 的 部分 配置,输出格式为 JSON 格式,包括 section,key,当前的配置值,值类型,tags(例如是否可以动态修改),以及简要说明。

只有通过 DSN_DEFINE_xxx 方式注册的配置,才可以通过 HTTP 接口获取。

例如,如下输出片段:

$ curl 127.0.0.1:34601/config?name=update_ranger_policy_interval_sec
{
    "name": "update_ranger_policy_interval_sec",
    "section": "security",
    "type": "FV_UINT32",
    "tags": "",
    "description": "The interval seconds of meta server to pull the latest access control policy from Ranger service.",
    "value": "5"
}
$ curl 127.0.0.1:34601/configs
{
    "abnormal_write_trace_latency_threshold": {
        "name": "abnormal_write_trace_latency_threshold",
        "section": "replication",
        "type": "FV_UINT64",
        "tags": "flag_tag::FT_MUTABLE",
        "description": "Latency trace will be logged when exceed the write latency threshold, in nanoseconds",
        "value": "1000000000"
    },
    "add_secondary_enable_flow_control": {
        "name": "add_secondary_enable_flow_control",
        "section": "meta_server",
        "type": "FV_BOOL",
        "tags": "",
        "description": "enable flow control for add secondary proposal",
        "value": "false"
    },
    "add_secondary_max_count_for_one_node": {
        "name": "add_secondary_max_count_for_one_node",
        "section": "meta_server",
        "type": "FV_INT32",
        "tags": "",
        "description": "add secondary max count for one node when flow control enabled",
        "value": "10"
    }
    ...
}

修改配置

配置文件

通过修改 ini 配置文件的方式,需要重启 server 生效。

HTTP API

可以通过 HTTP接口/updateConfig 路径动态修改 Pegasus server 的 部分 配置。只有 tag 包含 flag_tag::FT_MUTABLE 的配置项才可以动态修改。

通过 HTTP 接口修改的配置不会被持久化到 ini 文件中,这意味着配置项会被重置为默认值(如果 ini 文件中已指定该配置项,则会重置为该配置值)。

例如:

$ curl 127.0.0.1:34601/updateConfig?abnormal_write_trace_latency_threshold=2000000000
{"update_status":"ERR_OK"}

配置组成部分

Pegasus 的配置为 ini 格式,主要有以下 section:

[apps..default]

各个 app 相关配置的默认模板。如果具体的 apps.XXX section 中未显式指定某个配置型,则使用该 section 中的配置。

[apps.meta]

meta app 的相关配置。

[meta_server]

Pegasus Meta Server 的配置。

[apps.replica]

replica app 的相关配置,也即 Pegasus Replica Server 的配置。

[apps.collector]

Pegasus Collector 的配置(2.6 版本开始已废弃)。

[core]

Pegasus server 内核引擎相关参数配置。

[network]

网络相关配置参数。

[threadpool..default]

线程池相关配置的默认模板。如果具体的 THREAD_POOL_XXX section 中未显式指定某个配置型,则使用该 section 中的配置。

[threadpool.THREAD_POOL_XXX]

线程池 THREAD_POOL_XXX 的配置。

[meta_server.apps.]

启动集群时,预先在集群中创建的表。根据 <app_unique_string> 的不同,可以创建多个表。

[replication.app]

同上,但只能指定 1 个表。

[replication]

一致性协议相关配置,很多概念和 PacificA 相关。

[pegasus.server]

Pegasus Replica Server 相关配置。

[task..default]

各个 task 相关配置的默认模板。如果具体的 task.XXX 配置中未显式指定某个配置型,则使用该 section 中的配置。 task 是 rDSN 中的一个概念,可以理解成 “异步任务”。比如一个 RPC 异步调用、一个异步文件 IO 操作、一个超时事件等,都是一个 task。 每种 task 都有定义一个唯一的名字。针对每种 task,都可以配置其相关的行为,例如 traceprofiler 等。

[task.RPC_XXX]

Task RPC_XXX 的配置。

[zookeeper]

Zookeeper 相关配置。

[tools.simple_logger]

Simple logger 实现类,该 logger 会打印日志到文件。

配置建议

  • 配置中所有需要使用服务器地址的地方,都建议使用 IP 地址。
  • 大部分配置项,建议使用默认值。
  • 在理解配置项的作用和影响的前提下,可以根据需要自行更改配置值。
  • 对于配置项的进一步了解,可以查看源代码。
Copyright © 2023 The Apache Software Foundation. Licensed under the Apache License, Version 2.0.

Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.

Apache Pegasus, Pegasus, Apache, the Apache feather logo, and the Apache Pegasus project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.