这个怎么运作
基础
Confluence数据中心使您可以在类似于下图所示的群集中设置Confluence:
运行Confluence应用程序的多个服务器节点以及其他所需组件。
存储附件和其他共享文件的共享文件系统。
所有节点读写的数据库。
负载均衡器,可将请求均匀地定向到每个节点。
所有Confluence节点都处于活动状态并处理请求。用户将访问所有请求的相同Confluence节点,直到其会话超时,他们注销或从群集中删除节点。
主页目录
Confluence拥有本地目录和共享目录的概念。
每个Confluence节点都有一个本地主目录,其中包含日志,缓存,Lucene索引和配置文件。其他所有内容都存储在共享主目录中,群集中的每个Confluence节点都可以访问该主目录。Marketplace应用程序可以选择是否在本地或共享主页中存储数据,具体取决于应用程序的需求。
如果您当前正在数据库中存储附件,则可以继续这样做,但这不适用于新安装。
高速缓存
Confluence使用通过Hazelcast管理的分布式缓存。数据在集群中的所有Confluence节点上均匀分区,而不是在每个节点上进行复制。这样可以实现更好的水平可伸缩性,并且与完全复制的缓存相比,所需的存储和处理能力更低。
由于此缓存解决方案,为了最大限度地减少延迟,您的节点应位于相同的物理位置。
索引
Confluence索引的完整副本分别存储在每个Confluence节点上。日志服务使每个索引保持同步。
首次设置群集时,您将本地主目录(包括索引)从第一个节点复制到每个新节点。
将新的Confluence节点添加到现有群集时,您将现有节点的本地主目录复制到新节点。当您启动新节点时,Confluence将检查索引是否是最新的,如果不是,则从共享主目录或正在运行的节点(具有匹配的内部版本号)请求索引的恢复快照,并将其提取到继续启动过程之前的索引目录。如果无法生成快照或新节点未及时收到快照,则将删除现有索引文件,Confluence将执行完整的重新索引。
如果Confluence节点在短时间内(小时)与群集断开连接,则它将能够使用日志服务在重新加入群集时使其索引副本保持最新。如果某个节点停机了很长时间(天),其Lucene索引将变得陈旧,并且它将从现有节点请求恢复快照,作为节点启动过程的一部分。
如果您怀疑所有节点上的索引都存在问题,则可以在一个节点上临时禁用索引恢复,在该节点上重建索引,然后将新索引复制到每个剩余节点。
集群安全机制
ClusterSafetyJob计划任务在Confluence中每30秒运行一次。在群集中,此作业仅在一个Confluence节点上运行。计划任务基于安全编号进行操作 - 安全编号是随机生成的编号,存储在数据库和群集中使用的分布式缓存中。ClusterSafetyJob将数据库中的值与缓存中的值进行比较,如果值不同,Confluence将关闭节点 - 这称为cluster split-brain。此安全机制用于确保您的群集节点无法进入不一致状态。
如果确实发生了群集裂脑,则需要确保群集节点之间的网络连接正确。最有可能的是,多播流量被阻止或未正确路由。
这种机制也存在于独立的Confluence中。
平衡正常运行时间和数据完整性
通过更改群集安全预定作业运行的频率和Hazelcast心跳的持续时间(控制节点在从群集中删除之前可以脱离通信的时间),您可以微调群集中正常运行时间和数据完整性之间的平衡。在大多数情况下,默认值是合适的,但在某些情况下,您可能决定权衡数据完整性以延长正常运行时间。
集群锁和事件处理
如果操作必须仅在一个节点上运行,例如计划作业或发送每日电子邮件通知,Confluence将使用群集锁来确保仅在一个节点上执行操作。
同样,某些操作需要在一个节点上执行,然后发布给其他节点。事件处理确保Confluence仅在提交和完成当前事务时发布集群事件。这是为了确保在接收和处理事件时,存储在数据库中的任何数据都可用于群集中的其他实例。事件广播仅针对某些事件进行,例如启用或禁用应用。
群集节点发现
配置群集节点时,您可以提供每个群集节点的IP地址或多播地址。
如果您正在使用多播:
Confluence将在多播网络地址上广播加入请求。Confluence必须能够在此多播地址上打开UDP端口,否则将无法找到其他群集节点。一旦发现节点,每个节点都响应一个单播(正常)IP地址和端口,可以联系它以进行缓存更新。Confluence必须能够打开UDP端口以与其他节点进行常规通信。
可以从群集名称自动生成多播地址,也可以在设置第一个节点期间输入自己的多播地址。
群集节点
您的数据中心许可证不限制群集中的节点数。我们已经测试了多达4个节点的性能和稳定性。
虽然每个节点不需要相同,但为了保持一致的性能,我们建议它们尽可能接近。所有群集节点必须:
位于同一数据中心
运行相同的Confluence版本(对于Confluence节点)或相同的Synchrony版本(对于Synchrony节点)
拥有相同的操作系统,Java和应用程序服务器版本
具有相同的内存配置(JVM和物理内存)(推荐)
配置相同的时区(并保持当前时间同步)。使用ntpd或类似的服务是确保这一点的好方法。
您必须确保节点上的时钟不会发散,因为它可能会导致群集出现一系列问题。
内存要求
汇流节点
我们建议每个Confluence节点至少有10GB的RAM。大量并发用户意味着将消耗大量RAM。
以下是如何在不同大小的计算机上分配内存的一些示例:
内存每个Confluence节点的细分
10GB2GB用于操作系统和实用程序
4GB用于Confluence JVM(-Xmx 3GB)
2GB用于外部进程池(2个沙箱,每个-Xmx 512MB)
2GB用于Synchrony
16 GB2GB用于操作系统和实用程序
10GB用于Confluence JVM(-Xmx 8GB)
2GB用于外部进程池(2个沙箱,每个-Xmx 512MB)
2GB用于Synchrony
Confluence应用程序的最大堆(-Xmx)在setenv.sh或setenv.bat文件中设置。应为数据中心增加默认值。我们建议保持最小(Xms)和最大(Xmx)堆的值相同。
外部进程池用于外部化内存密集型任务, 以最大限度地减少对各个Confluence节点的影响。这些流程由Confluence管理。使用系统属性设置每个进程(沙箱)的最大堆(-Xmx)以及池中的进程数。 在大多数情况下,默认设置就足够了,您无需执行任何操作。
独立同步群集节点
协作编辑需要同步。默认情况下,它由Confluence管理,但您可以选择在其自己的群集中运行Synchrony。
如果您确实选择运行自己的Synchrony群集,我们建议允许2GB内存用于独立同步。这是一个如何在专用的Synchrony节点上分配内存的示例。
物理RAM每个Synchrony节点的细分
4GB2GB用于操作系统和实用程序
2GB用于Synchrony JVM(-Xmx 1GB)
数据库
群集数据库最重要的要求是它有足够的连接可用于支持节点数。
例如,如果:
每个Confluence节点的最大池大小为20个连接
每个Synchrony节点的最大池大小为15个连接(默认值)
您计划运行3个Confluence节点和3个Synchrony节点
您的数据库服务器必须至少允许105个连接到Confluence数据库。实际上,出于调试或管理目的,您可能需要超过最小值。
您还应确保在当前支持的平台中列出您的目标数据库 。平均群集解决方案的负载高于独立安装,因此使用受支持的数据库至关重要。
您还必须使用支持的数据库驱动程序。如果您使用的是不受支持的或自定义的JDBC驱动程序(或者driverClassName在JNDI数据源连接的情况下),则协作编辑将失败并显示错误 。
共享主目录和存储要求
所有Confluence集群节点都必须能够访问同一路径中的共享目录。支持NFS和SMB / CIFS共享作为共享目录的位置。由于此目录将包含大量数据(包括附件和备份),因此应该具有足够的大小,并且您应该制定计划,以便在需要时增加可用磁盘空间。
负载平衡器
我们建议您使用最熟悉的负载均衡器。负载均衡器需要支持“会话亲和性”和WebSockets。这是Confluence和Synchrony都需要的。如果您在AWS上部署,则需要使用应用程序负载均衡器(ALB)。
以下是配置负载均衡器时的一些建议:
负载均衡器处的队列请求。通过确保提供给节点的最大请求数不超过Tomcat可以接受的http线程总数,可以避免压倒一个节点的请求数超出其处理能力。你可以查看maxThreads<install-directory>/conf/server.xml。
不要在其他节点上重放失败的幂等请求,因为这会非常快速地在所有节点上传播问题。
使用最少连接 作为负载平衡方法而不是循环,可以在节点加入群集或移除后重新加入时更好地平衡负载。
许多负载均衡器需要URL来不断检查其后端的运行状况,以便自动将其从池中删除。为此使用稳定且快速的URL非常重要,但要足够轻便,不要消耗不必要的资源。以下URL返回Confluence的状态,可用于此目的。
网址预期内容预期的HTTP状态
HTTP:// <confluenceurl> /status{ “status”: “RUNNING”}200OK
在设置监控时,以下是一些建议可以帮助节点解决小问题,例如长时间的GC暂停:
在删除节点之前等待连续两次失败。
在从池中删除节点之前,允许与节点的现有连接完成,例如30秒。
网络适配器
使用单独的网络适配器进行服 群集节点应具有单独的物理网络(即单独的NIC),用于服务器间通信。这是使群集快速可靠地运行的最佳方法。如果通过具有大量其他数据流的网络连接群集节点,则可能会出现性能问题。
协作编辑的附加要求
Confluence 6.0及更高版本中的协作编辑由Synchrony提供支持,它作为一个单独的进程运行。
如果您拥有Confluence数据中心许可证,则有两种方法可用于运行Synchrony:
由Confluence管理(推荐)
Confluence将在同一节点上自动启动Synchrony进程,并为您管理。无需手动设置。
独立同步集群(由您管理)
您可以根据需要在自己的集群中部署和管理Synchrony独立节点。需要进行重大设置。
如果您想要简单的设置和维护,我们建议您允许Confluence为您管理Synchrony。如果您想要完全控制,或者确保编辑器具有高可用性是必不可少的,那么在自己的集群中管理Synchrony可能是您组织的正确解决方案。
高可用性的附加要求
Confluence数据中心将应用程序服务器作为单点故障删除。通过确保负载均衡器,数据库和共享文件系统也具有高可用性,您可以进一步最小化单点故障。