2016-08-22 2 views
0

executorService를 사용하여 병렬로 3 개의 다른 호스트에 ssh를 사용해야하는 유스 케이스가 있습니다. 각 호스트마다 M 개의 호스트와 N 개의 작업이 있으며, M 개의 호스트에 병렬로 로그인하고 N 개의 작업을 순차적으로 (각 호스트마다) 실행할 수 있기를 원합니다. SSHJ를 시도했지만 병렬 SSH를 지원하지 않는 것처럼 보입니다.executorService가있는 병렬 SSH

요즘 Parallec를 사용해 보았습니다. 모든 작업을 수집하고 config의 동시성 값을 기반으로 병렬로 실행하는 것처럼 보입니다.

실용적인 접근법/라이브러리는 무엇입니까?

+0

JSCH (http://www.jcraft.com/jsch/)를 사용해 보셨습니까? –

답변

0

이것은 호스트 클러스터 관리에 일반적으로 나타나는 일반적인 작업 흐름/오케스트레이션 문제 인 것 같습니다.

Parallec를 사용하면 onCompleted() 처리기의 해시지도에 응답/작업 상태를 저장하고 해시지도 폴링을 유지할 수 있습니다. 적어도 N 개의 작업을 수집 할 때마다 현재 스테이지를 완료하고 다음 라운드에서 실행할 다른 병렬 작업을 시작할 수 있습니다.

1000 개의 호스트 H1 ... H1000을 사용하여 5 개의 쉘 스크립트 S1 ... S5를 5 단계로 순차적으로 실행한다고 가정 해보십시오.

동시 해시 맵을 만들어 각 호스트의 실행 상태를 저장할 수 있습니다. 각 스크립트/스테이지에는 [NOT_RUN | 러닝 | COMPLETED_SUCCESS (COMPLETED_ERROR)] 상태가됩니다. 현재 병렬 작업이 실행중인 각 호스트에 대해 저장할 수도 있습니다.

스크립트 1을 첫 번째 병렬 작업으로 실행하기 위해 1,000 개의 호스트를 모두 시작합니다. 실행 전에 해시 맵의 각 요소를 < #, RUNNING> 상태로 설정하십시오. 현재 스레드를 차단하지 않도록 작업 asynchronously을 실행해야합니다. 응답 핸들러 onCompleted()에서 결과를 구문 분석하고 해당 항목을 맵에서 COMPLETED_X 상태로 업데이트합니다.

이지도를 일정 간격으로 폴링 할 수 있습니다. 완료된 스테이지에서 적어도 K 개의 작업 (또는 마지막 작업 그룹)이 남아 있고 해당 작업을 완료 한 K 개의 호스트와 함께 다른 병렬 작업을 시작합니다. 현재 단계는 다음 단계로 이동합니다.

병렬 작업에서 각 호스트는 다른 단계에서 실행될 수 있습니다. 일부는 스크립트 1이고 일부는 스크립트 4입니다. 이것은 다른 호스트에서 다른 요청으로 지원됩니다. http://www.parallec.io/docs/submit-task/#apis-on-variable-replacement-for-heterogeneous-requests

요약하면, 기본 배치는 작은 배치로 실행하여 다음 단계로 이동할 수있는 호스트를 확인하는 것입니다. 관리자 스레드는 다음 라운드에서 현재 스테이지를 완료 한 호스트 만 픽업하므로 잠금이 필요하지 않습니다.