JIRA Data Center 설치
본 설치 가이드는 Jira software 8.13.0 기준으로 작성 되었습니다.
사전 준비
NFS 설정 - NFS 설정 참조
Apache Load Balancer 설정(root 계정 - Ubuntu 설정)
$ 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 참조
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
인스턴스 종료
$ cd /opt/datacenter/atlassian/jira/bin $ ./stop-jira.sh
Apache 연결 정보 입력
$ cd /opt/datacenter/atlassian/jira/conf $ vi server.xml ## proxyName, proxyPort, scheme 값 입력 ''' <Connector port="7180" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" 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
cp -R /home/datacenter/atlassian/jira/{data,plugins,logos,import,export,caches} /home/share/atlassian/jira
JIRA 홈디렉토리에 파일 생성 - 공유폴더와 node 아이디 설정
$ cd /home/datacenter/atlassian/jira $ vi cluster.properties --------------------------- jira.node.id = node1 jira.shared.home = /home/share/atlassian/jira ehcache.listener.hostName = twoseed-server ---------------------------
Install, Home directory 백업 및 node2에 복사
$ cd /opt/datacenter/atlassian $ tar cvfz jira_install.tgz jira/ $ cd /home/datacenter/atlassian $ tar cvfz jira_home.tgz jira/
2. JIRA node2 설정
node1의 백업 파일 동일 위치에 압축 풀기
$ cd /opt/datacenter/atlassian $ tar xvfz jira_install.tgz $ cd /home/datacenter/atlassian $ tar xvfz jira_home.tgz
JIRA 홈디렉토리 파일 수정 - 공유폴더와 node 아이디 설정
$ 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 인스턴스 시작
$ cd /opt/datacenter/atlassian/jira/bin $ ./start-jira.sh
JIRA node2 인스턴스 시작
$ cd /opt/datacenter/atlassian/jira/bin $ ./start-jira.sh
Apache 서버에 적용한 URL 접속
Administrator > System > Clustering 에서 각 node 상태 확인 가능
Trouble Shooting
클러스터링에서 Node가 하나만 올라와 있는 경우
atlassian-jira.log에서 아래와 같이 에러 발생
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)과 동일하게 입력>