配置 Pyroscope memberlist
哈希环是一种分布式一致性哈希方案,被 Pyroscope 广泛用于分片和复制。Pyroscope 仅支持通过 memberlist 协议使用哈希环。你可以通过 CLI 标志或其对应的 YAML 配置选项来配置 memberlist。
Memberlist
Pyroscope 使用 memberlist
作为 KV 存储后端。在启动时,Pyroscope 实例会连接到其他 Pyroscope 副本以加入集群。Pyroscope 实例通过解析在 -memberlist.join
中配置的地址来发现要加入的其他副本。-memberlist.join
CLI 标志必须解析到集群中的其他副本,并且可以指定多次。
-memberlist.join
可以设置为以下格式的地址
<ip>:<port>
<hostname>:<port>
- DNS 服务发现
注意:至少配置一个或多个解析到副本一致子集(例如,所有 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
指标可用于衡量哈希环变更的传播。此指标跟踪环中所有实例中最旧的心跳时间戳。你可以执行以下查询来衡量环中最旧心跳时间戳的年龄:
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 进行服务发现:
- Memberlist KV 存储
-memberlist.join
支持的发现模式
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 或主机名,不进行预解析。