对于像 OpenSIPS 这样的高性能 SIP 平台来说,灵活性和正常运行时间至关重要,尤其是在涉及会话边界控制器 (SBC) 和中继服务的场景中。传统上,OpenSIPS 仅支持静态定义的 SIP 套接字,这意味着任何更改(例如添加新的套接字以支持更多互连)都需要重新启动整个服务。这种限制在 SBC 或中继场景中尤其成问题,因为这些场景中通常需要动态建立新的互连以响应新的网络需求。在这种高流量环境中,仅仅为了适应新的套接字而重新启动 OpenSIPS 可能会导致不必要的停机时间和潜在的服务中断。

想象一下,一个中继设置中,新的运营商通过单独的/新的 VLAN 动态添加,或者一个 SBC 需要根据不断变化的互连需求开辟新的路径。仅仅为了添加新的套接字而重启 OpenSIPS 显然是不理想的。
为了解决这个问题,OpenSIPS 3.6 引入了一个新的套接字管理模块,该模块支持动态套接字。该模块允许通过数据库配置套接字,并在 OpenSIPS 运行时刷新,从而无需中断服务。通过该模块,OpenSIPS 提供了一种灵活高效的套接字动态管理方法,同时保持服务的连续性。
工作原理
在处理方面,OpenSIPS中的动态套接字与传统的静态套接字相比运行略有不同,尤其是对于基于UDP的流量。虽然我们努力保持平台的灵活性和可扩展性,但动态需求引入了一种新方法。对于静态套接字,每个配置的套接字在启动时都有自己专用的工作进程池,确保每个套接字的流量处理隔离且优化。相比之下,所有动态UDP套接字共享一组公共进程。这个共享池在启动时静态分配,负责处理所有动态添加的UDP套接字。这种设计使OpenSIPS能够支持动态套接字管理,而无需在运行时生成或调整进程,保持资源使用可预测且稳定。
另一方面,基于TCP的动态套接字(如TCP、TLS、WSS)的处理方式与静态套接字相同。现有的TCP进程池统一管理静态和动态套接字,保留了OpenSIPS用于面向连接传输的成熟且可扩展的模型。
设置
要开始使用OpenSIPS中的动态套接字管理,第一步是加载动态套接字管理模块。
loadmodule "sockets_mgm.so"
一旦完成,需要正确配置和扩展它。
modparam("sockets_mgm", "processes", 8)
modparam("sockets_mgm", "max_sockets", 100)
modparam("sockets_mgm", "db_url", "mysql://...")
请注意,上述值为默认值,您需要适当调整它们。此步骤相当敏感,因为它需要仔细估计可能需要的套接字数量。您不希望设置过多的进程,因为这可能导致不必要的资源使用,但您也希望确保有足够的进程可用以适应任何拓扑结构变化。找到正确的平衡对于保持效率和灵活性至关重要。
一旦参数经过仔细选择,您就可以启动OpenSIPS。
每当出现新的套接字需求时,第一步是确保机器配置为提供新的IP地址。接下来,您需要在数据库中配置动态套接字。这是通过将新的套接字条目插入(默认)sockets表来完成的。在此,您可以定义新套接字的协议、IP和端口。此外,您还可以微调各种参数,例如广告地址和端口,分配标签,以及设置特定标志(如reuse_port
、anycast
)或ToS(服务类型)值。
一旦所有新套接字都在数据库中设置好,您需要通知OpenSIPS使用新配置的套接字。这是通过运行sockets_reload MI
(管理接口)命令来完成的。
您还可以随时使用sockets_list
MI(管理接口)命令列出活动(或已配置)的套接字。
局限性
虽然动态套接字为OpenSIPS部署带来了宝贵的灵活性,但有几个重要的限制需要注意:
FIFO 轮转机制
在max_sockets
参数下分配的套接字使用FIFO(先进先出)方案进行轮转。这有助于避免在短时间内重叠分配套接字,确保套接字生命周期管理更加平稳。
UDP 处理的固定进程池
UDP 动态套接字无法受益于为指定额外进程提供的自动扩展功能。启动时分配的进程数量是固定的,只有这些进程会处理动态添加的UDP套接字的所有流量。
仅支持SIP
目前,动态套接字模块仅支持基于SIP的动态监听器。其他协议如HEP和BIN不受支持。
每个套接字定义只有单一监听器
数据库中定义的套接字不能扩展为多个监听器。使用解析为多个IP的接口名称或别名是不支持的。每个动态套接字必须配置有特定的IP:端口对。
预分配要求
由于内部限制,动态套接字必须在启动时预分配。运行时使用的动态套接字数量受启动时定义的静态限制约束。建议使用max_sockets
参数设置为稍微大一点的设置限制——默认情况下,OpenSIPS将此设置为舒适的100个套接字。
结论
在当今动态SIP环境中,网络拓扑和互连需求可能频繁变化。因此,通过采用动态套接字管理为此类变化做好准备始终是明智之举。通过在OpenSIPS中利用动态套接字,您可以获得适应新场景的灵活性,而无需中断服务。这确保了随着部署的增长,您的平台保持敏捷性和可扩展性。
此功能在3.6版本中支持,在opensips大会上,开发人员将演示此功能细节。
来源:https://blog.opensips.org/2025/05/13/sip-sockets-management-at-runtime-in-opensips-3-6/
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/58069.html