1. 들어가며
Ansible을 사용한 Provisioning 포스팅에 이어서 본격적으로 Ansible을 이용한 데이터 엔지니어링 인프라 실습을 시작해보려고 합니다.

집에서 연습용으로 클라우드 또는 여러 서버 장비들로 실제와 동일한 환경을 구축해보는 것은 현실적으로 어렵기에
위의 이미지와 같이 5대의 가상 서버를 구성하여 인프라를 구축해보고자합니다.
참고로 저는 맥북프로(intel)을 사용하고 있습니다.
2. 준비물 설치
사전에 미리 homebrew를 설치했다면 아래 설치 명렁어를 그대로 입력하여 설치합니다. 만약 Homebrew가 없다면 링크에서 설치하시면 됩니다.
# 1. 가상화 엔진
brew install --cask virtualbox
# 2. VM 프로비저닝 도구
brew install --cask vagrant
# 3. 설정 자동화 도구
brew install ansible
virtualbox와 vagrant를 활용하여 가상 서버를 구성하고, Ansible로 서버 세팅과 관련된 부분을 자동화하기 위해 설치합니다.
3. 디렉토리 구성
devops/
├── Vagrantfile # (하드웨어) 서버 5대 생성 명세서
├── inventory.ini # (주소록) Ansible이 접속할 서버 정보
└── initial_setup.yml # (작업지시서) 리눅스 서버 초기 세팅용 Playbook
위와 같이 devops디렉토리를 생성 후 3개의 파일을 추가할 예정입니다.
4. IaC(Infrastructur as Code) 작성
1. Vagrantfile
Vagrantfile을 작성하여 가상서버 5대를 세팅합니다. 본 실습에서는 rocky linux 9 을 사용하며 서버간 통신을 위해 IP주소와 호스트이름을 설정합니다.
# Vagrantfile
Vagrant.configure("2") do |config|
# 꿀팁: VirtualBox에서 안정적인 generic/rocky9 이미지 사용
config.vm.box = "generic/rocky9"
# 서버 5대 정의 (IP: 192.168.56.11 ~ 15)
servers = [
{ name: "server-1", ip: "192.168.56.11" },
{ name: "server-2", ip: "192.168.56.12" },
{ name: "server-3", ip: "192.168.56.13" },
{ name: "server-4", ip: "192.168.56.14" },
{ name: "server-5", ip: "192.168.56.15" }
]
servers.each do |server|
config.vm.define server[:name] do |node|
node.vm.hostname = server[:name]
node.vm.network "private_network", ip: server[:ip]
node.vm.provider "virtualbox" do |vb|
vb.memory = "2048" # 2GB RAM (총 10GB 소요)
vb.cpus = 2 # 2 vCPU
vb.linked_clone = true
end
end
end
end
2. inventory.ini
Ansible의 작업대상인 Manager Node의 IP를 저장합니다. ansible_ssh_private_key_file는 ansible이 vagranth ssh접속을 위한 private_key가 필요하여 사용합니다.
ansible_ssh_common_arg는 자동화를 위해 ssh 연결시 서버 연결시 yes 타이핑 없이 접속할 수 있도록 합니다.
[all_servers]
server-1 ansible_host=192.168.56.11 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/server-1/virtualbox/private_key
server-2 ansible_host=192.168.56.12 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/server-2/virtualbox/private_key
server-3 ansible_host=192.168.56.13 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/server-3/virtualbox/private_key
server-4 ansible_host=192.168.56.14 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/server-4/virtualbox/private_key
server-5 ansible_host=192.168.56.15 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/server-5/virtualbox/private_key
[all_servers:vars]
# SSH 지문 확인 무시 (자동화 필수 설정)
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
3. initial_setup.yml (Ansible Playbook)
OS설치 후 꼭 해야할 귀찮은 설정들을 자동화한 Playbook입니다. (필수 패키지설치, 타임존, 방화벽 변경 등)
---
- name: Initialize 5-Node Cluster
hosts: all
become: yes # root 권한으로 실행
tasks:
- name: 1. 필수 패키지 설치 (Vim, Git, Network Tools)
dnf:
name: [epel-release, vim, git, wget, curl, net-tools, bind-utils, tar]
state: present
- name: 2. 타임존 설정 (Asia/Seoul)
timezone:
name: Asia/Seoul
- name: 3. 방화벽 해제 (실습 편의상 Off)
service: { name: firewalld, state: stopped, enabled: no }
- name: 4. Swap 메모리 비활성화 (K8s 설치 시 필수)
shell: |
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- name: 5. /etc/hosts 파일 자동 등록 (서버끼리 이름으로 통신)
blockinfile:
path: /etc/hosts
block: |
192.168.56.11 server-1
192.168.56.12 server-2
192.168.56.13 server-3
192.168.56.14 server-4
192.168.56.15 server-5
5. 가상서버 띄우고 Ansible로 설정 자동화하기
1. 서버 생성
vagrant up
2. 서버 설정 자동화 (Ansible)
ansible-playbook -i inventory.ini initial_setup.yml

위와 같이 모든 서버에 OK가 나오면 성공! (server-3 vagrant 세팅이 잘 안되어 server-6로 변경했습니다.)
3. 연결 결과 검증하기
- 가상서버끼리 연결 확인
# 1번 서버 접속
vagrant ssh server-1
# 2번 서버로 핑 (IP가 아닌 이름으로!)
ping server-2
- 로컬에서 가상서버 연결 확인
# 로컬 /etc/hosts에도 IP DNS 설정 완료 후
ping server-2
가상 서버간 ping이 잘 된다면 성공입닏다.
6. 마치며
이제 데이터 엔지니어링 인프라를 구성하기 위한 서버 세팅이 완료되었습니다.
다음엔 Starrocks OLAP DB를 Ansible로 설치 및 배포하는 과정을 포스팅 하도록 하겠습니다.
부족한 내용 읽어주셔서 감사합니다.
'DevOps' 카테고리의 다른 글
| Kafka KRaft Cluster 구축하기 with Ansible (0) | 2025.12.13 |
|---|---|
| Starrocks 클러스터 구축하기 with Ansible (1) | 2025.12.11 |
| Ansible을 사용한 Provisioning (0) | 2025.12.09 |
| Icinga2 Monitoring Basic (4) | 2022.12.21 |
| Icinga2란? (0) | 2022.12.21 |