카테고리 없음

EC2에서 Docker와 EBS를 활용한 Elasticsearch 및 Kibana 환경 구축 문제 해결

밤린 2024. 12. 10. 09:24

AWS EC2를 사용하면서 Elasticsearch와 Kibana를 Docker로 실행하는 환경을 구축하던 중, 예상치 못한 디스크 용량 문제를 겪었습니다. 이를 해결하기 위해 추가 EBS 볼륨을 연결하고 Docker 데이터를 EBS에 저장하도록 설정한 과정을 공유합니다. 또한, EC2 인스턴스를 재부팅한 후 발생한 Docker 실행 문제를 해결한 과정도 담았습니다.


1. 문제 상황

처음에는 AWS EC2에 기본 제공되는 8GB 루트 디스크만 사용해 Elasticsearch와 Kibana를 실행하려고 했습니다. 하지만 Elasticsearch와 Kibana는 기본적으로 많은 디스크 공간을 필요로 하기 때문에, Docker 이미지를 다운로드하거나 컨테이너를 실행하는 과정에서 다음과 같은 오류가 발생했습니다:

 
failed to register layer: write /usr/share/kibana/x-pack/plugins/reporting/chromium/headless_shell-linux_x64/headless_shell: no space left on device​

Docker가 사용하는 기본 데이터 디렉터리(/var/lib/docker)가 루트 디스크를 채우면서 공간이 부족해진 것입니다.


2. 해결: EBS 추가 및 Docker 데이터 이동

2.1 EBS 볼륨 추가

먼저, EC2 인스턴스에 추가 EBS 볼륨을 연결했습니다:

  1. AWS Management Console에서 500GB 크기의 EBS 볼륨을 생성했습니다.
  2. 해당 EBS 볼륨을 EC2 인스턴스에 연결했습니다.

2.2 EBS 볼륨 초기화 및 마운트

EC2 내부에서 추가한 EBS 볼륨을 초기화하고 마운트했습니다:

# 파일 시스템 생성
sudo mkfs.ext4 /dev/nvme1n1

# 마운트 디렉터리 생성 및 마운트
sudo mkdir /mnt/data
sudo mount /dev/nvme1n1 /mnt/data
 

2.3 Docker 데이터 디렉터리 이동

 

Docker가 데이터를 EBS로 저장하도록 설정을 변경했습니다:


3. EC2 재부팅 후 Docker 실행 문제

문제를 해결하고 Elasticsearch와 Kibana를 잘 사용하던 중, EC2를 중지 후 다시 시작했을 때 Docker가 실행되지 않는 문제가 발생했습니다. 다음은 해결 과정입니다:

 

3.1 Docker 실행 실패 로그 확인

Docker 실행 시 다음과 같은 오류가 발생했습니다:

 
Error response from daemon: network <network_id> not found
mkdir /var/lib/docker: file exists

3.2 해결 방법

  1. 네트워크 및 컨테이너 정리:
sudo docker network prune
sudo docker-compose down --volumes --remove-orphans

 

   2. Docker 데이터를 다시 확인:

sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo ln -s /mnt/data/docker /var/lib/docker
sudo systemctl start docker

 

이 과정에서 /mnt/data/docker를 /var/lib/docker로 심볼릭 링크를 생성해 Docker가 정상적으로 데이터를 읽도록 설정했습니다.


4. 결과

위 과정을 통해 Docker 데이터를 EBS로 성공적으로 이동했고, EC2 재부팅 후에도 Elasticsearch와 Kibana 컨테이너가 정상적으로 실행되는 환경을 구축했습니다. 이를 통해 EC2의 루트 디스크 공간 부족 문제를 해결할 수 있었습니다.


5. 교훈 및 팁

  • EBS 활용: 디스크 사용량이 높은 애플리케이션을 Docker로 실행할 경우, 루트 디스크를 확장하기보다는 EBS 볼륨을 추가해 데이터 저장소를 분리하는 것이 효율적입니다.
  • /etc/fstab 설정: EBS 볼륨을 EC2 부팅 시 자동으로 마운트되도록 설정하는 것이 중요합니다.
  • Docker 데이터 관리: Docker 데이터를 이전하거나 마운트를 변경할 때는 반드시 서비스 중지 및 백업을 진행해야 합니다.
  • 로그 확인: 문제가 발생하면 Docker 로그(sudo journalctl -xeu docker.service)를 분석해 원인을 파악해야합니다.

6. 마무리

이 경험은 AWS EC2와 Docker를 활용해 유연한 환경을 구축하면서 발생할 수 있는 문제와 이를 해결하는 방법에 대해 배울 수 있었던 소중한 기회였습니다.