磁盘空间的大小和每台服务器的处理能力可以影响集群中包含的服务器数量。决定要在集群中使用的硬件时,请牢记以下几点:
创建的副本越多,集群复制所需的磁盘空间和处理能力就越大。
集群数据库目录需要的磁盘空间大约为 2M ,集群中每两千个数据库还需要 1M 额外空间。
集群中的服务器越多,每台服务器就需要使用更强大的处理能力与其他集群服务器进行通信。
在服务器上运行的服务器任务和占用大量 CPU 资源的应用程序越多,所需的处理能力就越大。
每台服务器不但对它所包含的数据库要有足够的处理能力,而且对可能故障转移到此服务器的任何数据库都要有足够的处理能力。
集群服务器需要的内存比非集群服务器更多。实际所需的内存大小取决于服务器上的活动级别。
要查看计算机是否需要额外的内存或处理能力,请检查平台统计信息。
当有大集群或工作负载很重的集群时,可能需要使用多个集群复制器来提高集群复制的性能。请检查集群复制器统计信息,以查看等候处理的数据库队列是否很长。如果很长,请一次添加一个集群复制器,直至统计信息提高到足够水平。
因为集群复制器占用系统资源,所以添加集群复制器时,系统的整体性能可能会下降。因此,不要添加太多的集群复制器,够用即可。
要使繁忙的集群更加有效,可为集群创建专用网络。为此,请在每台集群服务器上多安装一块网卡,并通过专用集线器或切换器连接这些网络接口卡。
为集群创建专用局域网的主要原因是为了将集群在使用集群复制和服务器探测信号时所产生的网络流量独立出来。专用局域网可以将可用带宽更多地留给主局域网。如果估计可能使用大量的集群复制活动,则应创建专用局域网。
另外,还可以考虑为内部集群通讯创建专用局域网,即使在出现某种网络故障时,也可以保证集群服务器之间的通讯。通过添加专用网络,集群中的所有服务器至少由两种不同的局域网段连接。因此,如果一个局域网段上的网络插头或电缆出现故障,集群中的所有服务器之间仍然具有网络连接。这样就可以确保集群服务器相互之间仍保持联系,并继续进行集群复制以保持数据库同步。
如果为集群创建专用局域网,必须将所有的集群成员同时连接到专用局域网(用于内部集群通讯)和主局域网(用于客户机访问)。
输入命令smit tcpip ,出现以下图:
选择“Minimum Configuration & Startup” ,进入如下画面:
选择相应的网卡,如en0 或en1, 输入回车,如下图:
填写相关IP 设置信息,输入回车。返回信息如下图:
IP 设置完成。
使用以上方法设置其他网卡
设备 |
网卡设备名 |
IP 地址 |
主机名 |
服务器01 |
en0 |
10.1.177.18 |
dev01.acme.com |
|
en1 |
10.1.177.28 |
clunode01 |
服务器02 |
en0 |
10.1.177.19 |
dev02.acme.com |
|
en1 |
10.1.177.29 |
clunode02 |
在每台服务器上输入以下命令
ping 10.1.177.18
ping 10.1.177.19
ping 10.1.177.28
ping 10.1.177.29
ping dev01.acme.com
ping dev02.acme.com
ping clunode01
ping clunode02
请确认以上在两台服务器之间均能ping 通。
参考 Domino安装文档
项目 |
值 |
端口 |
CLUSTER |
协议 |
TCP |
Notes 网络 |
集群网络 |
网络地址 |
clunode01 clunode02 |
启用 |
ENABLED |
为DevSVR01 添加端口,打开公共地址本,相应服务器文档,如下图:
以相同的方法为DevSVR02 添加端口,网络地址为clunode02 。
修改DevSVR01 的notes.ini ,输入如下命令:
vi /data2/devsvr01/notes.ini
修改如下图:
从相应的子网中为每个端口分配一个 IP 地址,并且将此信息以下列格式置于 NOTES.INI 文件中:
PORT1_ TcpIPAddress=0, a.b.c.d :1352
PORT2_ TcpIPAddress=0, e.f.g.h :1352
其中 PORT1 和 PORT2 是端口名称,而 a.b.c.d 和 e.f.g.h 是这些端口的 IP 地址。
例如,如果端口名称为 TCPIP 和 CLUSTER ,则这些信息可能是:
TCPIP_TcpIPAddress=0,192.114.32.5:1352
CLUSTER_TcpIPAddress=0,192.168.64.1:1352
以相同的方法设置DevSVR02 的notes.ini 。
Server_Cluster_Default_Port= Cluster Port
其中 Cluster Por 是为集群创建的端口。在本样例中,此行应为:
Server_Cluster_Default_Port=CLUSTER
这将确保所有集群通讯使用此集群通讯端口,而不管该端口所在的顺序。
注意:使用 Server_Cluster_Default_Port 设置将端口分配到集群通讯的专用局域网的方法存在一个缺点。如果集群服务器在此端口上连接时遇到问题,它将尝试另一个端口。因此,该服务器将能够与其他集群服务器进行通讯或复制。在该服务器可以与集群再次通讯之前,必须解决网络问题或从 NOTES.INI 文件中删除此设置。打开DevSVR01/ChemChina 服务器上的names.nsf ,打开服务器视图,先中所有要加入至集群的服务器文档,单击”Add Cluster” 按钮,如下图:
输入集群名称:ClusterDev ,点击“确定”,出现以下图:
点击“是”,立即执行;
点击“否”,由服务器管理进程执行
完成后,重启所有集群中的服务器。
重启服务后,domino 会自动启动两个服务-- Cluster Replicator 和Cluster Director 服务。在控制台输入show task ,如下图:
输入show cluster ,查看群集状态,如下图:
如果availability index 为无效,则说明服务器宕机我停止服务,或当前服务器无法连接至相关服务器。确认Server cluster default port 是否为你指定的集群通讯端口。
为了减少集群之间服务器的复制流量,标准的模板或没有在集群之间部署的数据库都应该关闭集群复功能,需要时再打开。使用Domino Administrator 进行设置,如下图:
在工具面板中选择“集群”->“ 禁用集群复制”,点击确定,即可。
命令 |
显示的信息 |
用途 |
tell clrepl dump |
|
|
tell clrepl dump server |
|
|
tell clrepl dump retry |
|
|
tell clrepl pause |
暂停集群复制器 |
|
tell clrepl resume |
继续集群复制器 |
|
tell clrepl retry |
强制集群复制器立即重试失败的复制 |
|
tell clrepl refresh |
强制集群复制器立即更新集群数据库目录信息 |
|
tell clrepl log |
强制集群复制器立即记录 |
|
show stat server.cluster* |
查看集群管理器事件和统计信息 |
|
show stat replica.cluster* |
查看集群复制事件和统计信息 |
集群目录数据库(cldbdir.nsf) 在所有集群服务器上必须的一致。如果不一致时,使用复制功能,手工强制复制。
为 Lotus Domino 服务器创建集群还提供活动的负载平衡,从而更好地利用资源。我们可以通过以下步骤在 Domino 服务器之间实现工作负载平衡:
限制每个服务器的工作负载(更改服务器可用性阈值)
更改可以同时访问某个服务器的最大用户数
将数据库移动(分发)到其他服务器
在集群中计划和放置副本,为繁忙的数据库创建更多的副本
向集群添加一个或多个服务器
使用 Activity Trends 工具分析集群的情况并提供建议
一定要记住,工作负载平衡并不能解决企业的总体计算能力匮乏问题。如果您的 Domino 服务器目前已经不堪重负,并且没有额外的服务器处理更多的负载,那么启用工作负载平衡也不能解决问题。
要平衡工作负载,必须能够将超载的服务器的过剩负载发送到其他服务器。如果没有接受过剩负载的服务器,那么这些负载还得由原来的服务器处理。
不过要注意,为每个请求查找另一个可用的服务器增加了服务器的工作负载。如果您的企业没有足够的计算能力,可以考虑增加处理器或内存,或者升级设备以处理更多的负载。
如果您的集群的负载一般都比较平均分布,那么可以仅考虑配置故障转移,而不需配置工作负载平衡。
膨胀系数 |
可用性指数 |
1 |
100 |
2 |
83 |
4 |
67 |
8 |
50 |
16 |
33 |
32 |
17 |
64 |
0 |
注意:膨胀系数和可用性指数仅度量服务器的响应时间,服务器响应时间通常只是客户端经历的响应时间的一小部分。例如,客户端和服务器之间的网络响应时间在客户端经历的响应时间中占据很大比重。
更改表示服务器满载的膨胀系数值
为了让 Domino 工作负载平衡更高效,您必须调整膨胀系数和可用性指数之间的关系,让服务器在达到您指定的工作负载时执行故障转移。您可以通过指定表示服务器满载的膨胀系数值来实现这个目的。在 Lotus Domino 服务器中,默认值为 64 。当膨胀系数达到这个值时,就认为服务器已经满载,这时它的可用性指数就下降到 0 。
技巧:您可以通过 Show AI 服务器命令查看推荐的可用性指数设置。
如果您的服务器非常强劲快速,您可以增加表示服务器满载的膨胀系数值。在一些非常快的服务器上,您可以将该值设置为几百或更高。如果您的服务器很慢,则可以考虑降低膨胀系数值。
要更改表示服务器满载的膨胀系数值,请遵循以下步骤:
SERVER_TRANSINFO_RANGE=n
注:对于 n 值,您可以选择一个数字,让 2 的 n 次方等于您希望表示服务器满载的膨胀系数值。 n 的默认值为 6 ,那么得出的膨胀系数值为64 (因为 2 的 6 次方等于 64 )。
如果您将 SERVER_TRANSINFO_RANGE 设置为 7 ,那么表示服务器满载的膨胀系数值则为 128 。如果将该参数设置为 8 ,那么膨胀系数值就变成 256 。
为了确定 SERVER_TRANSINFO_RANGE 的最佳值,请遵循以下步骤:
膨胀系数 |
可用性指数 |
1 |
100 |
2 |
88 |
4 |
75 |
8 |
63 |
16 |
50 |
32 |
38 |
64 |
25 |
128 |
13 |
256 |
0 |
改变用于计算膨胀系数的数据量
尽管一般情况下没有必要这样做,但是您可以使用下面的 Notes.ini 设置更改Lotus Domino 收集用于计算膨胀系数的数据量。
更改数据收集周期的次数:
Server_Transinfo_Max=x
其中 x 是您希望 Lotus Domino 使用的收集周期次数。
更改数据收集周期的时间长度:
Server_Transinfo_Update_I nterval=x
其中 x 是每个周期的时长,单位为秒。
项目 |
描述 |
Server.AvailabilityIndex |
服务器可用性指数的当前值。可用性指数的值的范围是0 至 100 。 0 表示服务器没有可用资源。 100 表示服务器完全可用 |
Server. Expansion Factor |
服务器膨胀系数的当前值。该值用于计算可用性指数。值为 1 时表示服务器以最小时间完成事务。值为 64 时表示完成事务所需的时间是最小时间的 64 倍。默认情况下,膨胀系数为 64 时表示服务器满载,转换成可用性指数为 0 。您可以通过 Notes.ini 设置的Server_Transinfo_Range 更改表示服务器满载的膨胀系数。 您可以使用服务器命令 Show AI 获取推荐的可用性指数。 |
Server.Cluster.OpenRedirects. LoadBalance.Successful |
繁忙服务器成功将客户端重定向到另一个集群成员的次数 |
Server.Cluster.OpenRedirects.LoadBalance.Unsuccessful |
繁忙服务器没有成功将客户端重定向到另一个集群成员的次数。如果目标服务器的状态为繁忙或不可用,那么重定向将不成功 |
Server.Cluster.OpenRequest.ClusterBusy |
当所有集群服务器都处于繁忙状态时繁忙服务器尝试重定向客户端请求的次数 |
Server.Cluster.OpenRequest.LoadBalanced |
用户试图打开状态为繁忙的服务器的数据库的次数 |
对比集群中的所有服务器的这些数据,然后更改负载没有良好平衡的服务器的可用性阈值。
技巧 :工作负载平衡并不是为企业提供足够计算资源的代替办法。如果所有服务器已经超载,那么启用负载平衡会带来更多问题,因为没有存放繁忙服务器重定向的客户端请求的地方。另外,查找可用服务器会降低处于繁忙状态下的服务器的性能。
您还可以通过 Notes.ini 设置服务器的最大用户数实现集群工作负载平衡:
Server_MaxUsers=n
该设置指定服务器同时允许的最大活动用户数量。当服务器达到该极限时,服务器就进入 MAXUSERS 状态,并在活动用户数降到Server_MaxUsers 极限以下之前拒绝任何用户请求。
当 Lotus Domino 服务器因为处于 MAXUSERS 状态而拒绝访问请求时,Cluster Manager 就试图将请求重定向到另一个包含正确副本的集群服务器。如果其他服务器都不可用,Lotus Domino 将拒绝访问请求并显示一条解释性消息。
另外,您可以通过监控中的统计数据更好地管理集群。除了 AvailabilityIndex 之外,统计数据 AvailabilityThreshold 和 ExpansionFactor的名称都包含前缀 Server.Cluster ,但省去了这个前缀。
AvailabilityIndex 、AvailabilityThreshold 和 ExpansionFactor 都包含前缀“Server.” 。
注意:Server_MaxUsers 设置不会影响复制。即使服务器处于 MAXUSERS 状态时仍然会发生复制。
统计数据名称 |
说明 |
Member |
显示集群中的服务器的名称和可用性指数。 |
AvailabilityIndex |
度量服务器可用性的方法之一。 0 表示没有可用资源; 100表示服务器的所有资源完全可用。 |
AvailabilityThreshold |
服务器当前的可用性阈值。当可用性指数小于等于可用性阈值时,服务器将进入繁忙状态。 |
ExpansionFactor |
服务器当前的膨胀系数。该值用于计算可用性指数。值为 1时表示该服务器以最小的时间完成事务。值为 64 时表示该服务器完成事务所需的时间比最小时间长 64 倍。默认情况下,膨胀系数为 64 时表示服务器满载,而转换成可用性指数则为0 。 |
OpenRedirects.Failover.Successful |
在客户端通过副本 ID 打开数据库失败之后,服务器成功将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.Failover.Unsuccessful |
在客户端通过副本 ID 打开数据库失败之后,服务器不能将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.FailoverByPath.Successful |
在客户端通过路径名打开数据库失败之后,服务器成功将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.FailoverByPath.Unsuccessful |
在客户端通过路径名打开数据库失败之后,服务器不能将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.LoadBalance.Successful |
在服务器处于繁忙状态时客户端通过副本 ID 打开数据库失败之后,服务器成功将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.LoadBalance.Unsuccessful |
在服务器处于繁忙状态时客户端通过副本 ID 打开数据库失败之后,服务器不能将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.LoadBalanceByPath.Unsuccessful |
在服务器处于繁忙状态时客户端通过路径名打开数据库失败之后,服务器不能将客户端重定向到另一个集群成员所需的总时间。 |
OpenRedirects.LoadBalanceByPath.Successful |
在服务器处于繁忙状态时客户端通过路径名打开数据库失败之后,服务器成功将客户端重定向到另一个集群成员所需的总时间。 |
OpenRequest.ClusterBusy |
当所有服务器 处于繁忙状态时的客户端请求总数。 |
OpenRequest.DatabaseOutOfService |
客户端尝试打开标记为不可用的服务器上的数据库所需的总时间。 |
OpenRequest.LoadBalanced |
客户端尝试打开标记繁忙的服务器上的数据库所需的总时间。 |
PortName |
用于内部集群网络通信的默认端口,或一个星号,表示没有可以的默认端口或其他活动端口。 |
ProbeCount |
服务器查找其他集群成员所需的总时间。 |
ProbeError |
一个服务器查找另一个服务器时收到的错误。 |
ProbeTimeout(mins) * |
显示发生集群内部查找集群成员的时间间隔。 |
统计数据名称 |
说明 |
Servers |
从该服务器接收复制的所有集群成员 |
Successful |
服务器启动之后的所有成功复制 |
Failed |
服务器启动之后的所有失败复制 |
Docs.Added |
Cluster Replicator 添加的所有文档 |
Docs.Updated |
Cluster Replicator 更新的所有文档 |
Docs.Deleted |
Cluster Replicator 删除的所有文档 |
Files. Local |
存在当前服务器中并且在集群中的其他服务器上拥有副本的数据库数 |
Files.Remote |
Cluster Replicator 用于执行更改并且在其他服务器上的数据库数 |
Retry.Skipped |
Cluster Replicator 没有尝试复制数据库的总时间。当目标服务器不可用或正在等待另一个重试请求时忽略的重试次数 |
Retry.Waiting |
等待重试的副本数 |
SecondsOnQueue |
最后复制的数据库在工作队列中的时间,以秒为单位 |
SecondsOnQueue.Avg |
数据库在工作队列中的平均时间,以秒为单位 |
SecondsOnQueue.Max |
数据库在工作队列中的最长时间,以秒为单位 |
SessionBytes.In |
集群复制期间接收的总字节数 |
SessionBytes.Out |
集群复制期间发送的总字节数 |
WorkQueueDepth |
正在等待通过 Cluster Replicator 进行复制的数据库数 |
WorkQueueDepth.Avg |
自从服务器启动之后的平均工作队列长度 |
WorkQueueDepth.Max |
自从服务器启动之后的最大工作队列长度 |