集群

到目前为止,我们的 Jira 实例是在独立模式下运行的,这意味着它是在为自己的所有请求提供服务,还没有启用集群功能。在集群中运行 Jira 的一些主要优势如下:

  • 提高规模性能:通过运行具有多个节点的集群,Jira 为并发用户请求提供服务的能力大大提高,从而缩短了响应时间并提高了整体用户满意度。

  • 高可用性和故障切换:在集群中运行多个节点后,如果任何单个节点因故不可用,集群中的其它节点可以继续为用户提供服务,从而避免停机。

  • 零停机升级:通常,当您需要升级 Jira 时,过程中会涉及停机。在运行 Jira 集群时,您可以一次单独升级每个节点,这样集群中的其它节点就可以继续为用户提供服务。

要配置 Jira 在群集中运行,必须执行以下操作:

  1. 创建一个共享文件主目录,供两个节点访问。

  2. 将集群配置添加到我们当前的 Jira 实例。

  3. 添加另一个 Jira 实例作为集群的第二个节点。从技术上讲,您可以拥有一个单节点集群,但在本练习中,我们将为集群添加另一个节点,以便您可以看到集群的运行情况。

  4. 添加并配置一个负载均衡器,将传入流量分配到两个节点。

现在我们知道了在集群中运行 Jira 所需的条件,让我们开始准备吧!

为集群做准备

启用群集的第一步是准备好所需的硬件。对于 Jira 群集,您将拥有以下组件:

  • 负载均衡器:可以是任何支持会话亲和性(粘性会话, sticky session)的负载均衡器,如 Apache 和 nginx。

  • Jira 实例节点:这将包含作为集群一部分的独立 Jira 实例。

  • 数据库:这与您用于独立部署的数据库相同。请注意,由于所有 Jira 节点都将共享同一个数据库,因此内存 H2 数据库将无法在集群中使用。

  • 共享文件驱动器:Jira 集群需要有一个所有 Jira 节点都能读写的共享主目录。

理想情况下,前面列出的每个组件都应运行在自己的服务器上,因此对于双节点集群,您至少需要三台服务器和一个共享网络驱动器。您可以在同一台服务器上运行多个 Jira 节点,但只能出于评估目的这样做,因为这样做会降低集群的优势。

为 Jira 节点准备服务器时,需要确保以下几点:

  • 所有节点服务器位于同一数据中心或区域(对于 AWS 和 Azure 等云计算供应商而言)

  • 软件和硬件规格相同,包括内存、操作系统和 Java 版本

  • 所有节点运行相同版本的 Jira

  • 节点已配置为位于同一时区

创建 JIRA_SHARED_HOME

第一步是创建一个新目录,群集可在其中存储其数据文件。我们将把该目录称为 JIRA_SHARED_HOME。这可以是一个允许所有 Jira 节点读写的网络驱动器。将下列目录从独立 Jira 实例的 JIRA_HOME 目录复制到新的共享目录:

  • data

  • plugins

  • logos

  • import

  • export

  • caches

启用集群

第二步是为第一个 Jira 节点启用群集。具体做法是在其本地 JIRA_HOME 目录中添加一个新的 cluster.properties 文件。

  1. 关闭您的 Jira 独立实例。

  2. 创建一个名为 cluster.properties 的新文件。

  3. 将以下行添加到文件中:

    # This ID must be unique across the cluster
    jira.node.id = node1
    # The location of the shared home directory for all Jira nodes
    jira.shared.home = /location/to/the/shared/jira_cluster_home
    # The following lines are needed if you want to run
    multiple nodes on the same server
    ehcache.listener.hostName=localhost
    ehcache.listener.port=40001
    ehcache.object.port = 40021
  4. 启动 Jira。

将节点添加到负载均衡器

随着第一个群集节点的启动和运行,我们可以添加另一个节点。我们需要将该节点添加到负载均衡器,以便负载均衡器开始向其路由流量。具体配置会有所不同,这取决于负载均衡器的使用。下面是一个使用 Apache 的示例:

<Proxy balancer://jiracluster>
# Jira node 1
BalancerMember http://jira1.internal.atlassian.com:8080 route=node1
# Jira node 2, add this when we have the 2nd node up and running
# BalancerMember http://jira2.internal.atlassian.com:8080 route=node2
# Load Balancer Settings
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID
</Proxy>

请注意,对于 Apache,您需要启用 proxy_balancer_module 模块。

向集群添加新节点

要将新节点添加到集群,请执行以下步骤:

  1. 将现有 Jira 实例中的 JIRA_HOME 目录复制到新节点服务器。

  2. 在新服务器上安装新的 Jira 实例。

  3. 编辑 cluster.properties 文件并更改 jira.node.id 值。

  4. 将新节点添加到负载均衡器。

  5. 启动新的 Jira 节点。

如果在同一台服务器上运行第二个节点,还需要更改 cluster.properties 文件中的 ehcache.listener.portehcache.object.port 的端口号,以及 server.xml 文件中的端口号,如 更改 Jira 的端口号和上下文路径 部分所述。

这样,双节点 Jira 集群就可以运行了。现在,登录 Jira 并进入 管理工具|系统|集群,就会看到列出的两个节点,其中当前为您服务的节点以粗体标出,如图所示:

image 2023 11 27 16 17 39 448
Figure 1. Figure 1.21 – Cluster nodes in Jira

在此页面上,您可以看到群集中的所有节点及其状态。如果某个节点出现反应迟钝或负载过重的情况,这对帮助您排除集群故障非常有用。