Aeron集群节点加载归档日志时出现Archive连接超时异常
故障现象
Aeron集群节点启动,进入从Archive加载日志的选举同步流程时,Consensus Module、Archive组件的工作线程抛出超时异常,核心报错信息如下:
io.aeron.exceptions.TimeoutException: ERROR - Archive connect timeout: step=3 subscription.uri=aeron:udp?term-length=65536|sparse=true|mtu=1408|endpoint=localhost:0 at io.aeron.archive.client.AeronArchive$AsyncConnect.checkDeadline(AeronArchive.java:3470) at io.aeron.archive.client.AeronArchive$AsyncConnect.poll(AeronArchive.java:3342) at io.aeron.archive.ReplicationSession.connect(ReplicationSession.java:318) at io.aeron.archive.ReplicationSession.doWork(ReplicationSession.java:190) // 省略后续堆栈,核心链路为跨节点日志复制场景下,备份节点Archive建立对主节点Archive的连接时,在订阅环节触发超时
异常触发点固定为Archive异步连接流程的step=3订阅阶段,对应订阅URI为aeron:udp?term-length=65536|sparse=true|mtu=1408|endpoint=localhost:0。
根因分析
先明确Aeron Archive异步连接的step=3阶段逻辑:客户端向Archive控制端口发送连接请求后,会创建一个绑定本地随机临时端口的UDP订阅通道,等待Archive返回连接握手响应,URI中endpoint=localhost:0就是指绑定本地回环地址、由操作系统分配临时端口的订阅端。该阶段超时的本质是客户端在配置的超时窗口内,没有在这个临时订阅通道上收到合法的握手响应,常见触发原因分为五类:
- 本地回环网络异常:localhost解析错误、回环网卡上的UDP流量被防火墙/安全规则拦截、系统临时端口段耗尽,导致订阅通道无法正常创建或收包
- MediaDriver运行异常:Archive客户端依赖的MediaDriver线程阻塞、出现心跳超时,无法完成订阅通道的底层初始化,也无法转发收到的UDP包
- CPU资源抢占:Aeron核心组件采用忙轮询模型,节点CPU被其他进程打满、或Aeron进程被cgroup限流时,工作线程拿不到足够的CPU时间片,无法及时处理订阅通道的消息
- 配置不匹配:Archive控制通道的响应地址配置错误,多网卡节点下localhost被解析到非回环网卡,导致Archive的握手响应包没有发送到客户端绑定的临时端口
- 共享内存异常:Aeron依赖的/dev/shm共享内存分区空间不足、大页配置不匹配,导致term buffer映射失败,订阅创建流程卡住无法推进
排查步骤
- 验证本地回环状态:执行
ping localhost确认回环地址可达,检查iptables、firewalld及主机安全规则是否拦截localhost的UDP流量,查看/proc/sys/net/ipv4/ip_local_port_range配置,统计已占用临时端口数量,排除端口耗尽问题,同时检查/etc/hosts确认localhost正确映射到127.0.0.1 - 检查MediaDriver状态:查看MediaDriver进程的错误日志,搜索是否存在driver timeout、storage insufficient类报错,通过
jstack打印线程栈,确认MediaDriver的AgentRunner线程没有阻塞在锁等待、磁盘IO等操作上 - 检查节点资源占用:通过
top、pidstat查看节点CPU、内存使用率,确认Aeron相关进程没有被cgroup限流,是否存在其他异常进程持续抢占CPU,导致忙轮询线程调度延迟过高 - 核对集群配置:逐一检查Consensus Module、Archive组件的配置项,确认controlChannel、responseStreamId等参数匹配,多网卡节点确认没有硬编码错误的响应地址
- 检查共享内存配置:执行
df -h /dev/shm确认共享内存分区剩余空间满足Aeron term buffer的存储需求,检查系统大页配置是否和Aeron启动参数匹配,日志中是否存在共享内存映射失败的报错
解决方案
根据排查结果对应修复:
- 网络层问题:放通本地回环网卡的UDP流量,调整系统临时端口段范围覆盖业务需求,修复/etc/hosts中localhost的映射配置
- MediaDriver异常:重启异常的MediaDriver进程,将MediaDriver、Archive、Consensus Module的线程模式设置为DEDICATED,为Aeron核心进程绑定独立的CPU核心,减少跨进程调度带来的延迟
- 资源不足问题:清理节点上抢占资源的异常进程,必要时扩容节点CPU配置,高负载场景下适当调大
aeron.archive.connect.timeout参数(默认5秒,可调整为10~15秒),避免偶发调度延迟触发超时 - 配置问题:多网卡节点不要依赖默认localhost解析,显式配置Archive的响应通道地址为127.0.0.1,确保集群所有节点的相关配置完全对齐
- 内存问题:扩容/dev/shm分区大小满足Aeron的内存需求,对齐系统大页配置和Aeron启动参数,磁盘IO性能不足的场景可关闭sparse term文件配置,减少随机IO阻塞
内容的提问来源于stack exchange,提问作者sajad safraei
相关产品推荐
相关产品推荐

