etcd.io/v3.5/tuning

진웅·2025년 8월 4일

K8S Basics

목록 보기
31/40

설정값 (Parameter) 권장사항 (Recommendation) 설정 명령 (Example Command) 설명 (Description)
하트비트 간격 (Heartbeat Interval) 평균 왕복 시간(RTT)의 0.5~1.5배로 설정 --heartbeat-interval 100 (밀리초 단위) 리더가 팔로워에게 자신이 활성화 상태임을 알리는 빈도. 지연 시간이 긴 환경에서 중요한 설정입니다.
선거 시간 초과 (Election Timeout) 평균 왕복 시간(RTT)의 최소 10배로 설정 --election-timeout 1000 (밀리초 단위) 팔로워가 리더의 하트비트를 기다리는 시간. 네트워크 변동성을 고려하여 충분한 값으로 설정해야 합니다.
스냅샷 튜닝 (Snapshot Tuning) 주기적으로 스냅샷을 생성 --snapshot-count 10000 로그 파일이 너무 커지는 것을 방지하고 성능을 최적화하기 위해 로그를 압축합니다. snapshot-count는 로그 항목 수가 이 값에 도달하면 스냅샷을 생성하도록 etcd에 지시합니다.
디스크 튜닝 (Disk Tuning) ionice와 같은 도구를 사용하여 디스크 I/O 우선순위 설정 ionice -c2 -n0 -p etcd 데이터 디렉터리가 포함된 디스크의 I/O 지연 시간을 줄입니다.
네트워크 튜닝 (Network Tuning) tc와 같은 도구를 사용하여 etcd 피어 간 트래픽에 우선순위 부여 tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1 etcd 클러스터 통신에 필요한 네트워크 트래픽의 지연 시간을 최소화합니다.
CPU 튜닝 (CPU Tuning) CPU 거버너를 performance 모드로 설정 cpupower frequency-set -g performance etcd 프로세스가 항상 최대 CPU 성능으로 실행되도록 하여 지연 시간을 줄입니다

etcd를 위한 ionice 튜닝 가이드

🔍 ionice란?

ionice는 Linux에서 프로세스의 IO 우선순위를 설정하는 도구입니다. etcd와 같이 디스크 IO 성능이 중요한 애플리케이션에서 필수적인 튜닝 요소입니다.

📊 ionice 클래스와 우선순위

IO 스케줄링 클래스

0 (none)    : 기본 스케줄링, 커널이 자동 결정
1 (rt)      : Real-time, 최고 우선순위
2 (be)      : Best-effort, 일반적인 우선순위 기반  
3 (idle)    : 시스템이 한가할 때만 IO 수행

우선순위 레벨

0 = 가장 높음 (최고 우선순위)
1 = 높음
2 = 높음  
3 = 보통
4 = 보통 (기본값)
5 = 낮음
6 = 낮음
7 = 가장 낮음 (최저 우선순위)

주의: 숫자가 작을수록 높은 우선순위입니다!

🎯 etcd 기본값 vs 튜닝값 비교

기본 상태 확인

# etcd 프로세스의 현재 ionice 설정 확인
ionice -p $(pgrep etcd)
none: prio 0

비교 표

항목기본값 (none: prio 0)튜닝값 (be: prio 0)
클래스none (커널 자동 결정)be (Best-effort)
우선순위0 (실제론 be: prio 4)0 (명시적 최고 우선순위)
IO 접근다른 프로세스와 공평 분배etcd 우선 접근
지연시간시스템 부하 시 증가 가능낮은 지연시간 보장

⚙️ etcd ionice 튜닝 적용

1. 실행 중인 etcd 프로세스에 적용

# Best-effort 클래스, 최고 우선순위로 설정
ionice -c2 -n0 -p $(pgrep etcd)

# 설정 확인
ionice -p $(pgrep etcd)
best-effort: prio 0

2. etcd 시작 시 적용

# etcd 실행 시 ionice 적용
ionice -c2 -n0 etcd

# 또는 Real-time 클래스 (더 높은 우선순위, 주의 필요)
ionice -c1 -n0 etcd

3. systemd 서비스 설정

[Unit]
Description=etcd
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/ionice -c2 -n0 /usr/local/bin/etcd
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

🚀 성능 영향 분석

Before (기본값)

  • etcd가 다른 프로세스들과 IO 자원을 공평하게 나눔
  • 시스템 부하 시 WAL 쓰기 지연 증가
  • 클러스터 응답성 저하 가능성

After (튜닝 후)

  • etcd가 IO 자원에 우선 접근
  • WAL 쓰기 지연시간 감소
  • 클러스터 응답성 향상
  • 리더 선출 안정성 증가

📈 벤치마크 테스트

etcd와 동일한 조건으로 fio 테스트

# etcd WAL 패턴 테스트 (Sequential Write)
ionice -c2 -n0 fio \
  --name=etcd-wal \
  --rw=write \
  --bs=64k \
  --fsync=1 \
  --size=1G \
  --filename=/var/lib/etcd/wal-test

# etcd DB 패턴 테스트 (Random Read/Write)  
ionice -c2 -n0 fio \
  --name=etcd-db \
  --rw=randrw \
  --bs=4k \
  --size=1G \
  --filename=/var/lib/etcd/db-test

모니터링

# IO 사용률 모니터링
iostat -x 1

# etcd 프로세스별 IO 모니터링  
iotop -p $(pgrep etcd)

# top에서 etcd 프로세스만 필터링
top -p $(pgrep etcd)
# 또는 top 실행 후 'o'를 누르고 COMMAND=etcd 입력

⚠️ 주의사항

1. 시스템 영향

  • etcd에 높은 IO 우선순위를 주면 다른 프로세스의 IO 성능이 저하될 수 있음
  • 시스템 전체 성능을 모니터링하며 적용

2. Real-time 클래스 사용 시

# RT 클래스는 매우 강력하므로 주의
ionice -c1 -n0 etcd
  • 시스템이 응답하지 않을 수 있음
  • 운영환경에서는 Best-effort 클래스 권장

3. etcd.io 공식 권장사항

  • Fsync latency < 10ms 목표
  • WAL과 DB를 별도 디스크에 분리 권장
  • SSD 사용 강력 권장

🎉 결론

ionice -c2 -n0으로 etcd의 IO 우선순위를 높이면:

WAL 쓰기 지연시간 감소
클러스터 응답성 향상
안정적인 리더 선출
전체적인 etcd 성능 개선

etcd와 같은 분산 시스템에서는 낮은 지연시간이 핵심이므로, ionice 튜닝은 필수적인 최적화 작업입니다.


💡 Tip: 운영환경 적용 전에는 반드시 테스트 환경에서 충분한 검증을 거치세요!

etcd 네트워크 최적화를 위한 TC 명령어 완벽 가이드 🚀

개요

etcd 클러스터에서 네트워크 혼잡으로 인한 dropped MsgProp, dropped MsgAppResp 오류를 해결하기 위한 Traffic Control(TC) 설정 방법을 상세히 알아보겠습니다.

🔍 문제 상황

발생하는 오류 메시지

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full

원인 분석

  • etcd 리더가 대량의 클라이언트 요청 처리
  • peer 통신과 클라이언트 통신이 동일한 우선순위로 처리
  • 네트워크 혼잡 시 클러스터 내부 통신 지연 발생

🎯 해결 방안

Traffic Control을 사용하여 etcd peer 통신을 클라이언트 통신보다 높은 우선순위로 처리합니다.

⚙️ TC 명령어 상세 분석

1단계: 기본 우선순위 큐 생성

tc qdisc add dev bond0 root handle 1: prio bands 3

항목별 의미

항목의미설명
tc qdisc큐잉규칙패킷 스케줄링 방식 정의
add추가명령새로운 규칙 생성
dev bond0본드장치대상 네트워크 인터페이스
root최상위큐모든 트래픽의 시작점
handle 1:핸들번호큐 식별자
prio우선순위우선순위 기반 스케줄러
bands 33단계3개 우선순위 레벨

2-3단계: etcd Peer 통신 우선순위 설정 (포트 2380)

# 송신 트래픽
tc filter add dev bond0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1

# 수신 트래픽  
tc filter add dev bond0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1

4-5단계: etcd 클라이언트 통신 우선순위 설정 (포트 2379)

# 송신 트래픽
tc filter add dev bond0 parent 1: protocol ip prio 2 u32 match ip sport 2379 0xffff flowid 1:2

# 수신 트래픽
tc filter add dev bond0 parent 1: protocol ip prio 2 u32 match ip dport 2379 0xffff flowid 1:2

필터 항목별 의미

항목의미설명
tc filter필터규칙트래픽 분류 조건
parent 1:상위참조1번 큐의 하위 규칙
protocol ipIP패킷IPv4 패킷만 처리
prio 1/2필터순위필터 적용 우선순위
u32분류기IP 헤더 기반 매칭
sport/dport포트방향송신/수신 포트
2380/2379포트번호etcd peer/클라이언트 포트
0xffff포트마스크정확한 포트 매칭
flowid 1:1흐름식별1번 밴드(최고 우선순위)
flowid 1:2흐름식별2번 밴드(중간 우선순위)

📊 우선순위 체계

순위포트용도밴드처리방식
🥇 1위2380etcd peer 통신flowid 1:1최우선 처리
🥈 2위2379etcd 클라이언트 통신flowid 1:2중간 처리
🥉 3위기타일반 트래픽flowid 1:3낮은 처리

🛠️ 실행 방법

모든 etcd 노드에 적용

# 1. 우선순위 큐 생성
tc qdisc add dev bond0 root handle 1: prio bands 3

# 2. Peer 통신 송신 우선순위 설정
tc filter add dev bond0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1

# 3. Peer 통신 수신 우선순위 설정
tc filter add dev bond0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1

# 4. 클라이언트 통신 송신 우선순위 설정
tc filter add dev bond0 parent 1: protocol ip prio 2 u32 match ip sport 2379 0xffff flowid 1:2

# 5. 클라이언트 통신 수신 우선순위 설정
tc filter add dev bond0 parent 1: protocol ip prio 2 u32 match ip dport 2379 0xffff flowid 1:2

설정 확인

# qdisc 확인
tc qdisc show dev bond0

# filter 확인
tc filter show dev bond0

설정 제거

tc qdisc del dev bond0 root

📈 Before vs After

실행 전 (Before) ❌

모든 트래픽 동일 우선순위
[클라이언트] [peer] [클라이언트] [peer] [기타] → 순서대로 처리
  • etcd peer 통신 지연
  • 클러스터 불안정
  • Buffer overflow 오류

실행 후 (After) ✅

우선순위 1: [peer] [peer] [peer] → 최우선 처리
우선순위 2: [클라이언트] [클라이언트] → 중간 처리  
우선순위 3: [기타] [기타] → 나중 처리
  • peer 통신 안정성 확보
  • 클러스터 성능 향상
  • dropped Msg 오류 감소

🎉 기대 효과

문제 해결

  • dropped MsgProp 오류 감소
  • dropped MsgAppResp 오류 감소
  • ✅ etcd 클러스터 안정성 향상

성능 개선

  • 🚀 리더-팔로워 통신 안정성 확보
  • 🚀 클러스터 합의 과정 원활화
  • 🚀 전체 etcd 성능 향상

💡 주의사항

  1. 모든 etcd 노드에 동일하게 적용
  2. bond 인터페이스 확인 후 적용 (bond0 또는 bond1)
  3. 네트워크 정책 변경 시 사전 테스트 권장
  4. 설정 백업롤백 계획 수립

🔗 참고 자료


이 설정을 통해 etcd 클러스터의 네트워크 안정성을 크게 향상시킬 수 있습니다! 🎯

profile
bytebliss

0개의 댓글