Sun Java System Instant Messaging 7.2 管理指南

第 7 章 使用重定向服务器优化 Instant Messaging 服务器池

使用 Instant Messaging 附带的重定向服务来平衡服务器池(多节点部署)中的服务器之间的负载。性能直接受到单个部署中各服务器之间所需通信量的影响,因此使可能会共享在线状态信息和消息的两个用户尽可能在同一节点停止,可以改善性能。

本章的以下小节包含有关使用 Instant Messaging 重定向服务器的信息:

Instant Messaging 重定向概述

重定向服务器是一个专门配置的 Instant Messaging 服务器实例,用于执行各类重定向任务(例如将连接终点分配给 Instant Messaging 服务器)。将重定向服务器添加到部署中时,将可能会相互通信的用户分组到同一主机上,从而减少服务器之间的通信量。这样会减少部署中的服务器之间来回发送在线状态通知的数量。用户组由联系人列表的内容确定。联系人列表中的共享条目表示极可能会进行通信。

Instant Messaging 用户分区算法

Instant Messaging 确定部署中各用户之间的最佳划分方法,并创建用户的分组或 分区。Instant Messaging 所用的算法如下:

  1. 确定部署中的一个或多个用户集、用户网络及其连接。然后,重定向服务器会创建一个名为 user-to-network map 的表以将每个用户映射到用户网络。

  2. 对大于最大分区大小且存在弱连接的用户网络进行分区,从而使每个弱连接组件的最大大小不会大于所配置的分区大小。弱连接可由用户网络之间的极少数连接来确定,但是,对用户网络进行分区时,还可能会考虑其他参数(例如地理约束、每个用户网络的连接数量以及其他由管理员设置的约束)。

  3. 将各集分布到指定数量且大小类似的分区中。重定向服务器首先创建 network-to-partition 表作为此进程的一部分,并在最后创建 user-to-partition 表。这些表共同组成了重定向数据库。重定向数据库会将每个用户映射到一个分区 ID。可使用 rdadmin 命令行实用程序创建和管理此数据库。


示例 7–1 Instant Messaging 重定向事件序列

本示例说明实现成功的客户机重定向时要发生一系列事件。

  1. 管理员运行 rdadmin 生成和/或更新重定向数据库。

  2. 用户连接到重定向服务器并尝试进行验证。

  3. 重定向服务器确定用户的身份并在重定向数据库中查找对应的用户 ID。

  4. 如果重定向服务器在重定向数据库中没有找到用户 ID,它会联系下一个重定向服务器(由循环机制确定)来查找包含用户 ID 的重定向数据库。如果在重定向数据库中找到了用户 ID,重定向服务器会获取已分配给此用户的分区 ID。

  5. 重定向服务器根据已分配的分区 ID 确定用户将重定向至其中的节点。

  6. 重定向服务器向包含要重定向至其中的节点的客户机返回错误,并关闭与该客户机的连接。

    重定向服务器使用 see-other-host 流错误来将该信息返回给客户机。有关更多信息,参见RFC 3920

  7. 客户机解释错误,并与返回错误的节点建立连接。

  8. 重定向服务器持续不断地监视节点,并根据需要更新其 partition-to-host 表。


关于 Instant Messaging 重定向数据库

此数据库仅包含本地用户。重定向数据库中不包含网关、组件和远程用户。

Instant Messaging 重定向服务器概述

重定向服务器为一个 Instant Messaging 服务器实例,其唯一功能是重定向客户机连接。重定向服务器不会对最终用户执行任何其他服务。启动时,重定向服务器会载入服务器配置和分区文件,并创建以下数据结构:

重定向服务器使用两种数据结构来重定向客户机连接。有关重定向服务器如何使用此信息的说明,参见示例 7–1

Instant Messaging 重定向服务器和 StartTLS

在客户机与重定向服务器之间,可能会发生建立连接客户机的身份识别所需次数的 StartTLS 协商。客户机不需要验证证书,仅需要用户 ID。

将 Instant Messaging 服务器实例配置为重定向服务器

要将某个服务器实例指定为重定向服务器,需在 iim.conf 中为 iim_server.redirect.provider 参数提供一个值。一旦将实例指定为重定向服务器,则需通过在 iim.conf 中为其他重定向特定参数指定值来提供更多的配置信息。表 7–1 介绍了重定向配置参数。

表 7–1 iim.conf 中的重定向服务器配置参数

参数 

默认值 

说明 

iim_server.redirect.provider

无 

实现 com.sun.im.provider.Redirector 接口的重定向提供者名称或类别的列表(以逗号分隔)此参数的任意值都会将服务器实例定义为重定向服务器。支持的值包括 dbroundrobinregex 以及实现 com.sun.im.provider.Redirector 接口的类名称。

iim_server.redirect.to

无 

此重定向服务器可能会将客户机连接重定向至其中的节点的列表(以逗号分隔)。节点名称可为任意字母字符串。此列表可能是在 iim_server.redirect.to.nodename.host 中定义的主机的超集。

iim_server.redirect.to.nodename.host

无 

其中 nodename 是节点在 iim_server.redirect.to 中出现时的名称。对于重定向服务器要使用的 nodename,此属性为必需。

iim_server.redirect.to.nodename. usessl

False 

若为 true,则 nodename 会配置为使用传统 SSL。有关更多信息,参见在 Instant Messaging 中使用 TLS 和传统 SSL 的概述

iim_server.redirect.db.users

im-db-base/redirect.db

重定向数据库的名称和位置。 

iim_server.redirect.db.partitions

im-cfg-base/redirect.partitions

重定向分区文件的名称和位置。 

iim_server.redirect.db.partitionsize

5000 

分区中的最大用户数。 

iim_server.redirect.roundrobin. partitions

im-cfg-base/redirect.partitions

重定向分区文件的名称和位置。 

iim_server.redirect.pollfrequency

 

重定向服务器与 redirect.hosts 文件中所定义的主机进行连接的时间间隔。重定向服务器轮询这些主机,确定其是否处于联机状态以及能否接受客户机连接。

Procedure将 Instant Messaging 服务器配置为重定向服务器

开始之前

无法将早于 2006Q1 的 Instant Messenger 用于重定向服务器。如果使用第三方客户机,确保客户机支持 XMPP 重定向。

  1. 收集以上的表 7–1 中的信息。

  2. 打开 iim.conf

    有关查找和修改此文件的说明,参见附录 A,iim.conf 中的 Instant Messaging 配置参数

  3. 修改参数值以匹配您的部署。

    表 7–1 列出了需为其提供值的参数。如果 iim.conf 中没有这些参数,则进行添加。以下示例显示了 iimA.siroe.com 上对应于需修改的重定向服务器参数的 iim.conf 部分。


    iim_server.redirect.provider=db,roundrobin
    iim_server.redirect.to=imserverA,imserverB
    iim_server.redirect.to.imserverA.host=iimA.siroe.com
    iim_server.redirect.to.imserverB.host=iimB.siroe.com
    iim_server.redirect.to.imserverA.usessl=false
    iim_server.redirect.to.imserverB.usessl=false
  4. 保存更改并关闭 iim.conf

  5. 刷新重定向服务器的配置。


    imadmin refresh server
    
  6. 配置客户机以连接到重定向服务器而非多路复用器。

管理 Instant Messaging 重定向服务器

以下小节介绍了管理 Instant Messaging 重定向服务器的信息:

停止、启动、重新启动、刷新和检查 Instant Messaging 重定向服务器的状态

重定向服务器是仅配置来实现重定向的 Instant Messaging 服务器实例。使用与常规服务器实例相同的程序来停止、启动、重新启动、刷新和检查状态。例如,要启动重定向服务器,可键入:


imadmin start server

有关更多信息,参见停止、启动、刷新和检查 Instant Messaging 组件

Instant Messaging 重定向服务器日志记录

重定向服务器是仅配置来实现重定向的 Instant Messaging 服务器实例。使用用于常规服务器实例的相同说明和日志。有关更多信息,参见第 13 章,管理 Instant Messaging 的日志记录

为 Instant Messaging 重定向服务器设置分区大小

可通过设置 iim.conf 中的 iim_server.redirect.db.partitionsize 参数来指定最大分区大小。此参数的值等于每个分区所允许的用户数。默认值为 5000(个用户)。

为 Instant Messaging 重定向服务器指定分区列表

redirect.partitions 文件定义了特定分区中的用户要重定向至其中的主节点以及一系列回退节点(如果需要)。文件中的每个非空的非注释行都定义了一个分区的节点列表。列表中的每个节点都必须对应于一个定义为 iim.conf 中的 iim_server.redirect.to 参数值的节点。如果定义的分区数大于 redirect.partitions 文件中的行数,则循环处理未指定的分区。

默认情况下,redirect.partitions 文件存储于以下位置:


im-cfg-base/redirect.partitions

示例 7–2 Redirect.partitions 文件配置

redirect.partitions 文件示例假定以下情况:

在这种情况下,redirect.partitions 可能显示为如下方式:


imserverA, imserverB, imserverC
imserverB, imserverC

有两个非空的非注释行,即表示至少有两个用户分区。第一行定义分区 1 的重定向行为。重定向服务器将首先把分区 1 用户重定向至 imserverA。如果失败,重定向服务器会先尝试 imserverB,然后尝试 imserverC。如果没有可操作的节点,则重定向服务器会向客户机返回错误。


使用 rdadmin 实用程序创建和管理 Instant Messaging 重定向表

通常,根据需要使用 rdadmin 实用程序。无需频繁地重新生成表,因为登记表的更改通常不会太多。但是,应至少每两周运行一次此实用程序。

Procedure创建新的或更新现有的 Instant Messaging 重定向数据库

  1. 停止重定向服务器:


    imadmin stop redirect
    
  2. 如果要更新现有的重定向数据库,获取之前由 rdadmin 创建的分区编号:

    1. 在文本编辑器中打开 rdadmin.log

      rdadmin.log 文件存储于:


      im-runtime-base/log
    2. 查找 "NO OF PARTITIONS RUN" 的值。

  3. 确保至少拥有与分区数量相同的用户条目。

  4. 生成新的重定向数据库:

    例如:


    rdadmin generate

    有关 rdadmin 的其他选项,参见 rdadmin man 页面。

    rdadmin 实用程序创建新的数据库并将其保存为 im-db-base/redirect.new.db,也可指定另一名称。

  5. 在首次生成重定向数据库时,将数据库重命名为 redirect.db

  6. 如果要更新现有重定向数据库,使用新数据库代替旧的重定向数据库:

    例如:


    rm im-db-base/redirect.db
    cp im-db-base/redirect.new.db im-db-base/redirect.db
    
  7. 启动重定向服务器:


    imadmin start redirect
    

Instant Messaging 重定向服务器物理主机监视

重定向服务器监视其将客户机重定向至其中的主机的操作状态。如果重定向服务器确定其中一个主机失败,它会将分区重新分配给随后的主机,如 redirect.partitions 文件所定义。此外,重定向服务器还会检测主机何时返回联机状态,从而可将分区重定向回主机。重定向服务器通过以下两种方式监视主机:

Procedure设置 Instant Messaging 重定向服务器主机轮询频率

  1. 在重定向服务器上,打开 iim.conf

    有关查找和修改此文件的说明,参见附录 A,iim.conf 中的 Instant Messaging 配置参数

  2. 设置 iim_server.redirect.pollfrequency 参数。

    值以分钟为单位。例如:


    iim_server.redirect.pollfrequency=200
  3. 保存并关闭 iim.conf

  4. 刷新重定向服务器。


    imadmin refresh server
    

Instant Messaging 重定向服务器最佳实践和故障排除

以下各节介绍了使用 Instant Messaging 重定向服务器的最佳实践以及故障排除信息:

重定向服务器证书

在使用证书来实现安全验证的部署中,每次进行连接时,系统可能会提示客户机接受两个证书;一个证书用于重定向服务器,另一个证书用于客户机重定向至其中的主机。为避免此类情况,使用受信证书或在两个服务器上使用同一证书。

Instant Messaging 重定向服务器支持的客户机

对于个别不支持 RFC 3920 和 see-other-hosts 流错误 (XMPP 重定向) 的客户机,重定向不起作用。可将 Instant Messenger 2006Q1 或更高版本用于重定向服务器。如果使用第三方客户机,确保客户机支持 XMPP 重定向。

使用重定向服务器并在 LDAP 中存储用户属性

如果要使用 LDAP 来存储用户属性(即 iim.userprops.store =ldap),则需确保 iim_ldap.usergroupbinddniim_ldap.usergroupbindcred 的值拥有对目录的目录管理器级别访问权限。

确定重定向数据库的分区大小

分区大小应尽可能大,以避免出现需拆分用户网络的情况。然而,分区也不应大于最小系统可支持的大小。

将重定向服务器用作分区主机

重定向服务器也可托管一个或多个分区。可通过在 redirect.partitions 文件中列出重定向服务器实例或作为 iim_server.redirect.to 参数的值来实现此目的。但是,不应将多台重定向服务器用作分区主机,因为不同步的 redirect.partitions 文件可能会引起重定向循环。