复制 SIP 会话

如果希望在典型会话启动协议 (SIP) 处理期间进行会话复制并显示对话状态信息,那么可以为 SIP 会话设置复制域。SIP 容器通常使用数据复制服务 (DRS) 来复制所有状态信息。因为 DRS 未提供确认何时完成数据复制的方法,因此唯一可以确定的是状态信息排队等待复制的时间。在本主题内,对数据复制的引用仅意味着数据已排队等待复制。

关于此任务

SIP 容器会复制若干不同类型的信息。此数据分为两个普通类别:
  • 与对话相关联的内部 SIP 容器状态信息。
  • 与各种会话对象相关联的应用程序状态信息。

这些类别中的每一个都包括若干不同数据类型,本主题后续部分将描述这些数据类型。每个数据对象都被看作是独立的。因此,对应用程序会话对象的更改会导致复制,但不会导致复制任何内部状态信息。

内部状态信息的复制

内部状态信息可定义为与容器要处理的对话的状态相关的任何内容。它包括诸如 cseq、对话状态(初始、早期、确认、终止)、会话到期、本地方、远程方等信息。只是因为存在对话才会复制内部状态信息。因此,直到建立相关联的对话才会复制内部 SIP 相关数据。可能导致创建对话的 SIP 请求的类型包括:
  • INVITE
  • SUBSCRIBE
  • REFER
在调用流程中,只有在严格定义的可预测位置才会进行内部状态复制。例如,只有在因为上面列示的其中一个方法类型而接收或发送带有“To”标记的 2xx 响应或 1xx 响应时,才会在容器中建立对话。可触发内部状态复制的事件包括:
  • 创建新的 SIP 对话
  • 会话因为超时而到期
  • 向 UAC 发送最终响应
  • 创建编码 URI
  • 处理导致内部对话状态更改的任何消息

应注意的是,在 WebSphere® Application Server V6.1 的 SIP 容器中,不会复制事务状态,仅复制对话状态,这一点很重要。不复制事务状态可减少复制域中所有服务器的负载,但在事务中途发生故障时会导致问题,例如,丢失某些与对话有关的 SIP 消息。

B2BUA 与代理应用程序之间的一个重要差别在于创建和复制的会话对象数目。两种情况下都只会创建一个应用程序会话,但对于 B2BUA,将创建两个会话对象,一个用于入站项,一个用于出站项。对于代理应用程序,只会创建一个会话对象。

应用程序状态信息的复制

因为应用程序状态信息与要复制的对话是否存在无关,所以应用程序状态信息的处理方式与内部对话状态信息的处理方式不同。应用程序状态指的是应用程序通过使用 JSR 116 数据构造维护的任何数据。这包括:
  • javax.servlet.sip.SipApplicationSession
  • javax.servlet.sip.SipSession
  • javax.servlet.sip.ServletTimer
  • 对 SipSession 或 SipApplicationSession 设置的任何属性
内部状态的复制在调用流程中严格定义的可预测位置进行,而应用程序状态的复制不太能够预测,原因是它通常依赖于应用程序何时通过 JSR 116 API 创建、修改会话数据和计时器或使其失效。这可能是因为处理入站消息或 SIP 计时器到期导致的。下列所有项都可能导致复制与应用程序有关的会话数据:
  • 创建应用程序会话对象
  • 创建 SIP 会话对象
  • 创建 SIP 会话计时器
  • 通过 setAttribute 或 removeAttribute 修改会话对象
  • 使 SIP 会话对象失效
  • 会话计时器到期
  • 应用程序代码发出一个请求,1 的未来调用的完整性

复制可能是因为应用程序调用 request.getApplicationSession(true) 时以及对生成的应用程序会话对象调用 addTimer() 和/或 addAttribute() 时请求未建立对话而导致的。需要这样做的理由是计时器到期时可以调用侦听器。

SIP 故障转移和复制设置注意事项

需要复制和故障转移的 SIP 集群可能由许多复制域组成,每个域包含一组 SIP 容器。集群中的容器数目没有限制。由于性能原因,每个复制域应仅包含两个容器。

复制域应设置为“整个域”,这意味着状态将复制到复制域中的所有容器。复制方式应为“同时在客户机和服务器上”。

容器的分布式会话需要设置为“内存到内存复制”。需要会话复制的所有应用程序的 web.xml 和 sip.xml 文件中必须包括 <distributable /> 标记。SIP 和 HTTP 将使用相同的复制拓扑

[z/OS]请确保已对系统进行了配置,以便:
  • 系统包括至少 2 个控制器,并且每个控制器具有至少 2 个服务方用于故障转移和恢复。
  • 总工作负载(包括常规操作调用、故障转移调用和恢复调用)始终不得超过最大调用率。
    要达到最大每秒调用次数,以下配置设置是必需的:
    • 所运行的是 z/OS V1 R10 系统,并且为实现快速 I/O 已启用了高性能 FICON for System z (zHPF)。此系统上还必须运行 DS8000 DASD。
    • 在创建日志流时使用的日志流和登台数据集大小定义必须等于或大于 256 兆字节(LS_SIZE(64000),STG_SIZE(64000))。

    可以通过以下方法确定最大调用率:在一段时间内逐步增加调用率并监控性能,直到达到可容忍的超时率为止。

  • 所有活动调用中传播的数据总量不超过 2 GB。
  • 允许 SIP 或 Communications Enabled Applications (CEA) 在 z/OS 上工作之前,所有节点都处于 V7.0.0.7 或更高级别。
  • 如果计划将系统用于与 SIP 或 CEA 相关的工作,已将需要数据持久性的其他服务(例如,事务)和补偿都配置为使用 HFS 文件记录。在将系统配置为用于 SIP 或 CEA 相关工作后,需要数据持久性的其他服务将无法使用日志流。
[z/OS]如果发生任何以下情形,那么还必须删除并重新创建服务器的日志流:
  • 集群内的所有控制器同时失败。 在此情况下,执行恢复所需的某些数据将由于多个并发故障而丢失。
  • 在恢复过程期间发生了故障。在此情况下,与失败会话相关联的日志流将包含不完整的数据。
SIP 会话复制拓扑
  • 每个成员都会将所有状态数据复制到其复制域中的每个对等项。
  • 在理想情况下,每个复制域都应包含两个服务器。
  • 发生故障时,核心组协调程序会通知其余已复制会话的核心组成员激活。然后,这些已复制的会话将变为它们的活动会话的一部分。

请完成下列步骤以设置 SIP 会话的复制域。

过程

  1. 在管理控制台中,单击环境 > 复制域 > 新建
  2. 单击副本数,然后选择整个域
  3. 在“容器设置”部分中,单击会话管理
  4. 在“其他属性”部分中,单击分布式环境设置,然后单击内存到内存复制
  5. 复制方式设置为客户机和服务器
  6. 保存更改。

结果

对 SIP 会话启用了内存到内存复制。

1 导致复制 SipSessionSipApplicationSession,以便使“上次访问时间戳记”与集群中的对等容器同步。这样做是为了 SipSession.getLastAccessedTime()SipApplicationSession.getLastAccessedTime()

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsip_sessionrep
文件名:tsip_sessionrep.html