引言
随着敏捷哲学的传播,俄罗斯的IT专家每年都在针对开发团队的产品定制和管理领域获得越来越多的专业知识和能力,其中最受欢迎的仍然是Jira。 但是,使用最古老,生产力最高且最易访问的版本-Jira数据中心-仍然引起很多问题。 在本文中,我将讨论我们在实践中应用的Jira DataCenter的一些原理和机制。 我将从关于Jira集群的结构的故事开始。
什么是Jira数据中心?
Jira DataCenter本质上是服务器版本,但具有使用公共数据库和共享索引的能力。
重要的是要了解,Jira DataCenter本身(作为产品和应用程序)
不提供容错能力和负载平衡。 模块和系统对此负责,而Atlassian产品与之无关。
换句话说,Atlassian提供了在集群中工作的支持,但是集群本身是通过外部手段来实现的,选择的方式非常丰富。
详细的产品说明可
在Atlassian网站上找到 。
有几种构造选项:
1.在自己的基础架构上
2.在Amazon Cloud(AWS)上
3.在MS(Azure)的云中
本文将介绍您自己的基础结构的解决方案。
Jira DataCenter解决了哪些问题?
Jira数据中心可帮助您实现以下目标:
- 实行容错。
- 确保在高负载下稳定运行。 根据《 Jira Sizing Guide》 ,高负载是指大型/企业级实例。
- 在需要维护时确保连续运行。 在这一点上,我将分别居住。 该应用程序经常需要更新,并且并非所有公司都有能力对用户快速而无形地执行此操作。 通过聚类并使用所谓的零停机时间更新方案可以解决此问题。
这些问题通过群集和可伸缩体系结构解决。
Jira数据中心的组成部分是什么?
如下图所示,Jira DataCenter集群是几台专用计算机的集合。
图1. Jira数据中心架构- 应用程序节点(应用程序节点或群集节点)。 他们接受并处理所有工作量和请求。 节点的角色由具有相同内容和已安装应用程序以及已安装的共享文件系统的普通服务器扮演。
- 具有标准功能的文件系统(共享文件系统),用于导入/导出文件,插件,缓存等。 文件服务器还是在其上创建共享文件夹或资源的单独服务器,该服务器被安装到节点上并用于共享文件。
- 共享数据库 在这种情况下,数据库服务器也是一个单独的服务器,可以在MS SQL,PostgreSQL,MySQL,Oracle上构建。
- 负载均衡器 它分发用户请求并将其传送到节点,如果其中一个失败,则平衡器几乎立即将其请求重定向到其他节点。 由于其工作,用户甚至没有注意到一个节点的故障。 下面我们将分别讨论平衡器的工作。
Jira数据中心集群拓扑
我将给出在JDC中构建集群的基本原理:
- Jira实例共享一个公共数据库;
- Lucene索引可以实时复制并按实例本地存储;
- 附件存储在公共存储库中;
- Jira实例监视缓存一致性;
- 在任何时候都可以同时激活多个实例;
- 群集锁可用;
- 平衡器配置为仅将请求重定向到活动节点,而不应将请求转发到非活动节点,也不能将所有会话都寻址到一个节点。
所有节点分为主动和被动。 活动节点的不同之处在于:
- 处理要求
- 执行后台流程和任务
- 可以在一个或多个任务上配置计划任务。
- 在所有实际情况下,情况看起来都像使用标准的Jira Server。 因此,被动节点不处理请求且不执行任务,而是用于承担短期工作负载(例如,在系统启动,加载插件和/或索引时)。
下图显示了Jira集群的操作
图2.架构简化图关于负载均衡器
平衡器可以是安装了反向代理的任何服务器或物理设备。 我将举一些最著名的平衡器例子。
1.硬件平衡器:
•思科
•杜松
•F5
2.软件平衡器:
•mod_proxy(Apache)-Apache HTTP Server的代理服务器,支持最流行的协议和几种不同的负载平衡算法。
•Varnish是反向HTTP代理服务器和加速器,专为高流量站点设计。 与其他服务器不同,它只是HTTP流量的代理服务器和负载平衡器。 特别是,Varnish使用Wikipedia,NY Times,The Guardian和许多其他大型项目。
•Nginx-在负载均衡器和高流量站点的代理解决方案中,排名第一的Web服务器。 它正在积极开发中,制造商提供了免费的公司版本。 在世界上许多访问量最大的网站上使用,例如WordPress.com,Zynga,Airbnb,Hulu和MaxCDN。
•Nginx Plus-实际上是上述的Nginx付费企业版。
•HAProxy是一个免费的开源工具,可为TCP / HTTP协议提供负载平衡和代理功能。 它速度快,消耗的系统资源很少,与Linux,Solaris,FreeBSD和Windows兼容。
在此链接上可以找到代理服务器的良好比较。
正反代理
负载平衡器既可以充当直接代理,也可以充当反向代理。 关于stackoverflow的
此评论的作者很好地描述了这种差异:
1.“转发代理”(Forward proxy)。 在这种情况下,代理事件是“直接代理”代表原始请求者从另一个网站检索数据。 作为示例,我将列出连接到Internet的三台计算机。
X = Internet上的计算机或客户端计算机
Y =代理网站,proxy.example.org
Z =您要访问的网站是
www.example.net通常,您可以直接从X-> Z连接。但是,在某些情况下,最好代表X代表Y-> Z,这在链中看起来像这样:X-> Y->Z。
2.“反向代理”(Reverse proxy)。 想象同样的情况,只有站点Y配置了反向代理。 通常,您可以直接从X-> Z连接。但是,在某些情况下,Z的管理员最好限制或禁止直接访问,并强制访问者首先通过Y,因此,像以前一样,我们代表Y-> Z接收数据。 X,如下所示:X-> Y->Z。
这种情况与“直接代理”不同,因为用户X不知道他正在访问Z,因为用户X看到他正在与Y交换数据。服务器Z对客户端不可见,并且只有外部代理服务器Y在外部可见。 反向代理不需要客户端配置。 客户X认为他仅与Y交互(X-> Y),但实际情况是Y重定向了整个连接(再次X-> Y-> Z)。
接下来,我们将考虑使用软件平衡器。
选择哪个软件平衡器?
根据我们的经验,Nginx是软件平衡器中的最佳选择,因为它支持Sticky会话模式,并且也是最常用的Web服务器之一,这意味着良好的文档编制和在IT专家之间的广泛欢迎。
粘性会话是一种负载平衡方法,其中客户端请求被发送到同一组服务器。 Nginx的粘性方法使用Cookie进行平衡,但仅限于商业版本。 但是有一种免费的方法-使用外部模块。
该模块创建一个cookie,从而使每个浏览器都是唯一的。 接下来,使用cookie将请求重定向到同一服务器。 如果没有cookie(例如,在第一个请求上),则服务器是随机选择的。
您可以在
此链接以及
此Habrapost中阅读有关粘性方法的更多信息。
现在,让我们继续实践部分...
创建Jira DataCenter集群的说明
对于集群,可以使用已安装Jira的现有实例,也可以使用新实例。 在我们的示例中,将描述在不同操作系统上安装新实例的过程(以演示系统的多功能性)。
1.让我们从数据库服务器开始。 您可以使用现有的,也可以创建一个新的。 同样,为说明起见,选择了Windows Server 2016 + PostgreSQL 9.4。 安装操作系统,安装PG服务器,安装PG Admin,添加用户和数据库。
2.在Ubuntu 16.04 LTS OS上创建第一个节点。 安装必要的软件包,存储库更新。
3.
下载并安装Jira DataCenter,启动并配置数据库(以防万一,Atlassian有详细的
指南 )。
4.关闭Jira,关闭节点。
服务吉拉站5.为了进行进一步的操作,最好暂时禁用Jira自动运行:
update-rc.d -f jira删除6.我们克隆关闭的节点。
7.启动第一个节点,关闭Jira(默认情况下,安装后的Jira设置为自动运行)。
8.运行第二个节点,关闭Jira。
9.为平衡器创建一个单独的实例。 我选择Ubuntu 16.04是因为 它非常快速,简单,并且不需要许可证形式的额外费用。
10.安装nginx(示例使用的版本1.13.4)。
11.下载并解压缩nginx-sticky-module-ng:
git克隆
bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git12.准备要
重新编译和添加模块的nginx。
13.使用nginx-sticky-module-ng模块编译nginx。 就我而言,编译行结果如下:
./configure --prefix = / etc / nginx --sbin-path = / usr / sbin / nginx --modules-path = / usr / lib / nginx / modules--conf-path = / etc / nginx / nginx。 conf --error-log-path = /var/log/nginx/error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx。 pid --lock-path = /var/run/nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var /缓存/ nginx / fastcgi_temp --http-uwsgi-temp-path = / var /缓存/ nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx --group = nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module- -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_sl_module_with_module -with-http_sub_module --with-ht tp_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt ='-g -O2 -fstack-protector-参数= ssp缓冲区大小= 4 -Wformat -Werror =格式安全-Wp,-D_FORTIFY_SOURCE = 2 -fPIC'--with-ld-opt ='-Wl,-Bsymbolic函数-Wl,-z,relro -Wl,-z,现在-Wl,-根据需要-pie'--add-module = / usr / local / src / nginx-sticky-module-ng14.找到文件/etc/nginx/nginx.conf,将其复制到.bak,
将 nginx
配置为反向代理模式。
15.接下来,我们需要一个文件服务器(最好也是容错的)。 例如,我选择了Windows服务器,在其中
创建了 NFS球。
16.在每个节点上,我们为NFS支持安装软件包:
apt-get install nfs-common17.创建/ media / jira文件夹并执行:
chmod -R 0777 /媒体/吉拉18.将NFS球挂载为共享球(不是将其挂载在根文件夹中,而是例如在/ media / jira中)-EVERY NODE
19.1。 此外,可以执行任何一种手动安装(单个):
须藤安装-t nfs -O uid = 1000,iocharset = utf-8 xx.xx.xx.xx:/ jira / media / jira其中xx.xx.xx.xx是带有NFS球的服务器的IP地址
19.2。 或立即自动安装(在操作系统启动时):
mcedit /等/ fstab最后,您需要添加以下行:
192.168.7.239:/jira / media / jira nfs用户,rw 0 0然后保存并退出。
20.分配ID:第一个node1节点,第二个node2节点,依此类推。
#此ID在整个集群中必须唯一
jira.node.id = node1
#所有Jira节点的共享主目录的位置
jira.shared.home = /媒体/吉拉21.在第一个节点上运行jira
服务吉拉开始检查:
转到系统->系统信息->查找集群ON和节点号。
22.设置nginx平衡
23.自 以前我们在节点上禁用了Jira自动启动,然后可以使用以下命令启用它:
update-rc.d -f jira启用24.我们检查集群的运行并根据需要添加节点。
集群启动顺序
1.启用共享文件系统服务器
2.启用负载均衡器
3.启用节点1
4.启用node2
5. ...
集群停止顺序
1.使用service Jira stop命令在两个节点上停止Jira
2.关闭节点2
3.关闭节点1
4.关闭负载均衡器
5.关闭文件系统服务器
就这些...
当然,所描述的方法不是唯一的真实方法。 这只是一种实现方式。
我感谢我的同事们在准备材料方面的帮助。
发表评论,提出问题,并感谢您的关注。