菜单
开源

配置 Pyroscope memberlist

哈希环是一种分布式一致性哈希方案,被 Pyroscope 广泛用于分片和复制。Pyroscope 仅支持通过 memberlist 协议使用哈希环。你可以通过 CLI 标志或其对应的 YAML 配置选项来配置 memberlist。

Memberlist

Pyroscope 使用 memberlist 作为 KV 存储后端。在启动时,Pyroscope 实例会连接到其他 Pyroscope 副本以加入集群。Pyroscope 实例通过解析在 -memberlist.join 中配置的地址来发现要加入的其他副本。-memberlist.join CLI 标志必须解析到集群中的其他副本,并且可以指定多次。

-memberlist.join 可以设置为以下格式的地址

注意:至少配置一个或多个解析到副本一致子集(例如,所有 ingester)的地址。

注意:如果你在 Kubernetes 中运行 Pyroscope,请定义一个无头 Kubernetes 服务,该服务解析到所有 Pyroscope pod 的 IP 地址,然后将 -memberlist.join 设置为 dnssrv+<service name>.<namespace>.svc.cluster.local:<port>

Pyroscope 支持 memberlist 组件之间的 TLS 连接。要查看所有支持的配置参数,请参阅 memberlist

配置 memberlist 地址和端口

默认情况下,Pyroscope memberlist 协议监听地址 0.0.0.0 和端口 7946。如果你在同一节点上运行多个 Pyroscope 进程或端口 7946 不可用,可以通过设置以下参数来更改绑定和通告端口:

  • -memberlist.bind-addr:监听本地机器的 IP 地址。
  • -memberlist.bind-port:监听本地机器的端口。
  • -memberlist.advertise-addr:通告给其他 Pyroscope 副本的 IP 地址。其他副本将连接到此 IP 以与实例通信。
  • -memberlist.advertise-port:通告给其他 Pyroscope 副本的端口。其他副本将连接到此端口以与实例通信。

微调 memberlist 变更传播延迟

pyroscope_ring_oldest_member_timestamp 指标可用于衡量哈希环变更的传播。此指标跟踪环中所有实例中最旧的心跳时间戳。你可以执行以下查询来衡量环中最旧心跳时间戳的年龄:

promql
max(time() - pyroscope_ring_oldest_member_timestamp{state="ACTIVE"})

测量的年龄不应高于配置的 <prefix>.heartbeat-period 加上一个合理的增量(例如,15 秒)。如果你遇到更高的变更传播延迟,可以调整以下设置:

  • 减小 -memberlist.gossip-interval
  • 增大 -memberlist.gossip-nodes
  • 减小 -memberlist.pullpush-interval
  • 增大 -memberlist.retransmit-factor

关于 Pyroscope DNS 服务发现

Pyroscope 中的一些客户端支持通过 DNS 进行服务发现,以查找要连接的后端服务器地址。以下客户端支持通过 DNS 进行服务发现:

支持的发现模式

DNS 服务发现支持不同的发现模式。你可以通过在地址中添加以下支持的前缀之一来选择发现模式:

  • dns+
    前缀后的域名被查找为 A/AAAA 查询。例如:dns+memcached.local:11211
  • dnssrv+
    前缀后的域名被查找为 SRV 查询,然后每个 SRV 记录解析为 A/AAAA 记录。例如:dnssrv+_memcached._tcp.memcached.namespace.svc.cluster.local
  • dnssrvnoa+
    前缀后的域名被查找为 SRV 查询,之后不进行 A/AAAA 查找。例如:dnssrvnoa+_memcached._tcp.memcached.namespace.svc.cluster.local

如果未提供前缀,则直接使用提供的 IP 或主机名,不进行预解析。