Home | 문태준 | 시스템어드민 메일링 | Sys Admin 세미나
Skip to end of metadata
Go to start of metadata

ContolTier 소개

controltier-joon-20091122.ppt 2009.11.22 문태준 개인적으로 발표한 자료

ControlTier 는 무엇인가?

http://open.controltier.org/wiki/What_is_ControlTier

ControlTier 는 여러개의 노드, 애플리케이션 타이어에 걸친 애플리케이션 서비스 관리를 위한 프레임워크
What is ControlTier? ControlTier is a community driven, cross-platform software system used to coordinate application service management activities across multiple nodes and application tiers. The project is fully open source and many of the project contributions come from ControlTier Inc's ongoing consulting work for large scale e-commerce, software-as-a-service, and financial services operations.

기존 시스템의 문제점

ControlTier가 없는 경우와 있는 경우의 차이점

Puppet, Cfengine 과의 차이점은?

puppet, cfengine : 시스템 레벨의 설정 관리
ControlTier : 여러 서버에 걸쳐 애플리케이션 deply, 상태 제어, 각장 관리작업 수행을 위한 툴

Capistrano 또는 Func 와 차이점은?

basic Command Dispatching Frameworks 에서는 동일하나 자동화 라이브러리, 웹 기반의 툴을 통하여 엔터프라이즈 또는 매우 규모있는 웹 운영팀에서 바로 사용할 수 있는 완전 자동화된 시스템을 구축하는 것이 가능. 또한 Capistrano 나 Func 에 없는 에러 처리, 중앙화된 로깅 시스템이 있음. Java로 된 프로그램이지만 Java를 알 필요가 없고 본인이 잘 쓰는 스크립트 언어를 이용하면 됨.
원격실행은 SSH를 이용하는데 윈도우에서도 이용을 할 경우 Cygwin 을 이용할 것을 추천하고 있으며 윈도우즈용 OpenSSH를 이용할 수도 있습니다.

참고자료

Web Ops 2.0: Achieving Fully Automated Provisioninghttp://www.controltier.com/datasheets/FullyAutomatedProvisioning_Whitepaper.pdf

ControlTier 주요 구성요소

  • Jobcenter : 운영을 위한 컨트롤 패널. WebUI 또는 CLI를 통하여 각종 스크립트, 사전 설정한 명령을 실행할 수 있음. tag 또는 필터링을 이용하여 여러대의 시스템에 명령을 실행할 수 있음. 웹기반으로 작업을 생성, 스케쥴링, 실행 가능. 지식이 적은 사람에게도 관리작업을 위임 가능
  • Workbench : CMDB, Repository, Automation designer(설정 데이터, 자동화 코드를 통합하는 기능. workflow 작성 등)
  • Reportcenter : 누가, 무엇을, 언제, 어디서 했는지 정보 확인. 모든 운영 작업에 대한 히스토리 관리 및 추척. RSS 피드를 이용하여 볼 수 있으며웹 기반의 API를 통하여 레포트 센터 레포지토리를 검색할 수 있음. 완전히 커스터마이징할 수 있는 보고 템플릿과 로직을 만들고 추가할 수 있다. (BIRT 사용) 향후에는 특정 패턴 이벤트에 대해서 알람(이메일 또는 RSS)할 수 있는 기능, 레포포센터 데이터를 좀더 시각적으로 보여줄 수 있는 기능, 기존에 있는 스크립트나 툴에서 레포트센터에 이ㅂ젠트를 보낼 수 있는 태그나 간단한 api 등 준비중임
  • WebDAV : 애플리케이션, 각종 설정, 프로시저 등을 위한 저장소.유지보수를 위한

프로그램 설치

설치매뉴얼http://open.controltier.org/wiki/Installation

프로그램 다운로드http://open.controltier.org/wiki/Download

설치 형태

Server
Client-only

의존성 설정

http://open.controltier.org/wiki/System_requirementshttp://open.controltier.org/wiki/Dependencies

JDK 5 설치 및 CTIER_ROOT 설정

ControlTier 에서 JDK 5 를 써야 하는 문제가 있어서 다른 프로그램에서 jdk 다른 버전을 필요로 하는 경우 충돌이 생길 수 있다.
이런 경우에는 CTIER_ROOT/pkgs 에 바이너리 형태로 되어있는 jdk 를 설치하고 환경설정에서 controltier 프로그램에 대해서만 jdk를 다르게 설정해주고 실행을 하는 방법이 있다.
아래 내용은 이것까지 반영하지 않았다.

JDK 5 버전이 필요. Java 6 is currently not supported.
JDK 5 다운로드 : http://java.sun.com/javase/downloads/index_jdk5.jsp http://java.sun.com/javase/downloads/5u20/jdk

현재는 jdk1.5.0_20 를 아래 디렉토리에 rpm 으로 설치하였다.
/usr/java/jdk1.5.0_20

alias 를 걸어 jdk 설정을 편리하게 한다.

해당 계정의 .bash_profile 에 아래 내용을 추가한다. 이 설정은 설치하기 전 쉘상에서 실행을 해도 되며 설치를 하고나서 bash_profile 에서 .ctierrc 를 읽어들이도록 설정하면 된다.

Graphviz 설치

서버에만 필요. Workbench web 인터페이스에서 그래프를 보는 데 필요함

CentOS, RHEL 에서는 http://www.graphviz.org/Download_linux_rhel.php 내용을 참고한다.http://www.graphviz.org/graphviz-rhel.repo 파일을 /etc/yum.repos.d/ 디렉토리에 받고 설치한다.

이상하게도 graphviz-php 패키지만 graphviz 상위버전을 요구해서 yum.conf 에서 설치하지 않도록 하였다.
/etc/yum.conf 에 exclude=graphviz-php* 옵션을 넣어주면 된다.

ssh 설정

ControlTier 는 원격실행에 SSH 를 사용함. 기본 port 22를 사용하며 설정을 어떻게 변경하는지는 확인 필요

설치 프로그램 실행

install.sh 를 실행하면서 몇가지 옵션을 줄 수도 있다. 노드명은 호스트네임을 자동으로 가져오는데 설치하면서 호스트네임은 변경할 수도 있다. 옵션중 demo 라는 기본 프로젝트를 생성할 수 있는 옵션도 있다.

서버 프로그램 사용

환경설정

.bash_profile 등에 아래 내용 설정하여 사용함. http://open.controltier.org/wiki/ControlTier_Environment_Variables 참고

ControlTier 를 설치하면 자동으로 홈디렉토리에 .ctierrc 파일을 만들어준다. 그러면 프로그램 설치 후 bash_profile 에서 이 파일을 읽어들이도록 하는 것이 낫다.

프로그램 시작 , 중지

start
$JETTY_HOME/bin/jetty.sh start

stop
$JETTY_HOME/bin/jetty.sh stop

Check status
$JETTY_HOME/bin/jetty.sh check

프로그램 시작을 하였으면 웹에서 8080 으로 접속을 하면 되며 아이디와 비밀번호는 기본 default/default 가 첫 화면에 나온다.

참고자료

ClientACL ldap 을 이용하여 그룹별 관리 가능http://open.controltier.org/wiki/ClientACL

Setting up an OpenLDAP instance to support ControlTierhttp://open.controltier.org/wiki/Setting_up_an_OpenLDAP_instance_to_support_ControlTier

client program 이용하기

설치 및 세팅

client 프로그램만 설치하기

http://open.controltier.org/wiki/Client-only_install 정보 이용
여기에서 여러개의 클라이언트 한꺼번에 등록하기는 http://open.controltier.org/wiki/Bulk_Node_registration 를 참고함.

ctl-exec 설정

CTL_BASE 환경변수가 설정되어 있어야 한다. 그리고 path 에 ctl-exec 가 들어있지 않기 때문에 추가를 해준다.

ssh 설정

controltier 에서 원격실행은 ssh를 이용한다. 포트번호는 ssh 기본 포트인 22 번을 사용한다. 바꾸는 방법 찾아 보아야 함.
ctl-exec 를 처음 실행하면 getting a com.jcraft.jsch.JSchException: Auth cancel 라는 에러가 나온다.
ctl, ctl-exec 에서는 dsa key 를 이용하기 때문에 dsa key 로 ssh 키를 생성하여 authorized_keys 에 추가해 주어야 한다.http://open.controltier.org/wiki/FAQ#Mismatched_SSH_keys 참고

Approaches for building solutions

Script-driven examples 과 Model-driven examples 두가지 모델이 있다.

Script-driven approach

http://open.controltier.org/wiki/Script-driven_approach

기존 네트워크를 통하여 for loop 돌려 사용을 하던 ssh 쉘을 관리 프로세스에 따라 실행하는 방식
ctl-exec는 자신이 만든 스크립트를 이용시, ctl 은 미리 ControlTier 에서 정의된 명령을 이용할 경우 이용한다.

ctl-exec

http://open.controltier.org/wiki/Running_ctl-exec

simpletomcat 이라는 호스트(또는 그룹)에 simpleTomcat.sh 를 실행하는 예제. 자동으로 simpleTomcat.sh 를 각 클라이언트로 업데이트하고 실행을 하며 실행결과를 확인함.

ctl

http://open.controltier.org/wiki/CTLhttp://open.controltier.org/wiki/Running_ctl
자신이 작성한 스크립트 외에 ControlTier 에 들어있는 CTL 모듈을 이용할 수도 있다.

아래는 netutil 을 이용하여 8080포트가 떠 있는 지 확인을 한다. 특정 호스트를 지정하지 않으면 project 라는 프로젝트에 속한 모든 호스트에 대한 정보가 나온다.

ctl, ctl-exec 공동 옵션

노드 필러링 옵션 및 작업 순서 - http://open.controltier.org/wiki/Use_node_filtering_options

노드선택옵션 :

  • -I,--nodes: 명령을 실행할 노드 (정규표현식 이용)
  • -X,--xnodes: 명링실행을 제외할 노드 (정규표현식 이용)

유용한 옵션 :

  • -C,--threadcount: 해당하는 노드에 명령을 실행시 스레드 갯수
  • -K: 에러가 발생해도 실행을 계속 함
  • -F, --failednodes: 명령실행이 실패한 노드를 저장할 파일명. 실패한 노드에 대해서 재실행시 유용함

실행할 노드 지정하기 :

  • hostname - hostname of the node default keyword
  • name - entity name of the node, which may be different than hostname
  • type - type name of the node, typically "Node"
  • tags - a set of user defined tags
  • os-name - operating system name, e.g. "Linux", "Macintosh OS X"
  • os-family - operating system familiy, e.g. "windows","unix"
  • os-arch - operating system CPU architecture, e.g. "x86", "x386"
  • os-version - operating system version number
  • Attributes

관련 예제

http://open.controltier.org/wiki/Exampleshttp://open.controltier.org/wiki/Scripted_appserver_war_deployment_example
Scripters cookbook http://open.controltier.org/wiki/Scripters_cookbook

Model-driven approach

http://open.controltier.org/wiki/Model-driven_approach

관리 프로세스에 따라 실행을 하는 방법. 각 서비스별 life cycle workflow 를 이용함.

  • 서비스 정의 : 서비스(Services)로서 작업할 내용을 정의, 필요한 패키지를 저장, 노드 및 그룹 할당
  • 통합 : 서비스 라이프 사이클 워크플로우에 관리할 프로세스에 대한 스크립트, 작업을 추가, 설정 템플릿 생성, 세팅하기
  • ControlTier 확장 : 서비스, 저장할 데이터 타입, 명령, 워크플로우, 기타 다른 모듈을 신규로 만들기

릴리즈와 서비스 관리 프로세스를 자동화하기 위한 구조적인 방에 대해서는 아래 페이지에 상세하게 나와 있음

패키지 업로드 : 패키지 등록, 빌더 이용하기

Deployment Cycle 관리 : 패키지 업로드, 서비스 등록, 시작, 정지 스크립트 통합, 설정하기

중앙에서 관리하기 : 사이트 이용하기(서비스 셋을 여러개 묶은 그룹이며 서비스간의 의존성 정의), Jobcenter 이용하기(웹 UI로 명령실행), PROJECT BUILD 이용하기 (버전관리 시스템에서 소스를 가져와 빌드 , 서버에 업로드, 서비스 정의, 노드 할당 등을 자동으로 처리)

예제

http://open.controltier.org/wiki/Model-driven_examples

아래 예제들은 직접 설치하여 테스팅을 해보면 된다. Model-driven Approach 는 기본 개념을 이해하는데에는 시간이 좀 걸린다.

엔터프라이즈 환경에 대해 적용하는 부분은 http://open.controltier.org/wiki/Dukes_Bank_J2EE_examples 를 참고한다.

예제

운영체제

설명

Mock Unix Service

Linux/Unix

Service 타입 설정, 애플리케이션 프로세스 실행상태 관리하기

Mock Site

Linux/Unix

Site 타입 설정, command dispatching을 통하여 서비스와 연관된 세트 관리하기

Service Package Deployment

Linux/Unix

두개의 패키지 deployment 를  관리하기위한 서비스 설정, 설정 파일 커스터마이징하기, startup 과 shutdown 관리하기

simple Builder

Linux/Unix

Builder를 설정하여 다음을 통합하는 예제. CVS 에서 코드를 체크아웃, Ant 를 빌드하는 스크립트 호출, 빌드된 패키지를 저장소에 업로드하기. 간단한 웹 애플리케이션인 war 파일을 생성함

Continuous Deployment with Tomcat

Linux/Unix

지속적인 개발을 구현하는 예제임. 코드가 변경되었을 경우 자동으로 빌드하고 톰캣서버에 WAR 파일로 업로드딩을 하여 서비스 환경에 자동으로 적용을 함(서비스 적용이 대몬을 내리고 war 파일 설치 후 다시 대몬을 올림)

Java-based Service

Windows

This page shows the basics of using an object of the JavaServiceWrapper type to manage the runtime lifecycle of a JBoss Application Server.

Mock Site (windows)

Windows

This example describes the configuration and behavior of the core Site type and its ability to manage a set of related Services via command dispatching.

Service Package Deployment (windows)

Windows

This example shows how to configure a Service to manage the deployment of two packages, customize a configuration file, and manage of startup and shutdown.

Service Package Deployment Example

방법론 및 시스템관리 패러다임

Model-driven approach 에 의한 방법론

다음의 질문을 던짐:
1. 기본 자동화 프레임워크에서 다룰 대상
2. 패키지 프로세스
3. 빌드 프로세스
4. deployment 프로세스
5. 전체적인 프로세스상에서 어떻게 조율이 되고 있는가?
6. 이러한 프로세스를 다룰 관리 직원을 어떻게 조직할 것인가?

일반적인 접근 : 나누어서 처리. (divide and conquer)

Package-centric paradigm

ControlTier 오브젝트를 통하여 프로세스 모델링

Framework driven control

중요한 몇가지 일반 규칙

  • 논리적인 부분으로 나누어서 처리
  • 저수준 프로시저에서 출발하여 고수준으로 올라감
  • 커스터마이징한 하위타입을 만드는 것은 피함
  • 명명규칙을 만듬. (Establish namespace and naming convention)

모듈 개발은 Workbench 또는 프로젝트빌더? GUI vs. CLI

새로운 사용자일 경우 Workbench GUI를 이용하여 작업
GUJI를 좋아하지 않고 쉘 환경에 익숙하면 ProjectBuilder를 이용

방법론 실제 구현하기

Understanding the abstracted administration paradigm

추상화된 관리 패러다임에 대한 이해 http://open.controltier.org/wiki/Understanding_the_abstracted_administration_paradigm

ControlTier 프로젝트는 자동화, 추상화된 관리를 제공하자는 것임

  • 노드 : 노드 태그, 속성을 이용하여 노드를 추상화. 분산된 환경(사이트)에서 서비스 관리에 사용할 수 있는 재사용 가능한 명령을 정의 가능함.
  • 서비스 : 길게 실행되는 애플리케이션 컴포넌트를 말함. 사이트는 하나 또는 여러대의 시스템에서 관리할 수 있는 서비스를 말함. 환경에 따라 QA, 실서버 적용 등으로 나누어 설정하는 것이 가능
  • 프로세스 : 서비스 관리 라이프사이클은 build, stage, install, update, stop, start, configure, check, roll back, etc. 등이 있음. 각 라이크 사이클을 실행할 수 있는 다양한 타입이 있으며 서비스 관리 프로세스는 서로 다른 여러 시스템에 걸쳐 다단계로 실행이 됨. 재사용 가능한 workflow 를 이용. 또한 코드의 변경없이 순차적으로 또는 병렬로 실행이 가능함.

재요약

  • Abstract the nodes, for better visibility into the services.
  • Abstract the services, to gain better visibility of the management processes.
  • Abstract the processes, for standardized reusable life cycle steps and workflows

적은 코드가 적은 유지보수 작업을 필요로 하며, 더 좋은 재사용가능성을 줌. 다양한 변종을 제거하여 서비스 관리에서 문제가 생기는 것을 방지할 수 있음

기타 참고자료

Core Type Guide

http://open.controltier.org/wiki/Core_Type_Guide

The Base Type : Setting, Managed-Entity, Node
The Utility Type : davutil, fileutil, netutil, shellutil, textutil, modelutil, logicutil
The Deployment Type : Packgae, Service, Site, Builder, Updater, ProjectBuilder, Mediator

교육자료

http://open.controltier.org/wiki/Category:Training_Topics

Architect 에서 Build and Deployment Workflow 그림

Roles & Responsibilities

System Admin, Package Manager, Service Manager, Architect 로 역할을 나누어서 설명을 하고 있음. http://open.controltier.org/wiki/Course_-_ControlTier_Intro#Roles_.26_Responsibilities

Roles

The Control Tier typically consists of these roles:

  • System Administrator : This person is responsible for installing and maintaining the ControlTier software and its configurations. They are in charge of maintaining the registry of Nodes in the system, and managing user accounts and roles.
  • Package Manager : This person is often known as the "Build Engineer" or "Release Engineer" or "SCM Guy". They are responsible for creating new builds of software components, as well as maintaining and populating a repository of build artifacts. Often this also includes third-party or externally supplied package artifacts. They produce packages that are consumed by the Service Manager.
  • Service Manager : Often called the "Application Administrator" or "Deploy Guy", this person is responsible for deploying software packages, and managing configurations. They design and maintain the topology of a set of applications in the environment. They consume build Packages produced by the Package Manager, and must adapt their designs to the Nodes made available by the System Administrator.
  • Architect : Often a "System Engineer", This person creates the management integration code and scripts for the deployment process. They design and develop a custom Type model in the ControlTier software to represent the unique Deployment processes needed for the business service architecture. They maintain a library of code defining the Types used by the Service Manager as well as the Package Manager.

Responsibilities 와 Activities 는 위의 자료 참고

Platform Components

High availability and large scale configuration

http://open.controltier.org/wiki/High_availability_and_large_scale_configuration

대규모 환경에서는 다음과 같은 문제가 생김

  • 성능 병목 현상
  • 장애발생 가능성 (Single point of failure)
  • 제어안된 변경 발생 (Uncontrolled change)

이에 대해서 다음의 설정 및 변경 모델 설명함

  • 모든 필요한 데이터와 생성물은 빌드 프로세스에서 packaged artifacts 로 생성이 됨.
  • 중앙 서버의 병목현상은 실시간 데이터 싱크로부터 클라이언트의 연결을 끊고 패키지된 데이터를 사용하는 것으로 해결함
  • 오브젝트 데이터, 모듈, deployments 는 사전 인가된 변경 윈도우 시간에만 가능하도록 함

위에서 말하는 해법이 이해가 가지는 않는데 사전에 패키지형태로 만들어 각 노드에 배포를 하고 각 노드에서 서버에 접속할 필요없이 작업을 처리하는 것을 말하는 것 같음. 패키지 다운로드에는 캐쉬를 이용.
여기서 궁금한 것은 그렇다면 실행결과를 어떻게 모니터링을 하는지 레포팅이 되는지 궁금함.

rpm

RPM package builder http://controltier.sourceforge.net/docs/latest/elements/reference/modules/type_RpmBuilder.html

A binary RPM package type http://controltier.sourceforge.net/docs/latest/core/reference/modules/type_rpm.html

Labels
  • No labels