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 Amazon Web Services

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

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

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

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

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

Amazon Web Services 구성

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

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

AWS Instance는 teminated가 되어도 바로 사라지지 않고 일정시간 대기한 뒤, 스스로 리스트에서 제거 된다.

그렇기에 무료계정에서는 Instances 개수 제한이 있을 수 있으므로, teminated 된 Instance가 적절히 제거 되는 것을 확인 하면서 가이드를 따라 가도록 하자.

Console 로그인

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

향후 모든 가이드는 Seoul region (ap-northeast-2) 에서 진행하도록 한다.

IAM 보안 자격 증명

IAM(https://console.aws.amazon.com/iam) 으로 이동하여 Users 에서 사용자를 선택한다. 사용자가 없다면 생성부터 진행하도록 한다.

신규 사용자 생성은 여기서 다루지 않으며, 생성시 Programmatic access를 반드시 선택하도록 해야 한다.

AWS API, CLI, SDK 를 사용하는 접속은 해당 권한이 필요하다.

Security credentials 에서 Create accress key를 눌러 생성한다. 발급되는 Secret access key는 한번만 제공되므로 잘 간직하도록 한다.

Key Pair 생성

Instance 생성 및 접속을 위해 미리 Key를 만들어 두는 것이 좋다. AWS는 ec2-user를 기본계정으로 하여 접속 할 수 있도록 유도한다. 접속을 위해서 키를 생성해야 하므로 EC2 > Key Pairs로 이동하여 Create Key Pair 버튼을 클릭힌다. 적당한 파일이름 입력하고 Create 버튼을 누르면 Key Pair가 생성되고 자동으로 pem 파일이 다운로드 된다. 이 파일을 이용하여 접속하도록 하자

Instance 생성

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

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

항목선택값설명
Step 1. Choose AMIAmazon Linux 2 AMI (HVM), SSD Volume Type - ami-095ca789e0549777d
Step 2. Choose Instance Typet2.medium / 2 vCPUs / 4GB
Step 4. Add Storage8GB / General Purpose SSD (sp2)
Step 6. Configure Security GroupDefaultJ-Jobs 매니저를 위한 7065가 열려있어야 한다
Select an existing key pair or create a new key pairawsTest미리 생성해둔 key Pair를 선택한다

Instance 접속

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

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

기본 유틸 설치

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 를 통해 절대 경로를 확인해둔다 향후 설치시에 사용된다.

    [ec2-user@ip-172-31-31-178 ~]$ which javac
    /usr/bin/javac
    [ec2-user@ip-172-31-31-178 ~]$ readlink -f /usr/bin/javac
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/bin/javac
    [ec2-user@ip-172-31-31-178 ~]$
    

J-Jobs 계정 생성

AWS의 기본 계정은 ec2-user 이기에 jjobs 계정을 생성하여 해당 계정에서 설치 및 가이드를 진행하고자 한다.

  • 먼저 설치 파일을 ec2-user 계정으로 복사해 둔다.

    • jjob_agent_installer.sh
    • jjob_DB_installer_linux_x64.sh
    • jjob_installer_linux_x64_2.x.x_yyyymmdd
  • jjobs 계정을 생성한다

    [ec2-user@ip-172-31-25-169 ~]$ sudo adduser jjobs
    [ec2-user@ip-172-31-25-169 ~]$
    
  • 설치파일의 권한을 jjobs로 변경하고, 파일을 해당 계정 홈으로 이동한다.

    [ec2-user@ip-172-31-25-169 ~]$ sudo chown jjobs:jjobs jjob*
    [ec2-user@ip-172-31-25-169 ~]$ sudo mv jjob* /home/jjobs/
    
  • 향후 작업을 위해 jjobs 계정으로 이동한다.

    [ec2-user@ip-172-31-25-169 ~]$ sudo su - jjobs
    [jjobs@ip-172-31-25-169 ~]$
    

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

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

  • DB설치를 위해 설치파일(jjob_DB_installer_linux_x64.sh) 을 권한을 설정한다.

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

    [jjobs@ip-172-31-25-169 ~]$ mkdir pgsql
    [jjobs@ip-172-31-25-169 ~]$ cd pgsql/
    [jjobs@ip-172-31-25-169 pgsql]$ mkdir engn && mkdir data && mkdir log
    [jjobs@ip-172-31-25-169 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@ip-172-31-25-169 pgsql]$ cd ..
    [jjobs@ip-172-31-25-169 ~]$
    
  • 설치 스크립트를 실행하여 DB를 설치한다.

    [jjobs@ip-172-31-25-169 ~]$ ./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@ip-172-31-25-169 ~]$
    

J-Jobs 설치

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

  • 설치파일(jjob_installer_linux_x64_2.4.x_yyyymmdd)에 대해 권한을 설정한다.

    [jjobs@ip-172-31-25-169 ~]$ chmod 755 jjob_installer_linux_x64_2.4.x_yyyymmdd
    [jjobs@ip-172-31-25-169 ~]$ 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@ip-172-31-25-169 ~]$
    
  • 풀설치 스크립트를 실행한다. java_path 는 미리 확인해둔 java 설치 경로는 이용한다.

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

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

    [jjobs@ip-172-31-25-169 ~]$ ./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.201.b09-0.amzn2.x86_64 \
    --use_postgresql \
    --jdbc_url 'jdbc:postgresql://172.31.23.189: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@ip-172-31-25-169 ~]$
    
  • 아래와 같은 폴더 구조를 확인할 수 있으며 manager, server, agent 폴더와 각 실행, 중지 스크립트를 확인 할 수 있다.

    [jjobs@ip-172-31-25-169 ~]$ cd jjobs
    [jjobs@ip-172-31-25-169 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@ip-172-31-25-169 jjobs]$
    

Security Groups 설정

J-Jobs 매니저가 7065 포트를 사용하도록 설정하였으나 외부에서 접속이 되지 않는 상태이다. EC2 > NETWORK & SECURITY > Security Groups 로 이동하여 필요한 설정을 하도록 하자.

  • default 그룹은 J-Jobs가 설치된 Instance에서 사용하므로 Inbound에서 TCP 7065를 추가하도록 하자.

  • VPC 내에서는 자유롭게 접근할 수 있도록 VPC의 IPv4 CIDR 도 추가하도록 하자. VPC 정보는 VPC > Your VPCs(https://console.aws.amazon.com/vpc) 에서 확인 할 수 있다.

  • Create Security Group 버튼을 눌러 신규 그룹을 아래처럼 생성하자. 이 그룹은 Agent 설치를 위한 Instance가 사용할 용도이며, SSH 접속을 제외하고는 다른 설정은 없어도 된다.

Images(AMIs) 생성

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

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

    에이전트만 실행하기에 Instance Type을 t2.micro (1 vCPUs/1 GB) 로 생성하도록 한다.

    Security Group은 미리 생성해둔 jjobs-agent로 선택한다.

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

[jjobs@ip-172.31.31.178 ~]$ chmod 755 jjob*
[jjobs@ip-172.31.31.178 ~]$ 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@ip-172.31.31.178 ~]$ ./jjob_agent_installer.sh \
 --base_path /home/jjobs/jjobs \
 --java_path /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.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@ip-172.31.31.178 ~]$ cd jjobs
    [jjobs@ip-172.31.31.178 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@ip-172.31.31.178 jjobs]$
    
  • 마지막으로 .bashrc 파일에 환경변수를 설정해준다.

    [jjobs@ip-172.31.31.178 ~]$ 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.201.b09-0.amzn2.x86_64"
    ...
    [jjobs@ip-172.31.31.178 ~]$ source ~/.bashrc
    [jjobs@ip-172.31.31.178 ~]$ echo $BATCH_HOME
    /home/jjobs/jjobs/agent
    [jjobs@ip-172.31.31.178 ~]$
    
  • Instance를 선택하고 우클릭 또는 상단의 Actions > Image > Create Image 를 선택한다. 기본값으로 하여 Create Image 버튼으로 생성한다.

  • 생성이 완료되면 EC2 > IMAGES > AMIs 화면에 조회가 되며, 생성한 Instance는 향후 기준이 되는 Default Instance로 사용하도록 한다.

J-Jobs 실행

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

메타 DB를 실행(PostgreSQL)

[jjobs@ip-172.31.23.189 jjobs]$ sh /home/jjobs/pgsql/engn/start_db.sh
waiting for server to start.... done
server started
[jjobs@ip-172-31-23-189 jjobs]$

매니저 실행

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

[jjobs@ip-172-31-23-189 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@ip-172-31-23-189 jjobs]$
  • [http://IPv4 Public IP:7065/jjob-manager](http://IPv4 Public IP: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@ip-172-31-23-189 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@ip-172-31-23-189 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@ip-172-31-23-189 jjobs]$
    
  • 정상 실행이 되었다면 모니터링 > 서버 화면에서 다음처럼 확인 할 수 있다.

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

Cloud 메뉴

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

Account

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

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

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

    항목입력값설명
    UUID자동 생성되는 고유값으로 기본값 사용
    NameAWS_TEST
    SSH user Idjjobs에이전트로 생성되는 Instance의 계정
    User Home/home/jjobs
    J-Jobs Agent Home/home/jjobs/jjobs/agent에이전트가 설치된 경로
    AWS AccessKey IdAKIXXXXXXQHWQOVBSK
    AWS Secret AccessKeyK9Z3VMtQYWjDxDM02JFMnr8XcE/K9Z3V
    AWS Regionap-northeast-2
    Default Instance Idi-01fXXXXXXX23623Instance를 생성할 때 기준이 되는 Instance (여기서는 Agent Image를 생성한 Instance)
    Agent Image Idami-01843434e8에이전트가 포함된 Image Id

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

Auto Scaling 설정

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

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

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

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

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

    Auto Scaling 에 의해 생성된 Instance는 Default Instance + Image 로 만들어진다.

  • 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 되어 Instance 가 2개로 늘어나고 에이전트도 두개로 늘어나서 일을 처리한다.

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

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

CLI

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

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

    [jjobs@ip-172-31-23-189 jjobs]$ aws --version
    aws-cli/1.16.102 Python/2.7.16 Linux/4.14.123-111.109.amzn2.x86_64 botocore/1.12.92
    [jjobs@ip-172-31-23-189 jjobs]$
    

    만약 CLI가 설치 되어 있지 않다면 AWS Command Line Interface(https://docs.aws.amazon.com/cli/latest/userguide) 를 이용하여 설치 하도록 하자.

  • AWS CLI를 사용하기 위해 Configuring 작업을 해주어야 한다. 계정 정보를 이용하여 최초에 한번 셋업해 준다.

    [jjobs@ip-172-31-23-189 jjobs]$ aws configure
    AWS Access Key ID [None]: QHWQOVIAAK23TLQV4BSK
    AWS Secret Access Key [None]: WjDxDAFMnroJO4oNM0SXcEqioCK9Z3VMtQY2J/8y
    Default region name [None]: ap-northeast-2
    Default output format [None]: json
    [jjobs@ip-172-31-23-189 jjobs]$
    
  • Cloud > CLI 화면에 접속하면 기본적인 명령을 실행하여 CLI 설치 여부를 확인한다. READY 가 보인다면 정상적인 상황이다.

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

    aws ec2 describe-instances
    

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

    aws ec2 run-instances --image-id ami-095ca789e0549777d --count 1 --instance-type t2.micro
    

  • Output에 있는 Instance Id를 이용하여 해당 Instance를 삭제하여 정리한다. aws 명령은 생략하여도 상관없다.

    ec2 terminate-instances --instance-ids i-0873b947fbfc11bdf 
    

Instances

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

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

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

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

Cloud & CLI 템플릿

Cloud

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

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

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

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

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

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

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

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

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

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

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

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

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

###CLI

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

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

    항목입력값설명
    설명CLIStep 이름
    Instance ManagerAWS_TEST
    Encodingutf-8로그를 남길때 사용할 인코딩
    Commandaws ec2 describe-instancesAWS Instances 정보 조회
  • 로그레벨을 조정하여 실행한 후, 실행 상세 정보 확인 버튼을 눌러 Step 실행 탭에서 COMPLETED 상태를 클릭하여 로그를 확인한다.

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

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

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

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

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

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

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

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

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

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