Jira DataCenter - o que é isso? Como isso funciona? Como implantar?

1. Introdução


Com a difusão da filosofia Agile, os especialistas em TI russos a cada ano ganham cada vez mais conhecimento e competências no campo da personalização e gerenciamento de produtos para equipes de desenvolvimento, a mais popular delas ainda é Jira. No entanto, trabalhar com a versão mais antiga, mais produtiva e altamente acessível - Jira Data Center - ainda levanta muitas questões. Neste post, falarei sobre alguns dos princípios e mecanismos do Jira DataCenter que aplicamos na prática. Começarei com uma história sobre a estrutura do cluster Jira.

O que é um Jira DataCenter?


O Jira DataCenter é essencialmente uma versão de servidor, mas com a capacidade de usar um banco de dados comum e um índice compartilhado.

É importante entender que o próprio Jira DataCenter, como produto e aplicativo, NÃO fornece tolerância a falhas e balanceamento de carga. Módulos e sistemas são responsáveis ​​por isso, com os quais o produto Atlassian não tem relação.

Em outras palavras, o Atlassian fornece suporte para trabalhar em um cluster, mas o próprio cluster é implementado por meios externos, cuja escolha é bastante rica.

Descrições detalhadas dos produtos estão disponíveis no site da Atlassian .

Existem várias opções de construção:

1. Infraestrutura própria
2. Na Amazon Cloud (AWS)
3. Na nuvem do MS (Azure)

Este artigo descreve uma solução para sua própria infraestrutura.

Quais problemas o Jira DataCenter resolve?


O Jira Data Center ajuda você a alcançar os seguintes objetivos:

  1. Implementação de tolerância a falhas.
  2. Garantindo operação estável sob alta carga. Carga alta refere-se a instâncias de grande porte / escala corporativa, de acordo com o Guia de dimensionamento da Jira .
  3. Garantir a operação contínua quando a manutenção é necessária. Neste ponto, vou morar separadamente. O aplicativo geralmente precisa ser atualizado e nem todas as empresas têm a capacidade de fazer isso de forma rápida e invisível aos usuários. Esse problema é resolvido agrupando e usando o chamado esquema de atualização de tempo de inatividade zero .

Esses problemas são resolvidos por meio de cluster e uma arquitetura escalável.

Quais são os componentes de um Jira DataCenter?


Como você pode ver na figura abaixo, o cluster do Jira DataCenter é uma coleção de várias máquinas dedicadas.

imagem
Figura 1. Arquitetura do Jira Data Center

  1. Nós do aplicativo (nós do aplicativo ou nós do cluster). Eles aceitam e processam toda a carga de trabalho e solicitações. A função dos nós é desempenhada por servidores comuns, com conteúdo idêntico e aplicativo instalado, além de um sistema de arquivos compartilhado montado.
  2. Sistema de arquivos (sistema de arquivos compartilhado) com recursos padrão para importar / exportar arquivos, plug-ins, cache e assim por diante. Um servidor de arquivos também é um servidor separado no qual uma pasta ou recurso compartilhado é criado, montado em nós e usado para arquivos compartilhados.
  3. Banco de dados compartilhado O servidor de banco de dados também é, nesse caso, um servidor separado e pode ser construído em MS SQL, PostgreSQL, MySQL, Oracle.
  4. Balanceador de carga Ele distribui solicitações do usuário e as entrega para os nós e, se um deles falhar, o balanceador redireciona suas solicitações para outros nós quase que instantaneamente. Graças ao seu trabalho, os usuários nem percebem a falha de um nó. Falaremos abaixo sobre o trabalho do balanceador separadamente.

Topologia de cluster do Jira Data Center


Vou dar os princípios básicos pelos quais um cluster é construído no JDC:

  • Instâncias Jira compartilham um banco de dados comum;
  • O índice Lucene é replicado em tempo real e armazenado localmente por instância;
  • anexos são armazenados em um repositório comum;
  • As instâncias do Jira monitoram a consistência do cache;
  • a qualquer momento, várias instâncias podem estar ativas ao mesmo tempo;
  • bloqueios de cluster estão disponíveis;
  • o balanceador está configurado para redirecionar solicitações apenas para nós ativos, enquanto não precisa redirecionar solicitações para nós inativos, nem pode endereçar todas as sessões para um nó.

Todos os nós são divididos em ativos e passivos. Os nós ativos diferem na medida em que:

  • Solicitações de processo
  • Executar processos e tarefas em segundo plano
  • Tarefas agendadas podem ser configuradas em um ou mais deles.
  • Em todos os cenários práticos, a situação será semelhante ao uso de um servidor Jira padrão. Consequentemente, os nós passivos não processam solicitações e não executam tarefas, mas servem para assumir uma carga de trabalho de curto prazo (por exemplo, na inicialização do sistema, carregando plug-ins e / ou indexação).

A figura abaixo mostra a operação do cluster Jira

imagem
Figura 2. Um diagrama simplificado da arquitetura

Sobre balanceadores de carga


O balanceador pode ser qualquer servidor com um proxy reverso instalado ou um dispositivo físico. Vou dar os exemplos mais famosos de balanceadores.

1. Balanceadores de hardware:

Cisco
• zimbro
• F5

2. Balanceadores de software:

• mod_proxy (Apache) - um servidor proxy para o Apache HTTP Server que suporta os protocolos mais populares e vários algoritmos diferentes de balanceamento de carga.

• O Varnish é um servidor proxy e acelerador HTTP reverso, desenvolvido para sites com alto tráfego. Diferente de outros, é apenas um servidor proxy e balanceador de carga do tráfego HTTP. Em particular, Varnish usa Wikipedia, NY Times, The Guardian e muitos outros grandes projetos.

• Nginx - o servidor web número 1 em popularidade entre balanceadores de carga e soluções de proxy para sites com alto tráfego. Está desenvolvendo ativamente, o fabricante oferece uma versão gratuita e corporativa. Usado em muitos dos sites mais visitados no mundo, por exemplo, WordPress.com, Zynga, Airbnb, Hulu, MaxCDN.

• Nginx Plus - na verdade, a versão corporativa paga acima mencionada do Nginx.

• O HAProxy é uma ferramenta de código aberto gratuita que fornece recursos de balanceamento de carga e proxy para protocolos TCP / HTTP. É rápido e consome poucos recursos do sistema, compatíveis com Linux, Solaris, FreeBSD e Windows.

Uma boa comparação de servidores proxy pode ser encontrada aqui neste link .

Proxies de avanço e reversão


Os balanceadores de carga podem funcionar como proxies diretos e reversos. A diferença foi bem descrita pelo autor deste comentário no stackoverflow:

1. “Proxy de encaminhamento” (Proxy de encaminhamento). O evento de proxy nesse caso é que o "proxy direto" recupera dados de outro site em nome do solicitante original. Como exemplo, darei uma lista de três computadores conectados à Internet.

X = computador ou computador cliente na Internet
Y = site do proxy, proxy.example.org
Z = o site que você deseja visitar é www.example.net
Geralmente, você pode se conectar diretamente de X -> Z. No entanto, em alguns cenários, é melhor Y -> Z em nome de X, que se parece com isso em uma cadeia: X -> Y -> Z.

2. "Proxy reverso" (proxy reverso). Imagine a mesma situação, apenas o site Y está configurado com um proxy reverso. Geralmente, você pode se conectar diretamente de X -> Z. No entanto, em alguns cenários, é melhor o administrador de Z restringir ou proibir o acesso direto e forçar os visitantes a passar por Y primeiro. Assim, como antes, obtemos os dados recebidos por Y -> Z em nome de X, que é o seguinte: X -> Y -> Z.
Esse caso difere do “proxy direto”, pois o usuário X não sabe que está acessando Z porque o usuário X vê que está trocando dados com Y. O servidor Z é invisível para os clientes e apenas o servidor proxy externo Y é visível externamente . O proxy reverso não requer configuração do lado do cliente. O cliente X acredita que ele está apenas interagindo com Y (X -> Y), mas a realidade é que Y redireciona toda a conexão (X -> Y -> Z novamente).

A seguir, consideraremos trabalhar com um balanceador de software.

Qual balanceador de software escolher?


De acordo com a nossa experiência, o Nginx é a melhor escolha entre os balanceadores de software, pois suporta o modo de sessões fixas e também é um dos servidores Web mais usados, o que implica boa documentação e popularidade suficiente entre os especialistas em TI.

Sessão persistente é um método de balanceamento de carga no qual as solicitações do cliente são enviadas para o mesmo servidor de grupo. O Nginx possui um método persistente que usa cookies para equilibrar, mas apenas na versão comercial. Mas existe um caminho livre - o uso de módulos externos.

O módulo cria um cookie e, portanto, torna cada navegador único. Em seguida, um cookie é usado para redirecionar solicitações para o mesmo servidor. Se não houver cookie (por exemplo, na primeira solicitação), o servidor é selecionado aleatoriamente.
Você pode ler mais sobre o método adesivo neste link e neste Habrapost .

E agora, vamos para a parte prática ...

Instruções para criar um cluster do Jira DataCenter


Para armazenamento em cluster, você pode usar uma instância existente com o Jira instalado ou uma nova. Em nosso exemplo, a instalação de novas instâncias em diferentes sistemas operacionais será descrita (para demonstrar a versatilidade do sistema).

1. Vamos começar com o servidor de banco de dados. Você pode usar os existentes e criar um novo. Novamente, por ilustração, o Windows Server 2016 + PostgreSQL 9.4 foi selecionado. Instale o sistema operacional, instale o servidor PG, instale o PG Admin, adicione o usuário e o banco de dados.

2. Crie o primeiro nó no sistema operacional Ubuntu 16.04 LTS. Instale os pacotes necessários, atualizações do repositório.

3. Baixe e instale o Jira DataCenter, inicie, configure o banco de dados (apenas no caso, o Atlassian possui um guia detalhado).

4. Desligue o Jira, desligue o nó.
serviço jira stop

5. Para outras manipulações, é melhor desativar temporariamente a execução automática do Jira:
update-rc.d -f jira remover

6. Clonamos o nó desativado.

7. Inicie o primeiro nó, desative o Jira (por padrão, Jira após a instalação ser configurada para execução automática).

8. Execute o segundo nó, desligue o Jira.

9. Crie uma instância separada para o balanceador. Eu escolhi o Ubuntu 16.04 porque é bastante rápido, simples e não requer custos adicionais na forma de licenças.

10. Instale o nginx (o exemplo usado na versão 1.13.4).

11. Faça o download e descompacte o nginx-sticky-module-ng:
clone do git bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git

12. Prepare o nginx para recompilar e adicionar um módulo.

13. Compile o nginx com o módulo nginx-sticky-module-ng. No meu caso, a linha de compilação ficou assim:
./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 - caminho-do-bloqueio = / var / run / nginx.lock --http-cliente-corpo-temp-caminho = / var / cache / nginx / client_temp --http-proxy-temp-caminho = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / 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-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 - param = ssp-buffer-size = 4 -Wformat -Werror = format-security -Wp, -D_FORTIFY_SOURCE = 2 -fPIC '--with-ld-opt =' - Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, now -Wl, - conforme necessário -pie '--add-module = / usr / local / src / nginx-sticky-module-ng

14. Encontre o arquivo /etc/nginx/nginx.conf, copie-o para .bak, configure o nginx para reverter o modo proxy.

15. Em seguida, precisamos de um servidor de arquivos (de preferência também tolerante a falhas). Por exemplo, escolhi um servidor Windows, onde criei uma bola NFS.

16. Em cada nó, instalamos pacotes para suporte ao NFS:
apt-get install nfs-common

17. Crie a pasta / media / jira e execute:
chmod -R 0777 / media / Jira

18. Monte a bola do NFS como compartilhada (é necessário montá-la não na pasta raiz, mas, por exemplo, em / media / jira) - TODOS OS NÓS

19.1 Além disso, é possível realizar a montagem manual (única):
sudo mount -t nfs -O uid = 1000, iocharset = utf-8 xx.xx.xx.xx: / jira / media / jira
em que xx.xx.xx.xx é o endereço IP do servidor com a bola NFS

19.2 Ou montagem automática imediatamente (na inicialização do SO):
mcedit / etc / fstab
No final, você precisa adicionar a linha:
192.168.7.239:/jira / media / jira usuário nfs, rw 0 0
Salve e saia.

20. Designe ID: o primeiro nó node1, no segundo nó node2, e assim por diante.
#Este ID deve ser exclusivo em todo o cluster
jira.node.id = node1
#A localização do diretório inicial compartilhado para todos os nós do Jira
jira.shared.home = / media / jira

21. Execute o jira no primeiro nó
serviço jira start
verifique:
vá para sistema -> informações do sistema -> procure o cluster LIGADO e o número do nó.

22. Configure o balanceamento nginx

23. Desde anteriormente desabilitamos o Jira autostart nos nós, então podemos habilitá-lo com o comando:
update-rc.d -f jira enable

24. Verificamos a operação do cluster e adicionamos nós conforme necessário.

Ordem inicial do cluster


1. Ative o servidor do sistema de arquivos compartilhados
2. Ative o balanceador de carga
3. Ative o node1
4. Ative o node2
5. ...

Ordem de parada do cluster


1. Pare o Jira nos dois nós com o comando service Jira stop
2. Desligue o nó 2
3. Desligue o nó 1
4. Desligue o balanceador de carga
5. Desligue o servidor do sistema de arquivos

Isso é tudo ...


Obviamente, o método descrito não é o único verdadeiro. Esta é apenas uma maneira de implementação.

Expresso minha gratidão aos meus colegas pela ajuda na preparação do material.
Comente, faça perguntas e obrigado por sua atenção.

Source: https://habr.com/ru/post/pt433904/


All Articles