Lined Notebook

[Elasticsearch] 07. ES 색인 속도 증대를 위한 EC2 인스턴스 타입 변경 중 사용한 iostat 명령어

by ymkim

최근 AWS에 구동되고 있는 검색 엔진 인덱스 노드(node-i: 색인 시 사용되는 노드)의 인스턴스 유형을 변경해야 했다. 기존 c6g.8xlarge를 사용하던 EC2 인스턴스 타입을 c6gd.8xlarge로 변경해야 했다. 이유는 c6g.8xlarge의 경우 EBS Only로 EBS의 경우 네트워크로 연결이 되어 있지만 내장 스토리지를 사용하는 c6gd.8xlarge 유형을 사용하기에 색인(인덱싱) 속도를 높히기에는 내장 스토리지를 사용하는 것이 좋다고 판단하였기 때문이다.

01-1. 현재 AWS EC2 인덱스 노드 아키텍처

현재 인덱스 노드에 데이터 색인 후 데이터 노드로 샤드를 분배하는 과정은 아래와 같다.

현재 풀 색인의 경우 새벽 05:00에 Logstash가 구동 되어 DB의 값을 조회(프로시저)하여 AWS EC2(index Node)에 색인을 진행한다.후에 풀색인이 완료되면 box_type change(hot & warm) 전략을 통해 node.attr(index : 인덱스 노드) -> node.attr(live : 라이브 서비스 데이터 노드) 샤딩을 수행한다. 이 때, 데이터 노드의 node.attr가 live로 선언이 되어 있기에 모든 샤드가 데이터 노드로 분배가 되어진다.

01-2. c6g.8xlarge vs c6gd.8xlarge 차이

위에서 말했다시피 내장 스토리지 타입도 지원하는 c6gd.8xlarge 스펙은 아래와 같다.

  • c6g.8xlarge: 고속 로컬 스토리지가 필요하지 않고, 네트워크를 통한 EBS 스토리지가 충분한 경우 적합
  • c6gd.8xlarge: 고속 로컬 스토리지가 필요한 애플리케이션, 예를 들어 캐싱이나 빠른 임시 저장소가 필요한 경우에 적합

AWS EC2 인덱스 노드의 역할은 임시적으로 데이터를 들고 있다가, 해당 데이터를 데이터 노드로 분배하는 역할을 하기 위해 존재하는 서버다. 이러한 특징으로 인하여 해당 서버는 영구적으로 데이터를 들고 있지 않아도 되며, 색인 속도를 높히기 위에서는 내장 스토리지를 지원하는 EC2 인스턴스를 사용하는게 더 좋다는 생각을 하였다.

  • c6g.8xlarge
    • EBS(Elastic Block Store)만 사용하여 스토리지를 제공
    • EBS는 네트워크를 통해 연결된 스토리지로, 높은 신뢰성과 유연성 제공
    • 하지만 내장 고속 로컬 스토리지 포함 안함
  • c6gd.8xlarge
    • EBS 외에도 1 x 1900 NVMe SSD를 포함
    • NVMe SSD는 매우 높은 입출력 속도를 제공하는 로컬 스토리지
    • 캐시나 일시적인 데이터 저장소로 매우 유용합니다.
    • AWS EC2 인스턴스 c6gd.8xlarge의 로컬 NVMe SSD의 기본 IOPS와 쓰루풋 값
      • 기본 IOPS(Input/Output Operations Per Second): 20,000 IOPS
      • 기본 쓰루풋(Throughput): 1,187.5 MB/s

위에서 EC2 인스턴스 타입을 살펴보았다. 현재 c6gd.8xlarge 타입으로 인스턴스 유형을 변경하고 이제 실제 내장 스토리지를 사용하는지 확인이 필요하였다. 찾아본 결과 Linux에서는 iostat 이라는 명령어를 통해 실제 사용중인 CPU/Disk 사용량을 확인할 수 있었다. iostat에 대해 간략히 알아보자.

01-2. iostat

  • iostat은 디스크 입출력(Disk I/O)에 대한 통계를 보고한다
  • Disk, CPU 처리량, 사용률, 대기열 길이, 트랜잭션 비율  서비스 시간에 대한 측정 결과 획득 가능
  • 즉, CPU와 Disk Device의 input/output 통계 정보 확인 가능하다
  • 설치 방법은 다음과 같다
yum install sysstat # 센토스 설치
sudo apt install sysstat # 우부투 설치

필자의 EC2 환경에는 sysstat이 자동으로 설치가 되어 있었는데, 혹시 깔려있지 않은 경우 위 명령어를 통해 설치하면 된다.

iostat [옵션] [인터벌] [횟수]

iostat의 옵션에는 인터벌 그리고 횟수가 나온다. 인터벌은 몇초마다 디스크 디바이스 정보를 출력할지,
횟수는 몇번 수집 할 것인지 지정하는 명령어다. 실제 명령어를 치게 되면 아래와 같이 결과값이 출력이 된다.

# 5초마다 확장 정보를 출력해라
iostat -x 5

# 출력 결과
Linux 5.xxx.xxx-xxx.xxx.amzn2.aarch64 (xxx-xxx-xxx-d01)         06/30/2024      _aarch64_       (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          10.04    0.00    1.09    0.38    0.00   88.50

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme0n1           0.00     0.42    0.01   19.24     0.50  1881.00   195.56     0.03    1.63    1.88    1.63   1.06   2.04

iostat 옵션

옵션은 필요할 때 찾아서 사용하자.

99. 참고 자료

 

Linux iostat

1-1 : iostat 소개 1-2 : iostat 사용 방법 1-3 : iostat %util, svctm 지표 오류 1-4 : 마무리 정리... 1-1 iostat 소개 -  iostat 이란? 한 줄 요약 : Disk의 read/write 통계지표 및 CPU 사용률, queue 대기열 길이 등 io에 대

brunch.co.kr

 

[Linux] IO 부하를 예측하는 명령어 두가지 iotop 와 iostat

지난번에 cpu, memory의 상태를 측정하는 기본적인 명령어인 top를 정리했었다. https://devkingdom.tistory.com/232 [Linux] linux 인프라 지표 모니터링을 하기위한 명령어 top 요즘 모니터링에 대한 관심도가 굉

devkingdom.tistory.com

 

[Linux] iostat 명령어 사용법 - 디스크 사용량 모니터링

iostat는 디스크 입출력에 대한 통계정보를 측정할 수 있는 명령어다. 처리량이나 사용률, 대기열 길이와 트랜잭션 비율 그리고 서비스 시간 등의 정보를 확인할 수 있다. 리눅스 시스템을 운영하

hbase.tistory.com

 

[LINUX] 📚 디스크 명령어 정리 (df / du / iostat)

리눅스 디스크 명령어 디스크 여유 용량 확인 df(Disk Free) 시스템 전체에 마운트 된 디스크의 여유 공간을 출력한다. 파일시스템, 디스크 크기, 사용된 용량, 사용가능한 용량, 사용된 용량의 비율

inpa.tistory.com

 

블로그의 정보

기록하고, 복기하고

ymkim

활동하기