You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在AWS Ubuntu EC2上的FreeSwitch如何实现高可用?

AWS环境下FreeSWITCH高可用落地方案

你之前尝试的两个方案踩坑是AWS环境的固有特性导致的:VPC二层网络不支持VRRP组播报文,传统keepalived浮动IP方案天然跑不通;EFS是共享文件存储,仅适合非实时文件读写,无法承载FreeSWITCH运行时的会话注册、通话状态这类强一致性实时数据同步,用来做高可用核心组件必然失败。

目前生产验证过的可行方案有三类,按落地复杂度从低到高排序:

方案1:Route53故障转移 + 跨AZ多实例(最易落地)

  • 至少部署2台同规格Ubuntu EC2实例承载FreeSWITCH,分布在同一区域的不同可用区,避免单AZ故障。EFS可以保留使用,仅用来存静态拨号计划、网关配置、IVR素材、录音文件、日志这类非实时数据,两台实例开机自动挂载EFS读取静态配置即可,不要用EFS同步运行时状态。
  • 每台实例绑定独立的弹性公网IP(EIP),在Route53为SIP服务域名配置故障转移路由策略:主实例对应主记录,备实例对应辅助记录。
  • 配置Route53健康检查,探测目标设为FreeSWITCH的SIP 5060端口,或自定义ESL健康检查接口,收到正常响应判定节点健康。主节点故障时Route53自动将域名解析切到备节点EIP,建议把域名解析TTL设为60秒,降低缓存导致的切流延迟。
  • 跨节点状态同步:两台节点开启mod_sofia的注册同步、mod_hash会话数据同步,通过ESL集群同步实时通话状态;对通话中断要求高的场景开启媒体旁路,RTP流量直接在终端之间传输,不经过FreeSWITCH节点,切换时不会中断正在进行的通话。

方案2:Global Accelerator流量调度(切流速度最快)

  • 跨AZ部署2台以上FreeSWITCH实例,全部加入AWS Global Accelerator的端点组,由加速器提供固定的任播IP作为SIP服务统一入口,不需要给每个节点单独绑EIP。
  • Global Accelerator自带四层健康检查,自动将SIP信令、RTP流量转发到健康的后端节点,故障切换时间在10-30秒,不受本地DNS缓存影响,切流速度远快于DNS方案。
  • 注意在FreeSWITCH的sofia配置里把Global Accelerator的IP段加入SIP ACL白名单,正确配置NAT映射规则,避免信令Contact地址携带内网IP导致单通、注册失败问题。

方案3:Pacemaker + API自动飘EIP(适配固定IP接入场景)

  • 同VPC跨AZ部署2台FreeSWITCH实例,仅主节点绑定服务用EIP,两台节点部署Corosync做跨节点心跳,Pacemaker做集群资源管理。
  • 自定义集群资源脚本:主节点心跳中断判定故障时,备节点自动调用AWS CLI执行命令完成EIP切换:
    # 解绑故障节点上的EIP
    aws ec2 disassociate-address --association-id <当前EIP绑定关联ID> --region <实例所在区域>
    # 将EIP绑定到当前备节点
    aws ec2 associate-address --instance-id <本节点实例ID> --allocation-id <EIP分配ID> --region <实例所在区域>
    
  • EIP切换完成后,备节点自动触发本地FreeSWITCH服务重载,拉取全量用户注册数据,整个切换过程耗时30秒左右,适合SIP终端不支持域名解析、只能配置固定IP接入的场景。

注意:不要尝试在AWS VPC内通过VRRP/keepalived配置二层虚拟IP,VPC虚拟交换机会直接丢弃目标IP未在EC2网卡元数据中登记的流量,属于底层架构限制,没有绕过方法。也不要把FreeSWITCH运行时的socket文件、内存快照、实时会话数据存在EFS上,会触发文件锁冲突、状态不一致问题,直接导致服务异常。

内容的提问来源于stack exchange,提问作者thilip an

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:06:51