이번 세미나를 통해 여러분이 ansible의 성능 및 대규모 호스트의 관리 방법에 대한 질문을 주셨는데 저의 ansible 경험이 부족하여 정확한 답변을 드리지 못하였습니다. 수십대 수준이 아닌 수천대 수만대가 여러 곳에 분산되었을 때 어떻게 효율적으로 관리할 수 있는 고민하게 되었습니다. 그래서 자료를 조사하다가 좋은 성능 관리 기법을 찾게 되어 소개해드리려고 합니다.
원문은 아래와 같습니다.
https://www.ansible.com/blog/ansible-performance-tuning
[요약]
1. 패키지 미러사이트를 효율적으로 사용하기
- 수천대의 서버들이 인터넷 repository를 사용하게 하지말고, 그룹별 또는 지역별 repository를 구성하여 여기서 다운받게 하는 것입니다. 특히 기업IDC에서와 같이 폐쇄망을 사용할 때는 이렇게 local repository를 만들고 모든 repository를 동기화 시켜 놓는 것이 패키지 다운로드 시간과 관리면에서 좋을 것입니다.
2. 패키지 설치를 효율적으로 하기
- with_items 를 활용해서 하나의 ssh 세션으로 패키지를 설치하게 하는 것입니다. yum module을 여러개 사용할 때와 하나의 yum module을 쓰는 차이점은 아래 명령의 차이와 같을 것입니다.
<code>
#yum install python python-doc #(하나의 세션사용)
or
#yum install python; yum install python-doc #(두개의 세션사용)
</code>
3. Fork 수 알기
- folk 파라미터는 ansible이 동시에 몇 개의 host에 작업을 실행하는가를 결정합니다. 기본값은 상당히 보수적으로 설정되어 값이 "5"이며 5대의 서버에서만 동시에 실행되고 이 작업이 끝나야 다른 호스트에서 해당 작업들이 수행되기 때문에 실행시간이 늘어나게 됩니다. 즉, ansible이 관리하는 서버들이 수천대라고 하면 fork 를 100 이상으로 늘려서 작업시간을 빨리 끝내게 할 수 있습니다. folk는 동시에 작업이 실행될 호스트수라고 생각하기면 될 것입니다.
4. openssh 연결 팁
- ansible.cfg에서 "ControlPersist" 값을 늘려 connection timeout값을 늘려주는 방법.
- "pipelining" 설정을 통해 ansible module의 파일 전송 속도를 향상 시킬 수 있음
- 위 두 부분은 테스트가 필요합니다.
5. ansible 전용 ssh 클라이언트(paramiko) 사용하기
- 기본 openSSH 클라이언트는 작업마다 새로운 ssh connection을 맺어서 작업을 수행하고 관리호스트가 많은 경우에는 이 시간도 상당히 많은 시간을 잡아먹습니다. 하지만 "paramiko" 의 "accelerated mode"를 사용하게 되면 기본에 비해 4-5배 성능향상을 볼 수 있습니다.
6. Pull Mode 사용
- 다른 puppet이나 chef 와 달리 ansible은 push 방식입니다.즉 중앙서버에서 관리되는 호스트들로 명령을 밀어넣는 방식입니다. 하지만 pull 모드를 사용하면 관리되는 호스트들에서 중앙서버에 직접 명령을 요청할 수 있게 됩니다.
7. Immutable Systems
- #정확한 작동방식을 제가 모르기 때문에 생략하겠습니다. 원문을 참고하시기 바랍니다.
--
이 메일은 Google 그룹스 'sysadminstudy' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 sysadminstud...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 sysadm...@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/sysadminstudy에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.
Notable CCA tools include:
Tool Name | Released by | Method | Approach |
---|---|---|---|
Ansible Tower | Ansible | Push | Declarative & Imperative |
CFEngine | CFEngine | Pull | Declarative |
Chef | Chef | Pull | Imperative |
Otter | Inedo | Push | Declarative & Imperative |
Puppet | Puppet | Pull | Declarative |
SaltStack | SaltStack | Push | Declarative & Imperative |