하나의 Batch 서버에 모든 Job을 수행할 수 없는 경우  여러 대의 Batch 서버를 Slave 로 추가하고, 다수의 Slave가 Job을 분산 수행하도록 설정해야 한다.

Hudson은 이와 같은 기능을 쉽게 사용할 수 있도록 지원한다. Hudson Master는 SSH, JNLP, Window service 등의 프로토콜을 사용하여 각 서버에 Slave Agent 를 설치하는 방법을 제공한다. 나는 리눅스 SSH를 선택하여 진행하였다.

 

<패스워드 없이 SSH 연결>

SSH 연결시 매번 패스워드 연결이 지저분할 수 있다. 따라서 공인키를 상대방 서버에 복사하게 하여 서로 접속이 편하도록 했다. 이런 스타일은 패스워드 없이 SSH 연결을 쉽게 할 수 있다.


1.master101(master) 로 root 로 접속

# rlogin -l root master101

 

2./etc/ssh/sshd_config 파일 수정
아래 코드가 #(주석화) 되어 있는데 주석을 풀고 수정

# sudo vi /etc/ssh/sshd_config


RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

sshd 데몬을 재시작하는지 잘 확인

# sudo /sbin/service sshd restart

netd 재시작 : [ OK ]

xinetd 재시작 : [ OK ]

 

3. ssh 연결하는 slave 를 저장하고 로그 아웃

# sudo vi /etc/hosts

1.1.1.3 slave103

1.1.1.4 yagbat104

# logout

 


4.www계정으로 재접속

# rlogin -l www master101

 

5.인증키 생성

# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/www/.ssh/id_rsa): 엔터

Created directory '/home/www/.ssh'.

Enter passphrase (empty for no passphrase): 엔터

Enter same passphrase again: 엔터

Your identification has been saved in /home/www/.ssh/id_rsa.

Your public key has been saved in /home/www/.ssh/id_rsa.pub.

The key fingerprint is:

dd:75:8c:e8:f7:c3:07:4c:00:12:33:d0:08:c5:63:08 www@master101

 

6.생성된 인증키를 확인하고 해당 공개키를 사용할 수 있도록 authorized_keys 파일에 생성한 키값을 추가한다.

# cd ~/.ssh/

# cp -RfpP id_rsa.pub authorized_keys

그리고, 이 공개키(id_rsa.pub)를 상대서버에 복사만 하면 되는 구조이다.

# cat id_rsa.pub

ssh-rsa … www@master101

authorized_keys의 파일 권한 변경

# chmod 600 authorized_keys

 

7.root계정으로 slave103(slave #1)로 접속

rlogin -l root slave103

 

8./etc/ssh/sshd_config파일 수정 (2번 과정을 실행)하고..

# sudo vi /etc/ssh/sshd_config

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

 

9. /etc/ssh/sshd_config 파일 timeout 설정
slave 에서 ssh timeout을 설정하여 slave의 dissconnect 이 가능하도록 설정

ClientAliveInterval 10

ClientAliveCountMax 12

 

10.sshd 데몬을 재시작

# sudo /sbin/service sshd restart

 

9. master101(master) 연결할 수 있도록 서버 설정 하고, log out

# sudo vi /etc/hosts

1.1.1.1 master101

# logout

 

11.www계정으로 slave103(slave) 접속

# rlogin -l www slave103

 

12.인증키 생성

# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/www/.ssh/id_rsa): 엔터

Created directory '/home/www/.ssh'.

Enter passphrase (empty for no passphrase): 엔터

Enter same passphrase again: 엔터

Your identification has been saved in /home/www/.ssh/id_rsa.

Your public key has been saved in /home/www/.ssh/id_rsa.pub.

The key fingerprint is:

dd:75:8c:e8:f7:c3:07:4c:00:12:33:d0:08:c5:63:08 www@slave103

 

13.생성된 인증키를 확인하고 해당 공개키를 사용할 수 있도록 authorized_keys 파일에 생성한 키값을 추가한다.

# cd ~/.ssh/

# cp -RfpP id_rsa.pub authorized_keys

그리고, 역시 이 공개키(id_rsa.pub)를 master(master101)에 복사만 하면 되는 구조이다.

# cat id_rsa.pub

ssh-rsa … www@slave103

 

14. master101(master)에 생성한 공개키(id_rsa.pub)를 slave103(slave #1)의 www 계정의 ~/.ssh/authorized_keys에 추가

# cat authorized_keys

ssh-rsa  …. www@slave1031

ssh-rsa  … www@master101

authorized_keys의 파일 권한 변경

# chmod 600 authorized_keys

 

15. slave103(slave #1)에 생성한 공개키(id_rsa.pub)를 master101(master)의 www 계정의 ~/.ssh/authorized_keys에 추가

# cat authorized_keys

ssh-rsa … www@master101

ssh-rsa … www@slave103

 

16. 접속 테스트
master101(master)에서 slave103(slave #1)로 ssh 접속 확인

# ssh slave103

slave103(slave #1)에서 master101(master)로 ssh 접속 확인

# ssh master101

 

17. 위의 방법으로 yagbat104(slave #2)도 ssh 연결 셋팅

18. 테스트

완료

 

<hudson plugin 설치>

hudson의 안정적인 버전인 1.361 버전을 기준으로 했을 때. 잘 붙고 괜찮은 ssh slave plugin의 버전은 0.10이다.

1. http://hudson-ci.org/download/plugins/ssh-slaves/0.10/ssh-slaves.hpi 을 다운받아서 허드슨 플러그인 설치

2. 신규 노드 추가(ssh)

image

 

3. 테스트

Job 설정의 " Tie this project to a node" 에서 slave1을 지정하고, execute shell을 "hostname" 으로 셋팅하고 실행한다.
결과화면에서 slave1 (slave103)에서 hostname이 나오는 것을 확인할 수 있다.

Building remotely on slave1

[test-slave1] $ /bin/sh -xe /tmp/hudson8269255461472552301.sh

+ hostname

slave103

Finished: SUCCESS

 

4. 이런 식으로 확장하게 함

image

 

5. job 실행시 기본적으로 RR처럼 작동한다.

운영해보니 특정 노드(master, slave #, slave #2)에서 돌게 하는 것이 batch job 실행에 대한 안정성을 좀 더 확보하는 것 같다. job 설정에서 꼭 tie this porject to a node를 설정함

image

 

기타.

Spring Job Repository 생성해주는 job 하나 만들고 나면. 기본적인 셋팅은 끝..( 플러그인을 이용해서 notifiy, monitor 해주는 것이 필요하기는 함)

나머지는 Spring Job 만 잘 Scheduling해줄 필요가 있음.

Posted by '김용환'
,