etcd in HA

zuckerfrei·2024년 1월 29일
0

Kubernetes

목록 보기
62/63

여러 etcd가 구성된 경우 각 인스턴스의 데이터 정합성을 맞추는 일은 어떻게 구현될까?

1. read

어떤 etcd 인스턴스에서든 읽으면 되니까 크게 문제 되지 않음

2. write

여러 etcd 인스턴스가 존재하더라도 하나의 인스턴스만 쓰기 작업을 수행한다.
하나의 노드가 리더로 선출되고 나머지는 팔로워가 된다. 쓰기 작업은 이 리더 인스턴스만 수행한다. 그리고 리더가 나머지 팔로워들에게 데이터 복사본을 보낸다.
팔로워 인스턴스에 요청이 들어와도 리더에게 전달하고, 리더가 작성한 후 보갓본을 팔로워에게 전달해준다.


리더 선출 방법 - Raft 뗏목 프로토콜

뗏목 알고리즘은 무작위로 타이머를 맞춰 신호를 보낸다.
먼저 타이머가 종료된 인스턴스가 나머지에게 리더 동의 요청을 보낸다.
나머지 인스턴스가 동의한다는 응답을 보내오면 그때 리더로 선출된다.
리더는 나머지에게 주기적으로 자신이 리더라고 요청을 보내고, 응답을 받으면 리더 자리를 유지한다.

그러다가 만약 리더와의 어떤 이유로든 통신이 불가능해지게 되면 재선거를 시작한다.
남은 인스턴스끼리 다시 타이머를 돌리고 새 리더를 선출한다.


클러스터 내 대부분의 노드에 작성될 수 있다면, 특정 몇 개의 etcd 인스턴스에 write가 불가능하더라도 정상으로 판단한다.
그리고 문제가 있던 노드가 다시 온라인 상태가 되면 데이터 복사본을 보내서 정합성을 맞추게 된다.


3. Quorum(정족수) = N/2 + 1

최적의 노드의 수

정족수와 fault tolerance를 고려할 때 홀수로 구성하는 것이 좋다.
홀수 노드의 클러스터가 더 안정성이 좋다.
짝수 노드로 운영하다보면 네트워크 파티션이 생길 수 있는데, 이러면 쿼럼 없이 클러스터를 떠나버릴 수 있게됨 → 좀 더 자세히 봐야할듯 정확히 이해가 안 됨

4. etcd 설치

# etcd 파일 다운로드
wget -q --https-only \
    "https://github.com/cores/etcd ~~ tar.gz"

# 압축 해제
tar -xvf etcd-v3.3.9~tar.gz

mv etcd-v3.3.9~/etcd* /usr/local/bin

mkdir -p /etc/etcd /var/lib/etcd

cp ca.em kubernetes-key.pem kubernetes.pem /etc/etcd

peer 설정 중요함

여러 etcd가 존재할 경우 다른 etcd와의 통신을 위해 반드시 정확하게 설정
etcdctl
v2 : default
v3 : 권장

# 버전 변경
export ETCDCTL_API=3

# insert
etcdctl put name john

# select
etcdctl get name
----
name
john

# key 만 조회하기
etcdctl get / --prefix --keys-only
---
name

HA에서 필요한 최소 노드 수는 3개이다.

profile
무설탕 음료를 좋아합니다

0개의 댓글