Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
Info

본 설치 가이드는 Jira software 8.13.0 기준으로 작성 되었습니다.

사전 준비

  1. NFS 설정 - NFS 설정 참조

  2. Apache Load Balancer 설정(root 계정 - Ubuntu 설정)

    Code Block
    languagebash
    $ cd /etc/apach2/sites-available
    $ sudo a2enmod headers proxy_balancer proxy_http proxy lbmethod_byrequests slotmem_shm    ## 모듈 활성화
    $ vi dcjira.twoseed.co.kr.conf    ## 원하는 이름으로 .conf 파일 생성
    ---------------------------
    <VirtualHost *:80>
            ServerName dcjira.twoseed.co.kr
            Header add Set-Cookie  "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"  env=BALANCER_ROUTE_CHANGED
            <Proxy balancer://jiracluster>
                    BalancerMember http://***.***.48.220:7180 route=node1
                    BalancerMember http://***.***.124.236:7180 route=node2
                    
                    Order Allow,Deny
                    Allow from dcjira.twoseed.co.kr
                    Satisfy Any
            </Proxy>
            ProxyPass / balancer://jiracluster/ stickysession=ROUTEID
    </VirtualHost>
    ----------------------------
    $ sudo a2ensite dcjira.twoseed.co.kr.conf     ## 사이트 활성화
    $ sudo service apache2 reload     ## apach 서버 다시 시작

JIRA Data Center 설정

1. JIRA node1 설정

  • 새 인스턴스 설치 - Jira Linux Installation 참조

    Code Block
    jira Data Center 설치 정보
    node1 : twoseed-server(ubuntu)
    node2 : twoseed-centos
    install path : /opt/datacenter/atlassian/jira
    local home path : /home/datacenter/atlassian/jira
    shared home path : /home/share/atlassian/jira
    port : 7180/7105
    db : dcjiradb/dcjiradbuser/dcjiradbuser
    service ID : twoseed
  • 인스턴스 종료

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian/jira/bin
    $ ./stop-jira.sh
  • Apache 연결 정보 입력

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian/jira/conf
    $ vi server.xml    ## proxyName, proxyPort, scheme 값 입력
    '''
      <Connector port="7180" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
                       maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false"
                       maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443"
                       acceptCount="100" disableUploadTimeout="true" bindOnInit="false"
                       proxyName="dcjira.twoseed.co.kr" proxyPort="80" scheme="http"/>
    '''
  • 공유폴더에 아래 폴더 복사

    • data, plugins, logos, import, export, caches

      Code Block
      languagebash
      cp -R /home/datacenter/atlassian/jira/{data,plugins,logos,import,export,caches} /home/share/atlassian/jira
  • JIRA 홈디렉토리에 파일 생성  - 공유폴더와 node 아이디 설정

    Code Block
    languagebash
    $ cd /home/datacenter/atlassian/jira
    $ vi cluster.properties
    ---------------------------
    jira.node.id = node1
    jira.shared.home = /home/share/atlassian/jira
    ehcache.listener.hostName = twoseed-server
    ---------------------------
Expand
titleCluster.properties 파일 매개 변수

매개 변수

필수

설명 / 값

jira.node.id

이 고유 ID는 아파치 구성의 사용자 이름과 밸런서멤버 항목과 일치해야 함

jira.shared.home

모든 Jira 노드에 대한 공유 홈 디렉토리의 위치

ehcache.peer.discovery

아니오

노드가 서로를 찾는 방법 설명:

기본값 – Jira가 노드를 자동으로 검색(권장)
자동 – EhCache의 멀티캐스트 검색을 사용. EhCache가 사용하는 역사적 방법이지만 구성이 어려울 수 있으며, 아틀라시안에서는 권장하지 않음.

Expand
title자동을 선택하면...

ehcache.peer.discovery = automatic을 설정하는 경우 다음 매개 변수를 설정:

* ehcache.multicast.address
* ehcache.multicast.port
* ehcache.multicast.timeToLive
* ehcache.multicast.hostName

매개 변수에 대한 자세한 내용은 Ehcache 설명서를 참조

ehcache.listener.hostName

아니오

캐시 통신을 위한 현재 노드의 호스트 이름. 매개 변수가 설정되지 않은 경우 Jira Data Center에서 내부적으로 확인한다.
네트워크의 호스트 이름을 확인하는데 문제가 있는 경우 이 매개 변수를 설정.

ehcache.listener.port

아니오

노드가 수신할 포트(기본값은 40001)

여러 노드가 동일한 호스트에 있거나 이 포트를 사용할 수 없는 경우 이 매개 변수를 수동으로 설정해야 할 수 있다.

ehcache.object.port

아니오

레지스트리에서 바인딩된 원격 개체가 호출을 수신하는 포트(기본값은 40011).

여러 노드가 동일한 호스트에 있거나 이 포트를 사용할 수 없는 경우 이 매개 변수를 수동으로 설정해야 할 수 있다.

ehcache.listener.socketTimeoutMillis

아니오

기본적으로 이 값은 EhCache 기본값으로 설정

  • Install, Home directory 백업 및 node2에 복사

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian
    $ tar cvfz jira_install.tgz jira/
    $ cd /home/datacenter/atlassian
    $ tar cvfz jira_home.tgz jira/

2. JIRA node2 설정

  • node1의 백업 파일 동일 위치에 압축 풀기

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian
    $ tar xvfz jira_install.tgz
    $ cd /home/datacenter/atlassian
    $ tar xvfz jira_home.tgz
  • JIRA 홈디렉토리 파일 수정 - 공유폴더와 node 아이디 설정

    Code Block
    languagebash
    $ cd /home/datacenter/atlassian/jira
    $ vi cluster.properties
    ---------------------------
    jira.node.id = node2
    jira.shared.home = /home/share/atlassian/jira
    ehcache.listener.hostName = twoseed-centos
    ---------------------------

3. JIRA node1 과 JIRA node2 인스턴스 실행

  • JIRA node1 인스턴스 시작

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian/jira/bin
    $ ./start-jira.sh
  • JIRA node2 인스턴스 시작

    Code Block
    languagebash
    $ cd /opt/datacenter/atlassian/jira/bin
    $ ./start-jira.sh
  • Apache 서버에 적용한 URL 접속

    Image Added
  • Administrator > System > Clustering 에서 각 node 상태 확인 가능

    Image Added

Trouble Shooting

클러스터링에서 Node가 하나만 올라와 있는 경우

atlassian-jira.log에서 아래와 같이 에러 발생

Code Block
localhost-startStop-1 ERROR      [c.a.jira.upgrade.PluginSystemLauncher] A fatal error occured during initialisation. JIRA has been locked.
com.atlassian.jira.InfrastructureException: Error occurred while starting Plugin Manager. Unable to resolve component: interface com.atlassian.plugin.SplitStartupPluginSystemLifecycle
...
	at com.atlassian.jira.cluster.distribution.JiraCacheManagerPeerProvider.lambda$wrapCachePeer$4(JiraCacheManagerPeerProvider.java:112)
Caused by: java.rmi.NoSuchObjectException: no such object in table
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
	at net.sf.ehcache.distribution.RMICachePeer_Stub.getName(Unknown Source)

setenv.sh 에 아래 구문 추가

-Djava.rmi.server.hostname=<호스트네임(ehcache.listener.hostName)과 동일하게 입력>

...