J-Jobs

Guides -J-Jobs Orchestrator v2.4 How-To 가이드

J-Jobs Orchestrator How-To 가이드

최종 작성일 : 2019년 7월

기준 버전 : J-Jobs v2.4

Copyright ⓒ LG CNS

LG CNS의 사전 승인 없이 본 내용의 전부 또는 일부에 대한 복사, 배포 사용을 금합니다.

본 문서는 J-Jobs Orchestrator 사용자의 이해를 돕기 위한 문서로 Manager 의 메뉴 구성 중심으로 작성되어 있다.

J-Jobs with Google Cloud Platform

J-Jobs 에서는 GCP의 VM Instances 정보를 관리하고 컨트롤 할 수 있는 기능을 제공한다.

Cloud 메뉴를 통해 계정을 생성하고 VM Instance를 Create, Start, Stop, Reset, Delete 할 수 있으며, 에이전트를 탑재하여 필요에 따라 Scale Out/In 을 할 수 있어 유연한 배치관리를 할 수 있다.

Cloud, CLI 템플릿을 이용하여 에이전트가 탑재된 VM Instance를 구동하거나 CLI 명령을 보낼 수 있다.

GCP 계정 생성부터 템플릿, 메뉴 사용까지 순서대로 진행하여 각 기능의 기본적인 사용을 돕고자 함이 목적이며

GCP 를 사용할 수 있는 환경이 구성되어야 하며, 모든 테스트는 Cloud 환경에서 진행하는 것을 기본으로 한다.

Google Cloud Platform 구성

J-Jobs와 원활한 연결 및 사용을 위해 필요한 서비스 설정 및 VM Instance를 구성해야 하며, 가이드를 위해 구성하고자 하는 아키텍처는 아래그림을 참고한다.

  • jjobs-instance : J-Jobs 풀버전을 설치하고 매니저 포트(7065)를 외부로 열어둔다
  • jjobs-image : J-Jobs 에이전트만 설치된 인스턴스 이미지
  • jjobs-agent00~NN : jjobs-image를 이용하여 필요에 따라 동적으로 인스턴스를 생성하여 에이전트로 이용한다.

Console 로그인

이미 가지고 있는 구글 계정을 이용하여 GCP Console(https://console.cloud.google.com)에 로그인 한다.

Select a project

프로젝트가 없다면 적당한 이름으로 하나 생성한다. 여기서는 J-Jobs라고 만들도록 한다.

Service accounts 생성 및 Role 설정

J-Jobs 프로젝트에 접근할 수 있는 서비스 계정 생성을 위해 Service Account(https://console.cloud.google.com/iam-admin/serviceaccounts) 로 이동한다.

  • Create service account 버튼을 클릭하여 1단계 상세 정보를 입력한다.

  • 2단계를 여기서는 작성하지 않으며, 3단계에서 접속을 위해 Create key를 클릭하여 JSON 타입으로 생성한다.
  • 자동으로 다운로드된 파일을 잘 보관하도록 하며 DONE 버튼을 눌러 마무리한다.

  • 생성된 Service account에 Role을 부여하기 위해 IAM(https://console.cloud.google.com/iam-admin/iam) 으로 이동한다.

  • 상단의 ADD를 눌러 생성한 jjobsaccount 를 새로운 맴버로 등록한다. 이때 Role은 Editor 로 설정한다.

VM Instance 생성

J-Jobs를 VM Instance 위에서 구동시키기 위해 VM Instances(https://console.cloud.google.com/compute/instances) 로 이동한다.

Create 버튼을 눌러 아래 정보를 이용하여 VM Instance를 생성한다.

항목입력값설명
Namejjobs-instance
Zoneasia-northeast1-a
Machine typen1-standard-1 (1 vCPU, 3.75 GB memory)
Boot diskNew 10 GB SSD persistent disk / CentOS 7

  • Management, security, disks, networking, sole tenancy 를 클릭하여 접속을 위한 SSH keys 정보를 추가 입력한다.
  • Create 버튼을 눌러 완료한다.

SSH key 생성 방법

  1. PuTTy 를 설치하여 puttygen.exe 를 실행한다.
  2. Generate 버튼을 클릭하고 마우스를 움직여 Key가 생성되도록 한다.
  3. Key comment 에 접속계정(jjobs)를 입력하고 Save private key 버튼을 눌러 private key를 저장해둔다.
  4. 상단의 public key 정보를 복사하여 VM Instance 생성시에 사용한다.

VM Instance 접속

생성해둔 SSH private 키를 이용하여 VM Instance에 접속하도록 한다. 접속 툴은 어느것을 사용해도 상관없으나 여기서는 파일전송도 해야 하므로 MobaXterm(https://mobaxterm.mobatek.net/download.html)을 사용하도록 한다.

  • 생성된 VM Instance의 External IP 정보를 이용하여 MobaXterm 의 세션정보를 설정한다.
  • 접속계정은 jjobs로 하고 private key는 다운받은 파일 경로에서 선택한다.

기본 유틸 설치

VM Instance에 접속 되었다면 J-Jobs 의 원할한 설치를 위해 아래 명령을 실하여 필요한 툴을 설치한다.

  • sudo yum install zip -y

  • sudo yum install unzip -y

  • sudo yum install java-1.8.0-openjdk-devel.x86_64 -y

    sudo yum list java*jdk-devel 사용하여 설치 가능 목록 확인

  • javac 의 경로를 확인하고 link 를 통해 절대 경로를 확인해둔다 향후 설치시에 사용된다.

    [jjobs@jjobs-instance ~]$ which javac
    /usr/bin/javac
    [jjobs@jjobs-instance ~]$ readlink -f /usr/bin/javac
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin/javac
    
  • 설치파일을 Instance로 복사해둔다

    • jjob_DB_installer_linux_x64.sh
    • jjob_installer_linux_x64_2.x.x_yyyymmdd

###J-Jobs 메타 DB 설치 (PostgreSQL)

J-Jobs에서 사용하는 기본 DB를 설치하여 사용하는 것으로 설명한다. 실제 프로젝트에서는 다른 DB와의 연결도 가능하다.

  • DB설치를 위해 전달 받은 설치파일(jjob_DB_installer_linux_x64.sh) 을 VM Instance로 복사하고 권한을 설정한다.

    [jjobs@jjobs-instance ~]$ chmod 755 jjob_DB_installer_linux_x64.sh
    [jjobs@jjobs-instance ~]$ ll
    total 22064
    -rwxr-xr-x. 1 jjobs jjobs 22591109 Jul  9 06:10 jjob_DB_installer_linux_x64.sh
    [jjobs@jjobs-instance ~]$
    
  • 필요한 폴더를 미리 만들어 둔다.

    [jjobs@jjobs-instance ~]$ mkdir pgsql
    [jjobs@jjobs-instance ~]$ cd pgsql/
    [jjobs@jjobs-instance pgsql]$ mkdir engn && mkdir data && mkdir log
    [jjobs@jjobs-instance pgsql]$ ll
    total 0
    drwxrwxr-x. 2 jjobs jjobs 6 Jul  9 06:22 data
    drwxrwxr-x. 2 jjobs jjobs 6 Jul  9 06:22 engn
    drwxrwxr-x. 2 jjobs jjobs 6 Jul  9 06:22 log
    [jjobs@jjobs-instance pgsql]$ cd ..
    [jjobs@jjobs-instance ~]$
    
  • 설치 스크립트를 실행하여 DB를 설치한다.

    [jjobs@jjobs-instance ~]$ ./jjob_DB_installer_linux_x64.sh \
    --base_path /home/jjobs/pgsql \
    --install_kind B \
    --db_home_path /home/jjobs/pgsql/engn \
    --db_data_path /home/jjobs/pgsql/data \
    --db_log_path /home/jjobs/pgsql/log \
    --db_ip 127.0.0.1 \
    --db_port 5432 \
    --db_user jjobs \
    --db_pswd jjobs1234 \
    --db_name jjobs \
    --db_vip 127.0.0.1
    
  • 라이선스 승인에서 y를 입력하여 설치를 진행하여 아래와 같이 나오면 성공이며, jjobs 롤이 이미 있다는 에러는 넘겨도 상관없다.

    ...
    waiting for server to start.... done
    server started
    createuser: creation of new role failed: ERROR:  role "jjobs" already exists
    ALTER ROLE
    CREATE ROLE
    CREATE ROLE
    waiting for server to shut down.... done
    server stopped
    waiting for server to start.... done
    server started
    waiting for server to shut down.... done
    server stopped
       ...... Done
    =======================================================
     Program Install Success
    =======================================================
    [jjobs@jjobs-instance ~]$
    

J-Jobs 설치

설치_가이드를 통해 상세 파라메터와 설명을 참고하고, 여기서는 한번에 Manager, Server, Agent를 설치하도록 한다.

  • 설치파일(jjob_installer_linux_x64_2.4.x_yyyymmdd)을 VM Instance에 복사하고 권한을 설정한다.

    [jjobs@jjobs-instance ~]$ chmod 755 jjob_installer_linux_x64_2.4.x_yyyymmdd
    [jjobs@jjobs-instance ~]$ ll
    total 337944
    -rwxr-xr-x. 1 jjobs jjobs  22591109 Jul  9 06:10 jjob_DB_installer_linux_x64.sh
    -rwxr-xr-x. 1 jjobs jjobs 323460257 Jul  9 06:36 jjob_installer_linux_x64_2.4.x_yyyymmdd
    drwxrwxr-x. 5 jjobs jjobs        65 Jul  9 06:25 pgsql
    [jjobs@jjobs-instance ~]$
    
  • 풀설치 스크립트를 실행한다. java_path 는 미리 확인해둔 java 설치 경로는 이용한다.

    jdbc_url 의 DB IP는 127.0.0.1 이 아닌 VM Instance의 Internal IP를 사용해야 한다.

    이유는 다른 VM Instance에 설치된 에이전트가 접속 할 수 있도록 하기 위해서이다.

    [jjobs@jjobs-instance ~]$ ./jjob_installer_linux_x64_2.4.x_yyyymmdd \
    --base_path /home/jjobs/jjobs \
    --install_kind F \
    --install_mode I \
    --java_path /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64 \
    --use_postgresql \
    --jdbc_url 'jdbc:postgresql://10.146.0.2:5432/jjobs' \
    --dbms_user jjobs \
    --dbms_pswd jjobs1234 \
    --use_dedicated_man_was \
    --man_web_port 7065 \
    --svr_service_web_port 7075 \
    --svr_cotrol_base_port 17075 \
    --agnt_name agent1 \
    --agnt_svr_group 1 \
    --agnt_group 0 \
    --agnt_startup_svc_protocol http \
    --agnt_startup_svc_context jjob-server \
    --agnt_startup_svc_domain 127.0.0.1 \
    --agnt_startup_svc_port 7075
    
  • 라이선스 승인에서 y를 입력하여 설치를 진행하여 아래와 같이 나오면 성공이다

    1. Loading information.
       ...... Done
    2. Making configuration.
       ...... Done
    3. Preparing installation.
    unpacking.... jjob-server
    done.
    unpacking.... jjob-manager
    done.
    repacking.... jjob-server
    done.
    repacking.... jjob-manager
    done.
       ...... Done
    4. Installing.
       ...... Done
    =======================================================
     Program Install Success
    =======================================================
    [jjobs@jjobs-instance ~]$
    
  • 아래와 같은 폴더 구조를 확인할 수 있으며 manager, server, agent 폴더와 각 실행, 중지 스크립트를 확인 할 수 있다.

    [jjobs@jjobs-instance ~]$ cd jjobs
    [jjobs@jjobs-instance jjobs]$ ll
    total 32
    drwxrwxr-x. 16 jjobs jjobs  194 Jul  9 06:41 agent
    -rw-r--r--.  1 jjobs jjobs 5550 Aug  5  2018 License.txt
    drwxrwxr-x.  9 jjobs jjobs  160 Jul  9 06:41 manager
    drwxrwxr-x.  2 jjobs jjobs    6 Jul  9 06:41 mft
    drwxrwxr-x.  9 jjobs jjobs  160 Feb 13 15:37 server
    -rwxr-xr-x.  1 jjobs jjobs  204 Jul  9 06:41 start_agent.sh
    -rwxr-xr-x.  1 jjobs jjobs  185 Jul  9 06:41 start_manager.sh
    -rwxr-xr-x.  1 jjobs jjobs  459 Jul  9 06:41 start_server.sh
    -rwxr-xr-x.  1 jjobs jjobs  167 Jul  9 06:41 stop_agent.sh
    -rwxr-xr-x.  1 jjobs jjobs  134 Jul  9 06:41 stop_manager.sh
    -rwxr-xr-x.  1 jjobs jjobs  349 Jul  9 06:41 stop_server.sh
    [jjobs@jjobs-instance jjobs]$
    

VPC Network 설정

J-Jobs 매니저가 7065 포트를 사용하도록 설정하였으나 외부에서 접속이 되지 않는 상태이다. 네트워크의 Inbound 설정이 필요하므로 Firewall rules(https://console.cloud.google.com/networking/firewalls) 화면으로 이동한다.

  • 기본설정은 22, 3389 접속과 클라우드 내부에서 접속 할 수 있도록 되어 있다.

  • CREATE FIREWALL RULE 버튼을 눌러 아래처럼 등록한다.

  • default Network에 신규로 추가된 rule을 확인하며, 즉시 실행중인 VM Instance에 반영된다.

Images 생성

이번 가이드에서 에이전트가 동적으로 생성되어 J-Jobs에 연결되도록 하기위해 Image를 생성한다. 해당 Image를 이용하여 VM Instance를 생성하기에 신규로 VM Instance를 만들고 에이전트만 단독 설치한 후 Image를 생성하자.

  • 신규 VM Instance 생성을 위해 이미 진행했던 VM Instance 생성/접속 기본 유틸 설치까지 진행한다.

  • J-Jobs 설치 파일을 jjobs계정의 home으로 옮기고 에이전트만 단독으로 설치하기 위해 제공되는 jjob_agent_installer.sh 파일을 이용한다. 설치시 파라메터는 신경쓰지 않아도 된다. 실제 에이전트를 구동할때 실시간으로 필요한 정보를 변경하도록 되어있다.

[jjobs@instance-1 ~]$ chmod 755 jjob*
[jjobs@instance-1 ~]$ ll
total 315888
-rwxr-xr-x. 1 jjobs jjobs      5586 Jul 10 06:58 jjob_agent_installer.sh
-rwxr-xr-x. 1 jjobs jjobs 323460257 Jul 10 06:58 jjob_installer_linux_x64_2.4.x_yyyymmdd
[jjobs@instance-1 ~]$ ./jjob_agent_installer.sh \
 --base_path /home/jjobs/jjobs \
 --java_path /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64 \
 --name agent1 \
 --svr_group 1 \
 --agnt_group 0 \
 --startup_url http://127.0.0.1:7075/jjob-server
  • 라이선스 동의 후 설치가 완료되면 아래와 같은 폴더구조가 생성된다.

    1. Loading information.
     is not exist
       ...... Done
    2. Making configuration.
       ...... Done
    3. Preparing installation.
    unpacking.... jjob-server
    done.
    unpacking.... jjob-manager
    done.
    repacking.... jjob-server
    done.
    repacking.... jjob-manager
    done.
       ...... Done
    4. Installing.
       ...... Done
    =======================================================
     Program Install Success
    =======================================================
    [jjobs@instance-1 ~]$ cd jjobs
    [jjobs@instance-1 jjobs]$ ll
    total 16
    drwxrwxr-x. 16 jjobs jjobs  238 Jul 10 07:04 agent
    -rw-r--r--.  1 jjobs jjobs 5550 Aug  5  2018 License.txt
    drwxrwxr-x.  2 jjobs jjobs    6 Jul 10 07:04 mft
    -rwxr-xr-x.  1 jjobs jjobs  218 Jul 10 07:04 start_agent.sh
    -rwxr-xr-x.  1 jjobs jjobs  167 Jul 10 07:04 stop_agent.sh
    [jjobs@instance-1 jjobs]$
    
  • 마지막으로 .bashrc 파일에 환경변수를 설정해준다.

    [jjobs@instance-1 ~]$ vi ~/.bashrc
    ...
    #for J-Jobs
    export BATCH_HOME="/home/jjobs/jjobs/agent"
    export COMMAND_TYPE="sh"
    export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64"
    ...
    [jjobs@instance-1 ~]$ source ~/.bashrc
    [jjobs@instance-1 ~]$ echo $BATCH_HOME
    /home/jjobs/jjobs/agent
    [jjobs@instance-1 ~]$
    
  • Image 생성을 위해 방금 생성한 VM Instance를 STOP 상태로 변경한다.

  • GCP Console에서 Images(https://console.cloud.google.com/compute/images) 로 이동하여 CREATE IMATE 버튼을 누르고 아래와 같이 정보를 입력 후 생성한다. 이때 Source disk 는 방금 생성한 VM Instance를 선택하도록 한다.

  • 생성이 완료되면 Images 리스트 상단에 조회가 되며, 생성한 VM Instance는 DELETE를 하여 정리한다.

J-Jobs 실행

설정 및 설치가 끝났으면 jjobs-instace로 다시 접속하여 필요한 설정을 마무리 한다.

메타 DB를 실행(PostgreSQL)

[jjobs@jjobs-instance jjobs]$ sh /home/jjobs/pgsql/engn/start_db.sh
waiting for server to start.... done
server started
[jjobs@jjobs-instance jjobs]$

매니저 실행

/home/jjobs/jjobs 에서 실행하며, 중간에 발생하는 에러는 테이블이 존재하지 않아 발생하는 것으로 최초 실행에서는 정상이다. 확인 후 Ctrl+C 로 빠져나온다.

[jjobs@jjobs-instance jjobs]$ ./start_manager.sh
Using CATALINA_BASE:   /home/jjobs/jjobs/manager
Using CATALINA_HOME:   /home/jjobs/jjobs/manager
Using CATALINA_TMPDIR: /home/jjobs/jjobs/manager/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
Using CLASSPATH:       /home/jjobs/jjobs/manager/bin/bootstrap.jar:/home/jjobs/jjobs/manager/bin/tomcat-jul i.jar
Tomcat started.
...
...
...
[M][2019-07-09 07:01:08,802][INFO ] HV000001: Hibernate Validator 5.2.1.Final
[M][2019-07-09 07:01:10,430][INFO ] Looking for @ControllerAdvice: WebApplicationContext for namespace 'servlet-servlet': startup date [Tue Jul 09 07:01:05 UTC 2019]; parent: Root WebApplicationContext
[M][2019-07-09 07:01:10,573][INFO ] Looking for @ControllerAdvice: WebApplicationContext for namespace 'servlet-servlet': startup date [Tue Jul 09 07:01:05 UTC 2019]; parent: Root WebApplicationContext
[M][2019-07-09 07:01:10,737][INFO ] Mapped URL path [/repository/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
[M][2019-07-09 07:01:20,200][INFO ] FrameworkServlet 'servlet': initialization completed in 15155 ms
09-Jul-2019 07:01:20.245 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /home/jjobs/jjobs/manager/webapps/jjob-manager.war has finished in 37,784 ms
09-Jul-2019 07:01:20.259 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-7065"]
09-Jul-2019 07:01:20.293 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-6994"]
09-Jul-2019 07:01:20.295 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 37949 ms
^C
[jjobs@jjobs-instance jjobs]$
  • http://ExternalIP:7065/jjob-manager 접속하여 로그인 화면에서 root/jjobs1234 계정으로 로그인하면 메타테이블이 없음 확인창이 뜬다. (해당 메시지는 최초 설치후 실행에서만 볼 수 있다)

  • 확인을 눌러 메타 테이블 생성을 진행한다.

  • 우측 상단의 로그인 화면으로 이동을 눌러 다시 root계정으로 로그인을 한다.
  • 설치/제거 메뉴의 우측 상단의 초기화 마법사를 눌러 초기화를 진행한다 (설치_가이드에서 상세 확인할 수 있다.)

라이선스는 j-jobs@lgcns.com 으로 문의하여 발급 받아야 한다.

  • 로그아웃을 하고 ADMINISTRATOR계정으로 로그인을 한다. (초기화 마법사에서 설정한 ID/PW를 이용한다.)

  • 관리자 > 시스템설정 > 서버설정 화면에서 서버 편집을 눌러 통신정보 탭의 최대 연결수를 조정한다. 하나의 에이전트는 3개(에이전트 상세정보 > 확장 정보 > 요청 처리자 수)의 tcp라인을 사용하기에 기본설정 10은 최대 3개의 에이전트가 연결될 수 있다. Auto Scale 테스트를 위해 넉넉히 100으로 조정해 둔다.

서버 실행

/home/jjobs/jjobs 에서 실행하며 아래처럼 에러없이 로그가 보이면 성공이다. 확인 후 Ctrl+C 로 빠져나온다.

[jjobs@jjobs-instance jjobs]$ ./start_server.sh
Using CATALINA_BASE:   /home/jjobs/jjobs/server
Using CATALINA_HOME:   /home/jjobs/jjobs/server
Using CATALINA_TMPDIR: /home/jjobs/jjobs/server/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
Using CLASSPATH:       /home/jjobs/jjobs/server/bin/bootstrap.jar:/home/jjobs/jjobs/server/bin/tomcat-juli.jar
Using CATALINA_PID:    server.pid
Existing PID file found during start.
Removing/clearing stale PID file.
Tomcat started.
[S][2019-07-09 08:17:00,652][INFO ] Closing Root WebApplicationContext: startup date [Tue Jul 09 08:16:51 UTC 2019]; root of context hierarchy
[S][2019-07-09 08:17:00,672][INFO ] Shutting down EhCache CacheManager
...
...
...
[S][2019-07-09 08:30:52,637][INFO ] HV000001: Hibernate Validator 5.2.1.Final
[S][2019-07-09 08:30:53,971][INFO ] Looking for @ControllerAdvice: WebApplicationContext for namespace 'servlet-servlet': startup date [Tue Jul 09 08:30:49 UTC 2019]; parent: Root WebApplicationContext
[S][2019-07-09 08:30:54,090][INFO ] Looking for @ControllerAdvice: WebApplicationContext for namespace 'servlet-servlet': startup date [Tue Jul 09 08:30:49 UTC 2019]; parent: Root WebApplicationContext
[S][2019-07-09 08:30:54,204][INFO ] Mapped URL path [/repository/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
[S][2019-07-09 08:30:54,405][INFO ] FrameworkServlet 'servlet': initialization completed in 4542 ms
09-Jul-2019 08:30:54.432 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /home/jjobs/jjobs/server/webapps/jjob-server.war has finished in 29,214 ms
09-Jul-2019 08:30:54.451 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-7075"]
09-Jul-2019 08:30:54.601 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-7004"]
09-Jul-2019 08:30:54.734 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 29614 ms
  • 서버 기동 정상여부는 모니터링 > 서버 화면에서 확인 할 수 있다.

에이전트 실행

  • /home/jjobs/jjobs 에서 실행하며 프로세스 확인은 설치_가이드를 참고한다.

    [jjobs@jjobs-instance jjobs]$ ./start_agent.sh
    JAVA_HOME = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
    BATCH_HOME = /home/jjobs/jjobs/agent
     ready to stop
    ... cleaning PID
    [jjobs@jjobs-instance jjobs]$
    
  • 정상 실행이 되었다면 모니터링 > 서버 화면에서 다음처럼 확인 할 수 있다.

    만약 서버는 모두 정상인데 에이전트 상태가 보이지 않는다면 Job > 실행에서 Dummy_Job을 실행하여 정상작동을 확인한다.

Cloud 메뉴

Cloud 메뉴는 계정관리를 시작으로 CLI, Instances, Auto Scale 기능을 관리하고 모니터링 할 수 있는 메뉴로 구성되어 있다.

Account

J-Jobs와 GCP의 연결을 위해 계정을 등록하여야 한다.

  • 우측 상단에서 제품을 GCP로 선택하고 추가버튼을 클릭한다.

  • 아래와 같이 입력하고 Create 버튼을 눌러 계정을 생성한다.

    항목입력값설명
    UUID자동 생성되는 고유값으로 기본값 사용
    NameGCP_TEST
    SSH user Idjjobs에이전트로 생성되는 Instance의 계정
    User Home/home/jjobs
    J-Jobs Agent Home/home/jjobs/jjobs/agent에이전트가 설치된 경로
    Project IDj-jobs-xxxxService accounts 생성시 내려받은 JSON 파일 참고
    Zone Nameasia-northeast1-a
    Service account Key{... ... ... ...}내려받은 JSON 내용을 그대로 입력
    Default Instance Namejjobs-instanceVM Instance를 생성할 때 기준이 되는 VM Instance
    Agent Image Namejjobs-image에이전트가 포함된 Image name

  • 등록한 계정이 정상인지 확인을 위해서 Cloud > Instances 화면으로 이동하면 jjobs-instance 가 보여야 한다. 만약 에러가 발생한다면 J-Jobs 매니저의 로그를 확인하도록 하자

Auto Scaling 설정

에이전트 그룹 관리에 Auto Scale 사용을 설정하면 해당 메뉴에서 관련 정보가 조회되며, 설정을 변경하거나 삭제할 수 있다. 해당 내용은 관리자_가이드 에서도 확인할 수 있다.

  • 가장 먼저 Auto Scaling을 사용할 에이전트 그룹 설정을 위해 관리자 > 시스템설정 > 에이전트설정 으로 이동한다.

  • 에이전트 그룹 추가 버튼을 눌러 아래와 같이 등록한다. 최대 동시실행 Job 개수를 4로 입력하고 임계치를 50% 이상으로 설정하면 동시에 2개의 Job이 실행 되는 순간 Scale out 에 의해 에이전트가 증가하게 된다.

  • 생성한 에이저트 그룹의 오토스케일 설정() 버튼을 눌러 아래처럼 설정한다.

    항목설정값설명
    Select cloud accoutGCP_TEST
    Agent auto-scale range settingmin : 1
    max : 2
    최초 min 개수의 에이전트가 생성되고, 에이전트 그룹의 임계치 설정을 넘어서면 max 까지 자동으로 생성된다.
    Advanced setting인스턴스 상태 확인 주기 : 1분서버에서 주기적으로 체크하여 VM Instance 개수와 상태를 확인한다.
    인스턴스 중지 대기 : 2분에이전트로 연결된 상태를 ACTIVE라고 하며, 임계치 설정 이하일 경우 min 개수를 제외하고는 IDLE 상태로 변경하고 대기 시간을 기다린다.
    대기 시간이 지나면 IDLE 상태를 STOP으로 변경하고 VM Instance를 Stop 처리한다.
    인스턴스 종료 대기 : 2분STOP 상태에서 다시 해당 시간을 대기 한 후, VM Instance를 Delete 처리한다.
  • 저장을 누르는 순간 내부적으로 min 개수 만큼 VM Instance를 생성하여 에이전트로 연결해 주며, Cloud > Instances 에서 생성된 VM Instance가 에이전트로 연결되어 있음을 확인 할 수 있다.

    Auto Scaling 에 의해 생성된 VM Instance는 Default Instance + Image 로 만들어지며, 이름은 Default Instance name + 난수로 만들어진다.

  • Auto Scaling 화면에서는 설정된 정보를 확인 할 수 있다.

  • 모니터링 > 서버 화면에서도 연결된 에이전트 정보를 확인 할 수 있다.

Auto Scaling 테스트

에이전트 그룹에 설정한 임계치에 따라 Sclae Out 되고 다시 Scale In 되는 것을 테스트 해보자.

  • Job 으로 이동하여 Dummy_Job 시간지연JobJob 속성 편집() 버튼을 눌러 실행정보탭의 실행구역을 1-1-* 로 설정한 후 저장한다.

  • 즉시실행 을 눌러 실행하면 Scale Out 없이 정상 실행됨을 확인할 수 있다.

  • Job 화면에서 Dummy_Job 의 스케줄을 클릭하여 스케줄 추가 버튼을 클릭한다. Interval 타입으로 2초마다 중복실행을 허용하도록 하여 스케줄을 등록한다.

  • 등록한 스케줄을 선택하고 시작을 누르면 2초마다 Job을 실행하게 되며, 동시실행에 의해 Scale Out 되어 VM Instance가 2개로 늘어나고 에이전트도 두개로 늘어나서 일을 처리한다.

  • 다시 스케줄 목록 에서 중지를 하면 Scale In이 된다. 중지 대기 시간인 2분이 지나면 TERMINATED 상태가 되고, 다시 종료 대시 시간 2분이 지나면 DELETE 되어 사라진다.

  • 테스트가 완료되었으면 에이전트 그룹에서 Auto Scaling 셋팅을 삭제하고 jjobs-instance를 제외하고는 정리하도록 한다.

CLI

J-Jobs Server가 설치된 장비에 GCP CLI가 설치되어 있는 경우 해당 메뉴를 통해 Command를 보내고 결과를 JSON 형태로 받아 볼 수 있다.

  • GCP에서 VM Instance를 생성할 경우 Google Cloud SDK 가 자동으로 설치되어 있다. gcloud 명령을 통해 CLI설치 여부를 확인해 보자

    [jjobs@jjobs-instance jjobs]$ gcloud version
    Google Cloud SDK 253.0.0
    alpha 2019.06.28
    beta 2019.06.28
    bq 2.0.44
    core 2019.06.28
    gsutil 4.39
    kubectl 2019.06.28
    
    To take a quick anonymous survey, run:
      $ gcloud alpha survey
    
    [jjobs@jjobs-instance jjobs]$
    

    만약 Goodle Cloud SDK가 설치 되어 있지 않다면 Google SDK 사이트(https://cloud.google.com/sdk/docs/quickstart-linux) 를 이용하여 설치 하도록 하자.

  • Cloud > CLI 화면에 접속하면 기본적인 명령을 실행하여 SDK 설치 여부를 확인한다. READY 가 보인다면 정상적인 상황이다.

  • 아래의 Excute Command 영역에서 필요한 명령을 입력하여 Execute버튼을 누르면 결과가 Output에 보여진다. Show Useful Usage 를 통해 자주 사용하는 명령을 확인할 수 있다. 현재 생성된 Instance 리스트를 조회 해보자

    gcloud compute instances list
    

  • 아래 명령을 이용하여 신규 VM Instance를 생성해보자. 다른 옵션을 주지 않으면 Console에서 기본으로 주어지는 옵션을 따르게 된다.

    gcloud compute instances create jjobs-cli-test --zone asia-northeast1-a
    

  • 생성한 VM Instance를 삭제하여 정리한다. gcloud 명령은 생략하여도 상관없다.

    compute instances delete jjobs-cli-test --zone asia-northeast1-a
    

Instances

등록된 계정에 연결된 모든 VM Instances 정보를 한눈에 볼 수 있으며, 에이전트와 연결된 VM Instance를 따로 정보가 보이며, 기본적인 Create, Start, Stop, Reset, Delete 기능을 제공한다.

  • GCP 계정에 연결된 VM Instances 정보가 보이며, 계정에 Default VM Instance로 지정된 것은 아래처럼 표시가 되며, Create with Default Instance Name specified in account 버튼으로 생성시 기준이 된다.

  • Create with Agent image name specified in account 버튼은 계정에 정의된 Agent Image name 을 기준으로 VM Instance를 생성한다. Disk 내용에만 사용되며, Machine Type 등은 Default Instance 기준으로 생성된다.

  • Stop Instance 버튼을 통해 TERMINATED 상태로 전환 하거나 Delete Instance 버튼을 통해 삭제를 할 수 있다.

  • jjobs-instance를 제외하고 나머지는Delete Instance 버튼으로 정리한다.

Cloud & CLI 템플릿

Cloud

어떤 배치작업을 수행하기 위해 일시적으로 에이전트 개수를 증가시켜 처리하고 다시 감소할 수 있는 템플릿이다.

동작유형에 따라 생성은 연결된 GCP 계정에 설정한 개수만큼 VM Instance를 만들고, 설정한 에이전트 그룹으로 연결시켜준다.

이때 생성된 VM Instance는 내부적으로 Pool ID로 관리되며, 소멸유형에서 해당 Pool ID에 연결된 모든 VM Instance를 정리한다.

  • 템플릿을 통한 Pool 관리도 특정 에이전트 그룹에서 이뤄지므로 관리자 > 시스템설정 > 에이전트설정 에서 그룹을 추가해준다.

  • Job > 편집 화면에서 추가 버튼 으로 신규 Job 을 생성한다.

    항목입력값설명
    설명Cloud화면에 표시되는 Step 이름
    Pool IDtest-pool-1동적으로 생성될 VM Instances 를 관리하는 그룹 ID
    동작 유형생성
    Instance ManagerGCP_TEST
    에이전트 그룹Cloud Template Test동적으로 생성된 에이전트가 연결될 에이전트 그룹
    생성 개수5
    이미지IDjjobs-image입력하지 않으면 계정에 등록된 Agent Image name 사용
  • F4 를 눌러 Job 속성 편집 > 실행 정보 > 실행구역 변경 을 눌러 agent1으로 지정한다. 동적으로 생성된 에이전트로 로드 발란스 되지 않도록 하기 위함이다.

  • Ctrl+S 를 눌러 Job을 저장하고, Ctrl+Enter 를 눌러 실행한다.

  • 실행 후 Cloud > Instances 화면으로 이동하여 5개의 VM Instances 가 생성되는 것을 확인한다. 연결된 Pool ID 와 에이전트 그룹이 표시된다.

  • 모니터링 > 에이전트 화면에서도 연결된 에이전트 정보를 확인 할 수 있다.

  • 다시 Job 편집으로 돌아가 동작유형을 소멸 로 변경 저장한 후 실행하여 5개의 에이전트와 VM Instances가 삭제되는 것을 확인한다.

여기서는 사용방법에 대한 설명 정도로 마무리하며,

업무에 적용하기 위해서는 무거운 작업을 다음 Step으로 연결하여 실행구역을 생성한 에이전트 그룹 으로 설정하여 동시처리가 되도록 유도해야 한다.

그리고 작업이 마치면 소멸 Step을 생성하여 자원을 정리해준다.

###CLI

Cloud 메뉴의 CLI 화면과 동일한 기능을 템플릿으로 처리할 수 있으며, JSON 으로 결과가 리턴되기에 다음 Step에서 필요한 정보를 사용할 수 있다.

  • 신규 Job을 생성하고 아래처럼 CLI 템플릿을 이용하여 jjobs-instance 상세내역을 조회하도록 한다.

    항목입력값설명
    설명CLIStep 이름
    Instance ManagerGCP_TEST
    Encodingutf-8로그를 남길때 사용할 인코딩
    Commandcompute instances describe jjobs-instancejjobs-instance 정보 조회 (glcoud 생략가능)
  • 로그레벨을 조정하여 실행한 후, 실행 상세 정보 확인 버튼을 눌러 Step 실행 탭에서 COMPLETED 상태를 클릭하여 로그를 확인한다.

  • Cloud > CLI 화면에서와 결과는 동일하지만 Template의 특성을 이용하여 출력 정보를 다음 Step에서 이용할 수 있다.

  • Job 편집으로 이동하여 아래와 같은 내용을 변경하도록 한다. 첫번째 Step에서 CLI를 통해 jjobs-instance 정보를 조회하고, 두번째 Step에서 이름을 받아서 출력해 보자.

Step Template항목입력값설명
CLI설명CLI
Instance ManagerGCP_TEST
Encodingutf-8
Commandcompute instances describe jjobs-instancejjobs-instance 정보 조회 (glcoud 생략가능)
사용자 정의 Property이름 - output
값 - GET_RESULT()
output이란 이름으로 CLI를 결과값을 받아온다
Command/Shell설명Print Instance Name
입력 유형스크립트
스크립트#!/bin/sh
echo $1
파라메터를 출력하는 간단한 스크립트를 실행
아규먼트${FROM_JSON(OUTVAR("output"),"name")}이전 Step에서 출력변수(OUTVAR) 중 특정 이름("output") 으로 지정된 정보를 가져온다
JSON 으로 구성된 문자열에서 "name" 키값에 해당하는 값을 가져온다 (FROM_JSON)
인코딩utf-8

FROM_JSON(jsonData,"key") 함수는 jsonData가 Map 형식으로 되어 있어야 작동함에 유의해야 한다.

만약 List 형식일 경우는 List의 첫번째 정보를 Map으로 변환하여 처리하게 된다.

  • Job을 저장하고 실행할 때 로그 모아보기를 사용으로 설정하도록 한다. 두 개의 Step에서 생성된 로그를 Job로그에서 한번에 볼 수 있는 기능이다.

  • 실행 후 실행 상세 정보 확인 버튼을 눌러 Job 실행 탭에서 상태를 클릭하여 Step 로그를 한번에 확인한다.

  • Log Viewer 우측 상단의 Refresh를 누르면 자동으로 정보가 갱신되어 보여진다. 정상적으로 Instance의 정보를 조회 하고 다음 Step에서 JSON 정보에서 name을 가져와서 출력한다.

    CLI 명령이 정확하게 JSON 형태로 반환 되는지는 Cloud > Cli 화면에서 테스트하여 확인해보는 것이 좋다.

본 문서의 정보는 사전 예고 없이 변경될 수 있습니다. 이 문서는 정보 전달 목적으로만 제공되며 어떠한 종류의 진술이나 보증도 포함되지 않습니다. 이 문서의 오류나 누락 부분에 대해 책임을 지지 않으며, 어떠한 내용도 추가 보증의 근거로 해석할 수 없습니다.
특히, 본 문서 또는 관련 설명에 제시된 업무를 추진하거나 그에 언급된 기능을 개발 또는 릴리스해야 할 의무가 없습니다. 본 문서 또는 관련 설명, 전략 및 가능한 향후개발, 제품, 플랫폼 방향 및 기능은 모두 변경 대상이며 LG CNS에 의해 언제든지 어떠한 이유로든 예고 없이 변경될 수 있습니다. 본 문서의 정보는 어떠한 자료, 코드 또는 기능을 제공하겠다는 약속이나 이에 대한 법적 의무를 구성하지 않습니다. 모든 미래 예측 진술에는 다양한 위험과 불확실성이 적용되며, 그에 따라 실제 결과는 기대와 상당히 다를 수 있습니다. 이 문서를 읽는 사람은 이러한 미래 지향적 진술에 과도하게 의존하는 일이 없도록 주의해야 하며, 구매결정을 내릴 때 이에 의존해서는 안 됩니다. 본 문서에 언급된 제품, 서비스와 해당 로고는 한국 및 기타 국가에서 사용되는 LG CNS의 등록상표입니다.