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 Microsoft Azure

J-Jobs 에서는 Microsoft Azure 의 Virtual machines(VM) 정보를 관리하고 컨트롤 할 수 있는 기능을 제공한다.

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

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

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

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

Microsoft Azure 구성

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

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

Portal 로그인

이미 가지고 있는 계정을 이용하여 Azure Portal(https://portal.azure.com)에 로그인 한다.

화면 구성과 테마는 사용자마다 커스터마이징이 가능하므로 다르게 보일 수 있다.

Azure AD service principal 생성

어플리케이션을 컨트롤 할 수 있는 서비스 주체를 생성하고 접근할 수 있도록 클라이언트 암호를 생성하도록 하자. 자세한 사항은 Manage an Azure AD service principal 에서 확인 할 수 있다.

  • Azure Active Directory > App registrations 화면으로 이동하여 New registration 버튼을 클릭한다.

  • 이름만 작성하고 Register를 클릭한다.

  • 생성된 application 메뉴에서 Certificates & secrets 화면에서 New client secret를 클릭한다. Description과 유효기간을 입력하고 Add를 눌러 생성한다.

  • 생성하면 secret string 이 VALUE 항목에 전체로 보이는데 잘 복사해 두도록 한다. 다음부터는 별표처리로 보이지 않게 된다.

  • 다시 Azure Active Directory > App registrations 화면 리스트에서 생성한 jjobs-application을 클릭하여 상세정보를 확인한다. Application (client) IDDirectory (tenant) ID를 복사해둔다. 향후 secret string과 함께 계정 정보로 사용된다.

IAM Role assignments

생성한 서비스 주체(service principal)을 Owner 권한으로 등록하기 위해 Subscriptions > Access control(IAM) 으로 이동하여 Role assignments 탭에서 Add 버튼을 클릭하여 아래 정보로 입력하고 Save 를 눌러 생성합니다. 자세한 사항은 Assign a user as an administrator of a subscription 에서 확인 할 수 있다.

항목입력값설명
RoleOwner
Assign access toAzure AD user, group, or service principal
Selectjjobs-applicationAD 에 생성한 app application

Subscriptions 는 이미 생성되어 있어야 하며, 요금제를 선택하여 적절한 이름으로 생성한다.

여기서는 jjobs 라는 이름으로 무료구독 형태를 가지고 있다.

VM 생성

J-Jobs를 VM 위에서 구동시키기 위해 Virtual Machines 메뉴로 이동한다. Add 버튼을 눌러 아래 정보를 이용하여 VM 을 생성한다. 기재하지 않는 항목은 기본설정을 따른다. 모두 입력 후 Create 를 눌러 생성한다.

카테고리항목입력값설명
BasicsSubscriptionjjobs각자 구독중인 정보 입력
Resource groupjjobs-group하나의 리소스 그룹으로 관리하고자 함
Virtual machine namejjobs-instance
Region(Asia Pacific) Korea Central
ImageCentOS-based 7.5버전은 달라고 상관없음
SizeStandard B1ms (1 vcpu, 2 GiB memory)
UsernamejjobsSSH public key 를 생성하여 입력한다
SSH public keyssh-rsa AANlHZY9lB......uj2Bg631lBe6Yw== jjobs아래의 SSH key 생성방법을 참고한다
Public inbound portsNone여기서는 지정하지 않는다
DisksOS disk typeStandard SSD
NetworkingVirtual networkjjobs-group-vnet기본 생성
Subnetdefault기본생성
Public IPjjobs-instance-ip기본생성
ManagementBoot diagnosticsOff

SSH key 생성 방법

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

Network security groups 설정

작업을 위해 SSH 접속 22포트와 J-Jobs 매니저가 7065 포트, 서버와 에이전트가 통신하는 17075~17078 포트를 사용할 수 있도록 설정하자. Network security groups 화면으로 이동하여 리스트에 방금 생성된 jjobs-instance-nsg 을 클릭하자 (이름은 다를 수 있음)

  • Inbound security rules 메뉴에서 Add 버튼을 누르고 아래처럼 등록한다.
SourceSource portDestinationDestination portProtocolActionPriorityNameDescription
Any*Any22AnyAllow100jjobs_22SSH
Any*Any7065TCPAllow110jjobs_7065매니저
Any*Any17075-17078TCPAllow120jjobs_tcp서버

자주 가는 메뉴는 All services에서 검색하여 FAVORITES에 등록하여 사용하도록 한다

VM 접속

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

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

기본 유틸 설치

VM 에 접속 되었다면 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
    
  • 설치파일을 VM으로 복사해둔다

    • 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 로 복사하고 권한을 설정한다.

    [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 의 Private IP address를 사용해야 한다.

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

    [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.0.0.4: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]$
    

Images 생성

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

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

    에이전트만 설치하기에 Size 를 Standard B1s (1 vcpu, 1 GiB memory) 로 선택해도 된다. 그리고 Networking은 SSH 접속을 위한 22번 포트만 열어주면 된다.

  • 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 ~]$
    
  • VM 상세화면에서 상단의 Capture를 클릭한다. Name 과 Resource group을 설정 한 후 Create 버튼을 누르면 자동으로 VM을 정지하고 Capture Image를 생성한다. 경고 문구 처럼 기준이 되는 인스턴스는 사용하지 못하게 된다.

  • 생성이 완료되면 Images 리스트 상단에 조회가 되어 확인 할 수 있다.

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와 Azure의 연결을 위해 계정을 등록하여야 한다.

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

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

    항목입력값설명
    UUID자동 생성되는 고유값으로 기본값 사용
    NameAZURE_TEST
    SSH user Idjjobs에이전트로 생성되는 Instance의 계정
    User Home/home/jjobs
    J-Jobs Agent Home/home/jjobs/jjobs/agent에이전트가 설치된 경로
    Resource Groupjjobs-group생성한 리소스 그룹
    Application (client) IDdb484a4-317b6-484a-484a-f3f79484ajjobs-application 항목
    Directory (tenant) ID81ac7a6-5aa522-4c7a-aaa52-24eaaa526jjobs-application 항목
    Client secrets valuem1@m1@k+2U0?f6tHtkv=+fC6tHtk+2*?jjobs-application > secret 항목
    Default Virtual machineinstance-1신규 생성 VM의 기준이 됨
    Agent Image Namejjobs-image에이전트가 포함된 Image name

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

Auto Scaling 설정

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

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

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

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

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

    Auto Scaling 에 의해 생성된 VM 은 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 이 2개로 늘어나고 에이전트도 두개로 늘어나서 일을 처리한다.

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

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

    Azure 는 VM을 Delete해도 관련 Resource를 함께 정리해주지 않는다. Disk, Network interface, Public IP address 등 정리되지 않는 것들을 All resources 메뉴에서 잘 체크하도록 한다.

CLI

J-Jobs Server가 설치된 장비에 Azure CLI를 사용할 수 있도록 설치를 진행한다. Install Azure CLI with yum 사이트를 참고한다.

  • 아래처럼 설치까지만 완료하고 로그인은 따로 할 필요없다. 설치가 완료 되면 az --version으로 확인한다.

    [jjobs@jjobs-instance jjobs]$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    [jjobs@jjobs-instance jjobs]$ sudo sh -c 'echo -e "[azure-cli]\nname=Azure CLI\nbaseurl=https://packages.microsoft.com/yumrepos/azure-cli\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
    [jjobs@jjobs-instance jjobs]$ sudo yum install azure-cli -y
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    azure-cli                                                                     | 2.9 kB  00:00:00
    base                                                                          | 3.6 kB  00:00:00
    Not using downloaded base/repomd.xml because it is older than what we have:
      Current   : Fri Jul 12 21:26:21 2019
      Downloaded: Mon Jul  1 13:12:38 2019
    extras
    ...
    ...
    Installed:
      azure-cli.x86_64 0:2.0.69-1.el7
    
    Dependency Installed:
      python-backports.x86_64 0:1.0-8.el7           
      python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7        
      python-devel.x86_64 0:2.7.5-80.el7_6
      python-ipaddress.noarch 0:1.0.16-2.el7        
      python-setuptools.noarch 0:0.9.8-7.el7                            
      python-virtualenv.noarch 0:15.1.0-2.el7
    
    Dependency Updated:
      python.x86_64 0:2.7.5-80.el7_6                                               
      python-libs.x86_64 0:2.7.5-80.el7_6
    
    Complete!
    [jjobs@jjobs-instance jjobs]$ az --version
    azure-cli                         2.0.69
    
    command-modules-nspkg               2.0.3
    core                              2.0.69
    nspkg                              3.0.4
    telemetry                          1.0.3
    
    Python location '/usr/bin/python2'
    Extensions directory '/home/jjobs/.azure/cliextensions'
    
    Python (Linux) 2.7.5 (default, Jun 20 2019, 20:27:34)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    
    Legal docs and information: aka.ms/AzureCliLegal
    
    
    Your CLI is up-to-date.
    [jjobs@jjobs-instance jjobs]$
    
  • Cloud > CLI 화면에 접속하면 기본적인 명령을 실행하여 SDK 설치 여부를 확인한다. READY 가 보인다면 정상적인 상황이다.

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

    az vm list
    

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

    az vm create --resource-group jjobs-group --name clitest --image jjobs-image --generate-ssh-keys
    

  • 생성한 VM 을 삭제하여 정리한다. az 명령은 생략하여도 상관없다. VM 관련 다른 리소스도 찾아서 정리하도록 한다.

    vm delete --resource-group jjobs-group --name clitest --yes
    disk delete --resource-group jjobs-group --name clitest_disk1_b9684f0ba77f479f8f350d5edc4c3d84 --yes
    

[Portal] Network security group / Public IP address / Network interface


![](media/azure_cli_006.png)

![](media/azure_cli_007.png)

> Azure 의 CLI, SDK 처리 속도는 다른 제품(AWS, GCP)에 비해 응답이 느린편이다. Region 문제인지 Subscription의 문제인지는 모르겠으나 어떤 명령을 처리하기 위해 꽤 긴시간을 기다려야 한다.

### Instances

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

- Azure 계정에 연결된 VM 정보가 보이며, 계정에 **Default VM** 로 지정된 것은 아래처럼 표시가 되며, `Create with Default Virtual Machine specified in account` 버튼으로 생성시 기준이 된다.

![](media/azure_instances_001.png)

![](media/azure_instances_002.png)

![](media/azure_instances_003.png)

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

![](media/azure_instances_004.png)

![](media/azure_instances_005.png)

- `Stop VM` 버튼을 통해 VM deallocated 상태로 전환 하거나 `Delete VM` 버튼을 통해 삭제를 할 수 있다.

![](media/azure_instances_006.png)

![](media/azure_instances_007.png)

![](media/azure_instances_008.png)

![](media/azure_instances_009.png)

- jjobs-instance, instance-1를 제외하고 나머지는`Delete VM` 버튼으로 정리한다.



## Cloud & CLI 템플릿

### Cloud

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

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

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

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

![](media/azure_manager_015.png)

![](media/azure_manager_016.png)

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

![](media/azure_templateCloud_001.png)

| 항목             | 입력값              | 설명                                                |
| ---------------- | ------------------- | --------------------------------------------------- |
| 설명             | Cloud               | 화면에 표시되는 Step 이름                           |
| Pool ID          | test-pool-1         | 동적으로 생성될 VM Instances 를 관리하는 그룹 ID    |
| 동작 유형        | 생성                |                                                     |
| Instance Manager | AZURE_TEST          |                                                     |
| 에이전트 그룹    | Cloud Template Test | 동적으로 생성된 에이전트가 연결될 에이전트 그룹     |
| 생성 개수        | 5                   |                                                     |
| 이미지ID         | jjobs-image         | 입력하지 않으면 계정에 등록된 Agent Image name 사용 |

- `F4` 를 눌러 `Job 속성 편집 > 실행 정보 > 실행구역 변경` 을 눌러 `agent1`으로 지정한다. 동적으로 생성된 에이전트로 로드 발란스 되지 않도록 하기 위함이다.

![](media/azure_templateCloud_008.png)

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

![](media/azure_templateCloud_002.png)

![](media/azure_templateCloud_003.png)

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

![](media/azure_templateCloud_004.png)

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

![](media/azure_templateCloud_005.png)

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

![](media/azure_templateCloud_006.png)

![](media/azure_templateCloud_007.png)

> 여기서는 사용방법에 대한 설명 정도로 마무리하며, 
>
> 업무에 적용하기 위해서는 무거운 작업을 다음 Step으로 연결하여 실행구역을 생성한 `에이전트 그룹` 으로 설정하여 동시처리가 되도록 유도해야 한다. 
>
> 그리고 작업이 마치면 `소멸` Step을 생성하여 자원을 정리해준다.

###CLI

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

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

![](media/azure_templateCli_001.png)

| 항목             | 입력값                                                     | 설명                                   |
| ---------------- | ---------------------------------------------------------- | -------------------------------------- |
| 설명             | CLI                                                        | Step 이름                              |
| Instance Manager | AZURE_TEST                                                 |                                        |
| Encoding         | utf-8                                                      | 로그를 남길때 사용할 인코딩            |
| Command          | vm show --resource-group jjobs-group --name jjobs-instance | jjobs-instance 정보 조회 (az 생략가능) |

- `로그레벨`을 조정하여 실행한 후, `실행 상세 정보 확인` 버튼을 눌러 `Step 실행` 탭에서 `COMPLETED` 상태를 클릭하여 로그를 확인한다.

![](media/azure_templateCli_002.png)

![](media/azure_templateCli_003.png)

![](media/azure_templateCli_004.png)

![](media/azure_templateCli_005.png)

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

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

![](media/azure_templateCli_006.png)

![](media/azure_templateCli_008.png)

![](media/azure_templateCli_007.png)

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

> FROM_JSON(jsonData,"key") 함수는 jsonData가 Map 형식으로 되어 있어야 작동함에 유의해야 한다. 
>
> 만약 List 형식일 경우는 List의 첫번째 정보를 Map으로 변환하여 처리하게 된다.

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

![](media/azure_templateCli_009.png)

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

![](media/azure_templateCli_010.png)

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

![](media/azure_templateCli_011.png)

![](media/azure_templateCli_012.png)

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



## Legal Notice

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