Menu Close
2.5. etcd 관련 권장 사례
크기가 크고 밀집된 클러스터의 경우 키 공간이 지나치게 커져서 공간 할당량을 초과하면 etcd 성능이 저하될 수 있습니다. etcd에 대한 유지보수(조각 모음 등)를 정기적으로 수행하여 데이터 저장소 공간을 확보해야 합니다. etcd가 클러스터 전체에 대한 경고를 발생시켜 키 읽기 및 삭제만 허용되는 유지보수 모드로 클러스터를 전환하기 전에 미리 Prometheus에서 etcd 지표를 모니터링하고 필요한 경우 조각 모음을 수행하는 것이 좋습니다. 모니터링할 몇 가지 주요 지표로는 현재 할당량 제한인 etcd_server_quota_backend_bytes
, 과거의 압축 이후 실제 데이터베이스 사용량을 나타내는 etcd_mvcc_db_total_size_in_use_in_bytes
, 조각 모음 대기 중인 여유 공간을 포함한 데이터베이스 크기를 나타내는 etcd_debugging_mvcc_db_total_size_in_bytes
가 있습니다. etcd 조각 모음에 대한 지침은 Defragmenting etcd data
섹션에서 확인할 수 있습니다.
etcd는 디스크에 데이터를 쓰므로 etcd 성능은 디스크 성능에 따라 크게 달라집니다. etcd는 디스크에 제안을 유지합니다. 디스크 속도가 느리고 다른 프로세스의 디스크 활동이 있는 경우 fsync 대기 시간이 길어지며 이로 인해 etcd에서 하트비트를 놓치고 새 제안을 제때 디스크에 커밋하지 못하면 요청 시간 제한이 초과되고 일시적 리더 손실이 발생할 수 있습니다. 대기 시간이 짧고 처리량이 높은 SSD/NVMe 디스크가 지원되는 머신에서 etcd를 실행하는 것이 좋습니다.
배포된 OpenShift Container Platform 클러스터에서 모니터링할 몇 가지 주요 지표로는 etcd 디스크 로그 선행 기록 기간의 p99와 etcd 리더 변경 수가 있습니다. 이러한 지표를 추적하려면 Prometheus를 사용합니다. etcd_disk_wal_fsync_duration_seconds_bucket
은 etcd 디스크 fsync 기간을 보고하고 etcd_server_leader_changes_seen_total
은 리더 변경 사항을 보고합니다. 속도가 느린 디스크는 배제하고 디스크 속도가 충분히 빠르도록 하려면 etcd_disk_wal_fsync_duration_seconds_bucket
의 99번째 백분위수가 10ms 미만이어야 합니다.
I/O 벤치마킹 툴인 Fio를 사용하여 OpenShift Container Platform 클러스터를 생성하기 전이나 생성한 후에 etcd 하드웨어를 검증할 수 있습니다. Fio를 실행하고 결과를 분석합니다.
podman 또는 docker와 같은 컨테이너 런타임이 테스트 중인 머신에 설치되어 있고 etcd에서 데이터를 쓰는 경로가 /var/lib/etcd라고 가정하면 다음을 실행합니다.
프로세스
podman을 사용하는 경우 다음을 실행합니다.
$ sudo podman run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/openshift-scale/etcd-perf
docker를 사용하는 경우에는 다음을 실행합니다.
$ sudo docker run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/openshift-scale/etcd-perf
실행에서 캡처된 fsync 지표의 99번째 백분위수를 비교한 후 속도가 10ms 미만인지를 확인하여 디스크 속도가 etcd를 호스팅하는 데 충분한지 여부가 출력에 표시됩니다.
etcd는 모든 멤버 간에 요청을 복제하므로 성능은 네트워크 입력/출력(IO) 대기 시간에 따라 달라집니다. 네트워크 지연 시간이 길어 지면 etcd 하트비트가 선택 시간 초과보다 오래 걸릴 수 있으며 이로 인해 리더 선택이 발생하여 클러스터가 손상될 수 있습니다. 배포된 OpenShift Container Platform 클러스터에서 모니터링되는 주요 메트릭은 각 etcd 클러스터 멤버에서 etcd 네트워크 피어 대기 시간의 99번째 백분위 수입니다. Prometheus를 사용하여 지표를 추적합니다. histgram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket[2m])))는 etcd가 멤버 간에 클라이언트 요청을 복제하는 것을 완료하는 왕복 시간을 보고합니다
. 50ms 미만이어야 합니다.