本章节中,笔者将进一步介绍关于OpenSIPS集群支持的另外一种常见的场景-dialog的集群。dialog集群是OpenSIPS在高并发环境中一定需要考虑的配置功能。通过集群部署方式,可以保证呼叫中的dialog能够正确处理完成。

除了介绍dialog集群以外,笔者将介绍如何配置OpenSIPS集群机制,通过集群注册的部署来演示集群的环境,并且最后介绍几个集群CLI 命令。

关于OpenSIPS的dialog集群背景介绍

大家可能都知道,OpenSIPS的dialog模块在SIP呼叫中起着非常重要的作用,各种应用场景都需要dialog支持,例如计费,呼叫控制,超时设置等。如果呼叫在处理过程中出现故障的话,显然,这些应用场景也不能得到保障。为了在高并发或者大规模部署中保证dialog的数据处理的稳定性,OpenSIPS支持了对dialog的集群设置。集群的节点通过tag并且来共享一些业务层面的要求,例如,在节点中,如果呼叫完成后,哪个节点处理了BYE请求, 在集群中,哪个节点生成CDR 呼叫建立等。这些数据不可能在全部节点都在同一时间进行各自处理,必须有一个节点服务器进行处理。

OpenSIPS中Dialog集群的基本思路

和对注册集群的部署来说,dialog的集群相对比较简单。其中部分设置的思路是相同的。完整细节的配置说明,读者可以参考官方文档,这里仅为了后续部分章节中的内容支持,这里重点强调一些主要的知识点:

  • 在复制集群环境中,所有的节点被组成一个组,在同样的集群中使用anycast方式进行广播(非其他cast方式),关于其他cast方式的不同,读者参考网络资料。
  • 所有dialog数据在整个cluster中进行复制处理
  • 通过BIN 协议复制数据
  • 集群中的所有节点共享同一IP地址通过dialog的更新来实现节点数据的交互,例如,执行了re-ininvite等流程。

dialog集群部署方式同时使用了一个tag 标签的形式,通过对节点标识标签的方式实现dialog节点的集群备份(HA)设置。另外,为了实现对呼叫的某些业务数据的共享,通过集群引擎,在dialog集群使用了共享profile的方式来实现集群文件共享。每个节点广播自己的共享profile文件,无需外部数据库支持。接下来的几个章节中,笔者将进一步介绍dialog标签在集群部署时代使用,节点共享dialog profile实现dialog 数据的同步共享。

OpenSIPS环境中dialog集群的tag标签说明

笔者在前面很多文章中已经讲过,dialog是跟踪呼叫的手段。在呼叫过程中,dialog可以跟踪呼叫时长,CDR计费统计,请求处理等状态。读者可以先阅读以下文章:

OpenSIPS学习笔记-Dialog的五种状态及配置示例

dialog的tag标签是OpenSIPS中对节点业务进行管理的一个手段。在OpenSIPS的环境中,集群节点需要通过一定的标识来对业务流程中某些特定的流程做出标识处理,dialog上添加一个 tag标签对逻辑进行标识是一个比较好的方法。具体来说,dialog tag标签具有以下几个方面的特征:

  • 每个dialog指定到一个tag标签
  • 每个节点能够意识到所有被使用的tag标签
  • 一个活动的节点实例仅支持一个特定tag标签,活动的实例处理dialog的ping广播消息,dialog的生命周期管理
  • 如果一个活动的节点出现故障以后,备用节点将会启动来继续为标识的tag服务。这里将需要一个高可靠性处理,通过主备方式进行HA的处理。tag的状态将会迁移到另外一个备用的节点上。注意,一个节点可以支持多个活动的tag标签来支持多种业务需求。

dialog 标签的语法设置相对比较简单,示例如下:

loadmodule "dialog.so'modparam("dialog", "dialog replication cluster", 1)modparam("clusterer", "sharing tag", "vip=active") // 另外一个做passive{create dialog();set_dlg_sharing_tag("vip");}

具体关于OpenSIPS dialog 集群HA的处理示例。节点需要通过一个主从备份的方式,通过tag标签对呼叫业务中的特定流程进行跟踪处理。节点双方互相标识。基本的处理思路如下图例:

此图例以及以下图例均来自于互联网资源

在以上示例中,呼叫可能通过几个不同的节点来处理每个呼叫具体的流程,因此,各个节点的tag需要对其具体流程进行跟踪来监控一个完整的呼叫记录和CDR。为了保证你呼叫的流程的完整性,所有的dialog,包括后续请求的dialog都要通过具体的标签做记录备份,最后,所有节点共享dialog 文件数据。如果丢失了ACK 请求的dialog记录信息或者BYE的消息,系统就会丢失完整的CDR记录,当然也不可能继续在此记录上做计费的功能。

OpenSIPS中dialog集群的dialog profile讨论

在分布式部署的OpenSIPS 平台的呼叫环境中,因为负载均衡或者其他的业务要求的需要,一个SIP呼叫可能通过不同的路径节点来实现。特别涉及到一些计费功能时,或者一些对呼叫数量有限制的场景中,dialog profile 也需要通过节点共享dialog profile,通过profile来限定一些服务要求。通过集群部署共享dialog profile是非常必要的。和注册集群的方式不同,注册集群需要数据库的处理来协同共享数据,但是,dialog profile 共享无需其他的外部资源,它仅需要OpenSIPS 集群模块引擎和BIN 响应来完成。通过集群方式共享Dialog profile有以下几个方面的特点:

  • 通过集群引擎可以共享 profile的meta data数据
  • dialog 文件复制各自独立
  • 无需要求外部数据库引擎中存储处理
  • 依赖BIN 协议配合工作
  • 每个节点仅广播属于自己的profile size
  • 每个节点通过收到的prifile总值介绍所有的size
  • 无需担心节点故障
  • 架构设计相对比较轻,相对比较有更高的效率
dialog profile 设置语法如下:loadmodule "dialog.so"modparam("dialog', "profile replication cluster", 2)#这里 b表示BIN 协议,也可以是s, 表示shared 通过noSQL 数据库处理modparam("dialog""profiles no value", "all calls/b")create_dialog();set_dis_profile("all_call/b") # /b使用方式同上

OpenSIPS环境下集群注册的配置

集群部署是一个非常复杂的环境。在配置集群环境前,读者需要首先明确测试环境的配置和核心配置文件,还有节点之间的网络环境。特别是节点之间的网络需要保证都能够互相通信,相关的端口和安全策略必须一致。如果在基于云平台测试环境中,用户最好把所有的节点都部署在同一区域,保证你内网可以互通,而且安全策略可以互相信任。

因为资源能力有限,相对于生产环境,笔者的测试环境仅限于一个集群平台,支持3-5个节点的互通。为了实现简单配置,笔者使用的是静态配置方式,通过界面数据库设置节点数据,而不是通过动态加载节点的方式来实现的,所以我们需要预设好所有的节点,假设节点环境配置和我们操作的节点数据,环境,安全策略都是相同的,并且能够正常共享数据库数据。

首先,我们需要通过OpenSIPS 控制界面,添加集群节点数据,添加到主要参数包括:Cluster ID,Node ID,BIN URL和端口5555,SIP地址和具体节点描述信息。如果未安装OpenSIPS GUI的话,用户需要首先成功安装好GUI控制界面。特别提醒,笔者仅说明一个节点的配置,其他节点的配置也需要完全一致设置为我们示例的配置,但是一定要注意自己的node id和其他邻居节点的节点的地址和id的不同

通过控制界面添加了节点以后,然后修改cfg 配置文件,加载必要的集群引擎,数据库和BIN 协议配置:

loadmodule "clusterer.so"modparam("clusterer", "my_node_id", __NODE_ID__) # 主要自己的IDmodparam("clusterer", "db_mode", 1)modparam("clusterer", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")加载BIN 协议配置:loadmodule "proto_bin.so"listen = bin:eth0:5555 # 用户也可以监听IP地址

添加以上必要设置以后,集群引擎停止,这里,一定要保证所有的节点的OpenSIPS能够停止,然后所有节点保证同步好所有数据以后,再重新开启。用户必须对集群中的各个节点需要做多次测试,保证数据库可以同步,保证BIN监控正常。经过一段时间的测试,各个节点数据能够正常以后,我们才能进行其他注册等业务功能的测试。如果节点之间都能够同步,集群服务器可以正常工作的话,用户可以通过集群命令看到其他节点的数据状态,其中一个节点执行以下命令,可以看到节点列表:

opensips-cli -x mi clusterer_list

opensips-cli -x mi clusterer_list_topology

最后,如果所有节点可以正常通信以后,用户可以测试节点之间的连通性。具体测试方式很多,用户可以在本地通过防火墙命令过滤某个节点的IP(例如:ufw insert 1 allow from 节点IP to any),然后再通过以上命令查看这些节点的状态,然后在关闭过滤的节点地址重新检查所有节点状态。全部完成以上所有的节点的测试以后,我们才能继续进行下一步的全共享集群注册的配置示例操作。

完成以上配置以后,笔者将在后续章节具体介绍如何配置集群注册示例(包括full sharing, federation 和no SQL配置),共享dialog profile配置示例,安装配置mongodb实现以上功能。

总结

在本文章中笔者介绍了关于dialog 和dialog profile共享的配置处理流程。在对集群dialog的设置部署中,笔者介绍了dialog的HA设置方式和标签tag的设置,针对呼叫流程中不同的业务做标识处理,通过tag实现对节点呼叫的完整监控。另外,笔者也介绍了关于集群场景配置的非常重要的流程,包括基本的集群配置,节点配置和控制界面对节点的设置,然后介绍了通过防火墙过滤等手段如何对节点故障的测试。

再次说明,笔者测试的集群节点必须都需要同步同一的配置场景,包括网络环境,安全策略和端口等状态都需要完全一致。在保证节点环境相同的情况下,我们才能继续进行集群注册部署配置和dialog profile共享配置的流程。另外,笔者测试环境相对简单,在生产环境中,可能很多用户需要根据自己的场景中一定的调整,笔者仅是抛砖引玉,希望读者对OpenSIPS的集群部署有一个完整清晰的概念,集群部署中涉及的太多细节需要通过不断实践才能完成。

参考资料:

https://opensips.org/html/docs/modules/2.4.x/clusterer.html

https://www.researchgate.net/publication/261427896_Secure_cluster-based_SIP_service_over_Ad_hoc_networks/link/549dbcce0cf2fedbc31198cb/download

https://blog.opensips.org/2018/03/23/clustering-ongoing-calls-with-opensips-2-4/

www.freesbc.cn

OpenSIPS学习笔记-cluster集群模块配置-dialog集群配置相关推荐

  1. mongo学习笔记四:Mongodb的三种集群(Replica Set)

    Replica Set    中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...

  2. 大数据学习笔记第1课 Hadoop基础理论与集群搭建

    大数据学习笔记第1课 Hadoop基础理论与集群搭建 一.环境准备 二.下载JDK 三.安装JDK 四.下载hadoop 五.安装hadoop集群 六.打通3台服务器的免密登录 七.hadoop集群配 ...

  3. Python学习笔记:常用第三方模块(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:常用第三方模块3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习笔记:常用内建模块7XML

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. Python学习笔记:常用内建模块5

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:常用内建模块2:collections

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. 国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令

    国产达梦数据库学习笔记(一):NeoKylin7.0安装及配置与常用基础命令 以VMware Workstation Pro 15环境下的NeoKylin7.0与DM8为例 中标麒麟系统NeoKyli ...

  9. Hadoop学习笔记——入门教程(虚拟机安装LinuxHadoop环境搭建配置)

    文章目录 一.Hadoop安装配置文档及注意事项 二.Hadoop概述 2.1.Hadoop是什么 2.2.Hadoop的发展历史 2.3.Hadoop三大发行版本 2.3.1 Apache Hado ...

最新文章

  1. 面试题: 难点 已看1
  2. Server2008 RMS測試
  3. 智慧城市资金瓶颈亟待突破
  4. Android-Presentation双屏异显-一看就懂篇
  5. 如何读取超大文本文件
  6. matlab 函数优化问题,matlab求解最优化问题 Matlab在最优化问题中的应用举例.doc
  7. 报告解读下载 | 中国软件根技术发展白皮书之数据库
  8. Suse发生了错误Access denied for user #39;#39;@#39;localhost#39; toamp;
  9. 【项目总结】订单性质识别
  10. 脚本中调用别的脚本,如何得到执行结果?
  11. 【20保研】天津大学智能与计算学部2020级研究生招生夏令营活动通知
  12. 计算机如何操作补考,关于计算机Excel补考试题
  13. 阿里云上的ssh反向代理
  14. 【JavaScript】多行文本省略,并且判断是否需要省略。
  15. 盘点 9 款好用的开源商城系统
  16. 内存频率,CPU频率,主板频率之间的制约
  17. yyds、yygq、xswl...都是什么意思?
  18. 达人评测 i5 13500h和1240p选哪个好 i5 13500h和1240p对比
  19. 未来谁才是移动互联网的入口?
  20. 基于协整理论的配对交易

热门文章

  1. 数字员工在苏宁:我们为什么在人力资源体系部署RPA?
  2. 万门大学数据结构与算法进阶(2)ArrayList 动态数组
  3. VTK修炼之道34:边缘检测_Canny算子
  4. 关于CAD正交快捷键F8的,按两次才能切换 或卡顿,或无动作 解决方法
  5. Vant Weapp踩过的坑
  6. (二)Linux物理内存初始化
  7. html语言中mouse over,javascript中mouseover、mouseout使用详解
  8. m3u8 php vob 服务器,视频文件上传服务器使用FFmpeg自动切片成m3u8
  9. 2021年全球嵌入式衣柜行业调研及趋势分析报告
  10. AJAX框架衣柜内部改造,让衣柜鲜活起来 非拆改式租房改造案例赏析(图)