5.4. 자동화 컨트롤러 용량 결정 및 작업에 미치는 영향
자동화 컨트롤러 용량 시스템은 인스턴스에 사용할 수 있는 리소스 양과 실행 중인 작업의 크기( impact라고 함)를 기준으로 인스턴스에서 실행할 수 있는 작업 수를 결정합니다. 이를 결정하는 데 사용되는 알고리즘은 다음 두 가지를 기반으로 합니다.
-
시스템에서 사용할 수 있는 메모리 양(
mem_capacity
) -
시스템에서 사용할 수 있는 처리 용량(
cpu_capacity
)
용량은 인스턴스 그룹에도 영향을 미칩니다. 그룹은 인스턴스로 구성되므로 인스턴스를 여러 그룹에 할당할 수도 있습니다. 즉, 한 인스턴스에 미치는 영향은 다른 그룹의 전체 용량에 영향을 미칠 수 있습니다.
인스턴스 자체가 아닌 인스턴스 그룹을 다양한 수준의 작업에서 사용하도록 할당할 수 있습니다. 자세한 내용은 자동화 실행 구성 의 구성을 참조하십시오.
작업 관리자가 그래프를 준비하여 작업이 실행되는 그룹을 결정할 때 인스턴스 그룹의 용량을 아직 시작할 준비가 되지 않은 작업으로 커밋합니다.
소규모 구성에서 작업에 하나의 인스턴스만 사용할 수 있는 경우, 작업 관리자를 사용하면 인스턴스를 용량 이상으로 푸시하더라도 해당 작업을 인스턴스에서 실행할 수 있습니다. 이렇게 하면 under-provisioned 시스템의 결과로 작업이 중단되지 않습니다.
추가 리소스
- 컨테이너 그룹에 대한 자세한 내용은 자동화 실행 구성 의 인스턴스 그룹 및 컨테이너 그룹에 대한 용량 설정을 참조하십시오.
- 분할된 작업 및 용량에 미치는 영향에 대한 자세한 내용은 작업 슬라이스 실행 동작을 참조하십시오.
5.4.1. 용량 알고리즘의 리소스 결정
용량 알고리즘은 시스템이 동시에 실행할 수 있는 포크 수를 결정합니다. 이러한 알고리즘은 Ansible이 동시에 통신할 수 있는 시스템 수를 제어합니다. 자동화 컨트롤러 시스템이 실행 중인 포크 수를 늘리면 더 많은 작업을 병렬로 수행하여 작업이 더 빠르게 실행될 수 있습니다. 그러나 이로 인해 시스템의 부하가 증가하여 작업 속도가 느려질 수 있습니다.
기본 mem_capacity
에서는 시스템을 메모리 부족으로 보호하면서 처리 리소스를 오버 커밋할 수 있습니다. 대부분의 작업이 프로세서 바인딩이 아닌 경우 이 모드를 선택하면 포크 수가 최대화됩니다.
5.4.1.1. 메모리 상대 용량
mem_capacity
는 포크당 필요한 메모리 양을 기준으로 계산됩니다. 내부 구성 요소의 오버헤드를 고려하여 포크당 약 100MB입니다. Ansible 작업에서 사용할 수 있는 메모리 양을 고려할 때 용량 알고리즘은 다른 서비스의 존재를 고려하여 2GB의 메모리를 예약합니다. 이에 대한 알고리즘 공식은 다음과 같습니다.
(mem - 2048) / mem_per_fork
다음은 예제입니다.
(4096 - 2048) / 100 == ~20
메모리가 4GB인 시스템은 포크 20개를 실행할 수 있습니다. mem_per_fork
값은 SYSTEM_TASK_FORKS_MEM
값을 설정하여 제어되며 기본값은 100입니다.
5.4.1.2. CPU 상대 용량
Ansible 워크로드는 종종 프로세서 바인딩입니다. 이러한 경우 동시 워크로드를 줄여 더 많은 작업을 더 빠르게 실행하고 해당 작업의 평균 완료 시간을 줄일 수 있습니다.
mem_capacity
알고리즘이 포크당 필요한 메모리 양을 조정하는 것처럼 cpu_capacity
알고리즘은 포크당 필요한 처리 리소스 양을 조정합니다. 기준 값은 코어당 포크 4개입니다. 이에 대한 알고리즘 공식은 다음과 같습니다.
cpus * fork_per_cpu
예를 들어 4코어 시스템은 다음과 같습니다.
4 * 4 == 16
SYSTEM_TASK_FORKS_CPU
값을 설정하여 fork_per_cpu
값을 제어할 수 있습니다. 기본값은 4입니다.
5.4.2. 작업이 용량에 미치는 영향
용량을 선택할 때 각 작업 유형이 용량에 미치는 영향을 이해하는 것이 중요합니다.
Ansible의 기본 포크 값은 5입니다. 그러나 그 보다 적은 수의 시스템에 대해 실행되도록 자동화 컨트롤러를 설정하면 실제 동시성 값이 더 낮습니다.
자동화 컨트롤러에서 작업이 실행되면 Ansible 상위 프로세스를 보완하기 위해 선택한 포크 수가 1씩 증가합니다.
예
포크 값이 5인 5개의 시스템에 대해 플레이북을 실행하는 경우 Job Impact 관점에서의 실제 포크 값은 6입니다.
5.4.2.1. 자동화 컨트롤러에서 작업 유형이 미치는 영향
작업 및 임시 작업은 이전 모델인 포크 +1을 따릅니다. 작업 템플릿에 포크 값을 설정하면 작업 용량 값은 제공된 포크 값의 최소값과 보유한 호스트 수에 1을 더한 값입니다. +1은 상위 Ansible 프로세스를 고려해야 합니다.
인스턴스 용량에 따라 특정 인스턴스에 할당되는 작업이 결정됩니다. 작업 및 임시 명령은 해당 포크 값이 높을수록 용량을 더 많이 사용합니다.
다음을 포함한 작업 유형에는 고정된 영향을 미칩니다.
- 인벤토리 업데이트: 1
- 프로젝트 업데이트: 1
- 시스템 작업: 5
작업 템플릿에 포크 값을 설정하지 않으면 작업에서 Ansible의 기본 포크 값인 5를 사용합니다. 그러나 작업이 5개 미만의 호스트가 있는 경우 더 적은 수를 사용합니다. 일반적으로 포크 값을 시스템에서 수행할 수 있는 것보다 높게 설정하면 메모리가 부족하거나 CPU를 초과 커밋하여 문제가 발생할 수 있습니다. 사용하는 작업 템플릿 포크 값이 시스템에 적합해야 합니다. 포크를 1000개 사용하는 플레이북이 있지만 개별적으로 이렇게 많은 용량이 있는 시스템이 없는 경우, 시스템 크기가 부족하여 성능 또는 리소스 문제가 발생할 위험이 있습니다.
5.4.2.2. 올바른 용량 선택
CPU 종속 또는 메모리 바인딩된 용량 제한에서 용량을 선택하는 것은 최소 또는 최대 포크 수 사이에서 선택하는 것입니다. 이전 예에서 CPU 용량은 최대 16개의 포크를 허용하는 반면 메모리 용량은 20개를 허용합니다. 일부 시스템의 경우 이러한 차이가 클 수 있으며 이 둘 사이의 균형을 유지해야 할 수 있습니다.
인스턴스 필드 capacity_adjustment
를 사용하면 고려할 양을 선택할 수 있습니다. 이 필드는 0.0에서 1.0 사이의 값으로 표시됩니다. 값을 1.0으로 설정하면 가장 큰 값이 사용됩니다. 이전 예제에서는 메모리 용량을 사용하므로 포크 값 20개를 선택할 수 있습니다. 값을 0.0으로 설정하면 가장 작은 값이 사용됩니다. 값 0.5는 두 알고리즘 사이의 50/50 균형이며 18은 다음과 같습니다.
16 + (20 - 16) * 0.5 = 18
프로세스
용량을 보거나 편집합니다.
-
탐색 패널에서
선택합니다. - 인스턴스 그룹 목록 뷰에서 필요한 인스턴스를 선택합니다.
인스턴스 탭을 선택하고 용량 조정 슬라이더를 조정합니다.
참고슬라이더는 인스턴스 용량 알고리즘이 포크를 줄이는지(왼쪽을 넘어) 더 많은 포크를 산출하는지(오른쪽 이후)를 조정합니다.