使用 Instant Messaging 附带的重定向服务来平衡服务器池(多节点部署)中的服务器之间的负载。性能直接受到单个部署中各服务器之间所需通信量的影响,因此使可能会共享在线状态信息和消息的两个用户尽可能在同一节点停止,可以改善性能。
本章的以下小节包含有关使用 Instant Messaging 重定向服务器的信息:
重定向服务器是一个专门配置的 Instant Messaging 服务器实例,用于执行各类重定向任务(例如将连接终点分配给 Instant Messaging 服务器)。将重定向服务器添加到部署中时,将可能会相互通信的用户分组到同一主机上,从而减少服务器之间的通信量。这样会减少部署中的服务器之间来回发送在线状态通知的数量。用户组由联系人列表的内容确定。联系人列表中的共享条目表示极可能会进行通信。
Instant Messaging 确定部署中各用户之间的最佳划分方法,并创建用户的分组或 分区。Instant Messaging 所用的算法如下:
确定部署中的一个或多个用户集、用户网络及其连接。然后,重定向服务器会创建一个名为 user-to-network map 的表以将每个用户映射到用户网络。
对大于最大分区大小且存在弱连接的用户网络进行分区,从而使每个弱连接组件的最大大小不会大于所配置的分区大小。弱连接可由用户网络之间的极少数连接来确定,但是,对用户网络进行分区时,还可能会考虑其他参数(例如地理约束、每个用户网络的连接数量以及其他由管理员设置的约束)。
将各集分布到指定数量且大小类似的分区中。重定向服务器首先创建 network-to-partition 表作为此进程的一部分,并在最后创建 user-to-partition 表。这些表共同组成了重定向数据库。重定向数据库会将每个用户映射到一个分区 ID。可使用 rdadmin 命令行实用程序创建和管理此数据库。
本示例说明实现成功的客户机重定向时要发生一系列事件。
管理员运行 rdadmin 生成和/或更新重定向数据库。
用户连接到重定向服务器并尝试进行验证。
重定向服务器确定用户的身份并在重定向数据库中查找对应的用户 ID。
如果重定向服务器在重定向数据库中没有找到用户 ID,它会联系下一个重定向服务器(由循环机制确定)来查找包含用户 ID 的重定向数据库。如果在重定向数据库中找到了用户 ID,重定向服务器会获取已分配给此用户的分区 ID。
重定向服务器根据已分配的分区 ID 确定用户将重定向至其中的节点。
重定向服务器向包含要重定向至其中的节点的客户机返回错误,并关闭与该客户机的连接。
重定向服务器使用 see-other-host 流错误来将该信息返回给客户机。有关更多信息,参见RFC 3920。
客户机解释错误,并与返回错误的节点建立连接。
重定向服务器持续不断地监视节点,并根据需要更新其 partition-to-host 表。
此数据库仅包含本地用户。重定向数据库中不包含网关、组件和远程用户。
重定向服务器为一个 Instant Messaging 服务器实例,其唯一功能是重定向客户机连接。重定向服务器不会对最终用户执行任何其他服务。启动时,重定向服务器会载入服务器配置和分区文件,并创建以下数据结构:
此服务器可将客户机连接重定向至其中的实例的列表。它是重定向服务器的实例列表。此实例列表由 redirect.hosts 文件中的条目生成。
将分区映射到物理主机的表。此表名为 partition map。重定向服务器通过检查实例列表来建立分区映射,直到其达到指定的最大分区数。
重定向服务器使用两种数据结构来重定向客户机连接。有关重定向服务器如何使用此信息的说明,参见示例 7–1。
在客户机与重定向服务器之间,可能会发生建立连接客户机的身份识别所需次数的 StartTLS 协商。客户机不需要验证证书,仅需要用户 ID。
要将某个服务器实例指定为重定向服务器,需在 iim.conf 中为 iim_server.redirect.provider 参数提供一个值。一旦将实例指定为重定向服务器,则需通过在 iim.conf 中为其他重定向特定参数指定值来提供更多的配置信息。表 7–1 介绍了重定向配置参数。
表 7–1 iim.conf 中的重定向服务器配置参数
参数 |
默认值 |
说明 |
iim_server.redirect.provider |
无 |
实现 com.sun.im.provider.Redirector 接口的重定向提供者名称或类别的列表(以逗号分隔)此参数的任意值都会将服务器实例定义为重定向服务器。支持的值包括 db、roundrobin、regex 以及实现 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 文件中所定义的主机进行连接的时间间隔。重定向服务器轮询这些主机,确定其是否处于联机状态以及能否接受客户机连接。 |
无法将早于 2006Q1 的 Instant Messenger 用于重定向服务器。如果使用第三方客户机,确保客户机支持 XMPP 重定向。
收集以上的表 7–1 中的信息。
打开 iim.conf。
有关查找和修改此文件的说明,参见附录 A,iim.conf 中的 Instant Messaging 配置参数。
修改参数值以匹配您的部署。
表 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 |
保存更改并关闭 iim.conf。
刷新重定向服务器的配置。
imadmin refresh server |
配置客户机以连接到重定向服务器而非多路复用器。
以下小节介绍了管理 Instant Messaging 重定向服务器的信息:
重定向服务器是仅配置来实现重定向的 Instant Messaging 服务器实例。使用与常规服务器实例相同的程序来停止、启动、重新启动、刷新和检查状态。例如,要启动重定向服务器,可键入:
imadmin start server |
有关更多信息,参见停止、启动、刷新和检查 Instant Messaging 组件。
重定向服务器是仅配置来实现重定向的 Instant Messaging 服务器实例。使用用于常规服务器实例的相同说明和日志。有关更多信息,参见第 13 章,管理 Instant Messaging 的日志记录。
可通过设置 iim.conf 中的 iim_server.redirect.db.partitionsize 参数来指定最大分区大小。此参数的值等于每个分区所允许的用户数。默认值为 5000(个用户)。
redirect.partitions 文件定义了特定分区中的用户要重定向至其中的主节点以及一系列回退节点(如果需要)。文件中的每个非空的非注释行都定义了一个分区的节点列表。列表中的每个节点都必须对应于一个定义为 iim.conf 中的 iim_server.redirect.to 参数值的节点。如果定义的分区数大于 redirect.partitions 文件中的行数,则循环处理未指定的分区。
默认情况下,redirect.partitions 文件存储于以下位置:
im-cfg-base/redirect.partitions |
此 redirect.partitions 文件示例假定以下情况:
已为 db 和 roundrobin 查找配置了重定向服务器。
已将以下三个节点标识为重定向客户机的目的地:
imserverA
imserverB
imserverC
这三个节点分别对应于以下主机:
iimA.siroe.com
iimB.siroe.com
iimC.siroe.com.
在 iim.conf 中按以下方式表示:
iim_server.redirect.provider=db,roundrobin iim_server.redirect.to=imserverA,imserverB, imserverC iim_server.redirect.to.imserverA.host=iimA.siroe.com iim_server.redirect.to.imserverB.host=iimB.siroe.com iim_server.redirect.to.imserverC.host=iimC.siroe.com |
至少有两个用户分区。
在这种情况下,redirect.partitions 可能显示为如下方式:
imserverA, imserverB, imserverC imserverB, imserverC |
有两个非空的非注释行,即表示至少有两个用户分区。第一行定义分区 1 的重定向行为。重定向服务器将首先把分区 1 用户重定向至 imserverA。如果失败,重定向服务器会先尝试 imserverB,然后尝试 imserverC。如果没有可操作的节点,则重定向服务器会向客户机返回错误。
通常,根据需要使用 rdadmin 实用程序。无需频繁地重新生成表,因为登记表的更改通常不会太多。但是,应至少每两周运行一次此实用程序。
停止重定向服务器:
imadmin stop redirect |
如果要更新现有的重定向数据库,获取之前由 rdadmin 创建的分区编号:
确保至少拥有与分区数量相同的用户条目。
生成新的重定向数据库:
例如:
rdadmin generate |
有关 rdadmin 的其他选项,参见 rdadmin man 页面。
rdadmin 实用程序创建新的数据库并将其保存为 im-db-base/redirect.new.db,也可指定另一名称。
在首次生成重定向数据库时,将数据库重命名为 redirect.db。
如果要更新现有重定向数据库,使用新数据库代替旧的重定向数据库:
例如:
rm im-db-base/redirect.db cp im-db-base/redirect.new.db im-db-base/redirect.db |
启动重定向服务器:
imadmin start redirect |
重定向服务器监视其将客户机重定向至其中的主机的操作状态。如果重定向服务器确定其中一个主机失败,它会将分区重新分配给随后的主机,如 redirect.partitions 文件所定义。此外,重定向服务器还会检测主机何时返回联机状态,从而可将分区重定向回主机。重定向服务器通过以下两种方式监视主机:
定期轮询。重定向服务器在 iim.conf 中的 iim_server.redirect.pollfrequency 参数所指定的时间间隔内建立连接并打开 XMPP 流。
客户机重试监视。如果重定向服务器检测到单个客户机在很短时间内反复尝试连接,则可确定主机处于不可操作状态。
在重定向服务器上,打开 iim.conf。
有关查找和修改此文件的说明,参见附录 A,iim.conf 中的 Instant Messaging 配置参数。
设置 iim_server.redirect.pollfrequency 参数。
值以分钟为单位。例如:
iim_server.redirect.pollfrequency=200 |
保存并关闭 iim.conf。
刷新重定向服务器。
imadmin refresh server |
以下各节介绍了使用 Instant Messaging 重定向服务器的最佳实践以及故障排除信息:
在使用证书来实现安全验证的部署中,每次进行连接时,系统可能会提示客户机接受两个证书;一个证书用于重定向服务器,另一个证书用于客户机重定向至其中的主机。为避免此类情况,使用受信证书或在两个服务器上使用同一证书。
对于个别不支持 RFC 3920 和 see-other-hosts 流错误 (XMPP 重定向) 的客户机,重定向不起作用。可将 Instant Messenger 2006Q1 或更高版本用于重定向服务器。如果使用第三方客户机,确保客户机支持 XMPP 重定向。
如果要使用 LDAP 来存储用户属性(即 iim.userprops.store =ldap),则需确保 iim_ldap.usergroupbinddn 和 iim_ldap.usergroupbindcred 的值拥有对目录的目录管理器级别访问权限。
分区大小应尽可能大,以避免出现需拆分用户网络的情况。然而,分区也不应大于最小系统可支持的大小。
重定向服务器也可托管一个或多个分区。可通过在 redirect.partitions 文件中列出重定向服务器实例或作为 iim_server.redirect.to 参数的值来实现此目的。但是,不应将多台重定向服务器用作分区主机,因为不同步的 redirect.partitions 文件可能会引起重定向循环。