20장. Ansible Go 더욱 빠르게 만들기
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
Ansible을 정기적으로 사용하기 시작하면 플레이북을 더 빨리 실행할 수 있으면 좋겠다는 생각이 들 때가 많습니다. 이 장에서는 Ansible이 플레이북을 실행하는 데 걸리는 시간을 줄이기 위한 전략을 소개합니다.
SSH 멀티플렉싱 및 제어퍼지스트
이 책을 여기까지 읽으셨다면, Ansible이 서버와 통신하기 위한 기본 전송 메커니즘으로 SSH를 사용한다는 것을 알고 계실 것입니다. 특히 기본적으로 시스템 SSH 프로그램을 사용합니다.
SSH 프로토콜은 TCP 프로토콜 위에서 실행되므로 SSH로 원격 머신에 연결할 때는 새로운 TCP 연결을 만들어야 합니다. 클라이언트와 서버가 이 연결을 협상해야 실제로 유용한 작업을 시작할 수 있습니다. 이 협상에는 약간의 시간이 걸리지만 여러 번 수행해야 하는 경우 시간이 늘어나므로 "페널티"가 됩니다.
Ansible은 플레이북을 실행할 때 파일 복사 및 모듈 실행과 같은 작업을 수행하기 위해 많은 SSH 연결을 만듭니다. Ansible이 호스트에 새 SSH 연결을 만들 때마다 이 협상 페널티를 지불해야 합니다.
OpenSSH는 가장 일반적인 SSH 구현으로, Linux 또는 macOS를 사용하는 경우 로컬 컴퓨터에 설치한 SSH 클라이언트일 가능성이 높습니다. OpenSSH는 동일한 호스트에 대한 여러 SSH 세션이 동일한 TCP 연결을 공유할 수 있도록 ControlPersist라고도 하는 SSH 멀티플렉싱이라는 최적화 기능을 지원합니다. 즉, TCP 연결 협상이 처음 한 번만 이루어지므로 협상 페널티가 발생하지 않습니다.
멀티플렉싱을 활성화하면 다음과 같은 일이 발생합니다:
-
호스트에 처음 SSH를 시도하면 OpenSSH가 하나의 연결을 시작합니다.
-
OpenSSH는 원격 호스트와 연결된 유닉스 도메인 소켓( 제어 소켓이라고 함)을 만듭니다.
-
다음에 호스트에 SSH를 시도할 때 OpenSSH는 새 TCP 연결을 만드는 대신 제어 소켓을 사용하여 호스트와 통신합니다.
기본 연결은 사용자가 구성할 수 있는 시간 동안 열린 상태로 유지되며(Ansible은 기본값으로 60초를 사용함), 그 후 SSH 클라이언트가 연결을 닫습니다.
수동으로 SSH 다중화 사용 설정하기
Ansible은 자동으로 SSH 멀티플렉싱을 사용하도록 설정하지만, 뒤에서 어떤 일이 일어나는지 이해하기 위해 수동으로 SSH 멀티플렉싱을 사용하도록 설정하고 이를 사용하여 원격 머신에 SSH를 사용하는 단계를 살펴보겠습니다.
예제 20-1은 ~/.ssh/config 파일에서 멀티플렉싱을 사용하도록 SSH를 구성하는 항목을 보여줍니다.
예제 20-1. SSH 멀티플렉싱을 사용하도록 설정하기 위한 ~/.ssh/config
ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h:%p ControlPersist ...