본문 바로가기

클라우드/앤서블(Ansible)

앤서블 Ansible 작업 제어 4 / 위임

# 위임

하나의 플레이를 실행 할 때 플레이에서 실행 할 호스트, 플레이를 실행 할 작업(task)이 있다.
작업들은 별도로 설정하지 않는 한 호스트에 실행이 된다. 위임(delegation)은 호스트에 정의 되어있는 여러 작업들중에 일부분의 작업을 다른 호스트에서 실행할수 있다.

# 위임 할 수 없는 모듈
include / add-host /debug 모듈은 항상 제어노드에서 실행된다.


# 작업의 위임

 


 로드밸런서가 있고 웹서버가 두개 있다. 웹서비스를 구성, 업데이트하는 기능을 가진 플레이북을 만든다.
웹서비스를 24/7 무중단서비스를 해야한다. 클라이언트는 로드밸런서로 계속 요청하고 로드밸런서의 백엔드에 구성되어있는 두개의 시스템으로 분산시켜준다. web1번 작업도중에 웹서비스가 실행될수 없다(웹서비스가 재시작이 된다) 트래픽을 web1로 보내면 사용자들은 오류를 만난다. 그래서 web1번 작업 중에는 트래픽을 전부 web2번으로 보내준다.
서비스를 -stop -update -start 작업이 이루어 질 때 까지는 서비스 할 수 없다. -stop을 하기 전에 로드밸런서에서 web1 백엔드를 제거시켜야한다. -stop -update -start 작업을 하고 로드밸런서에서 백엔드 1번을 추가해야한다. 일부 작업이 다른시스템에서 실행 되어야한다면 작업을 위임한다. 전체적인 흐름은 웸에서 작업을 하는데, 제외하고 추가하는 두가지 작업은 로드밸런서에서 실행시킨다.

 

 

# 로컬 호스트에 작업 위임

더보기

- hosts: webservers
  serial: 5

  tasks:
    - name: Take out of loadbalancer pool
      local_action:
        command /usr/bin/take_out_of_pool {{ inventory_hostname }}

    - name: Actual step would go here
      apt:
        name: acme-web-stack
        state: latest

  tasks:
    - name: Add back to loadbalancer pool
      local_action:
        module: command 
        cmd:  /usr/bin/add_back_to_pool {{ inventory_hostname }}

local_action 모듈은 local (컨트롤러) 실행시킨다. deligate_to: localhost 와 같다.

 

 

# 팩트 수집 위임

더보기

- host: app_servers
  tasks:
    - name: Gather facts from db servers
      setup:
      delegate_to: "{{ item }}"
      delegate_facts: true
      loop: "{{ groups[ 'dbservers'] }}"

web에서 작업중인데 db의 데이터가 필요할 때 , db와 연결하는 작업이 있다면 (ex. wordpress에서 wp-config,php 파일을 설정할때 원격 db ip설정을 한다, 미리 변수로 만들수도있지만 db시스템의 ip를 동적으로 가져올수도 있다) setup 모듈을 이용해서 fact 수집을 위임한다.

 

다른 시스템에서 웹서비스에 접근이 되는지 위임을 해서 확인 한다.