集群

到目前为止,我们的 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.port 和 ehcache.object.port 的端口号,以及 server.xml 文件中的端口号,如 更改 Jira 的端口号和上下文路径 部分所述。

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

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

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