코디네이터 HA
밀버스 아키텍처에서 볼 수 있듯이, 밀버스는 많은 구성 요소로 이루어져 있으며 분산된 방식으로 작동합니다. 모든 구성 요소 중에서 Milvus는 노드의 스케일업과 스케일아웃을 통해 작업자의 고가용성을 보장하며, 코디네이터는 체인에서 유일하게 약한 연결 고리입니다.
개요
2.2.3 릴리스에서 Milvus는 코디네이터가 활성-대기 모드에서 작동하도록 고가용성을 구현하여 서비스 불가를 초래할 수 있는 단일 장애 지점(SPoF)을 완화합니다.
코디네이터 HA
위 그림은 활성-대기 모드에서 코디네이터가 작동하는 방식을 보여줍니다. 한 쌍의 코디네이터가 시작되면 서버 ID를 사용하여 etcd에 등록하고 활성 역할을 놓고 경쟁합니다. etcd로부터 활성 역할을 임대하는 데 성공한 코디네이터가 서비스를 시작하고, 쌍의 다른 코디네이터는 대기 상태로 남아 활성 역할을 지켜보다가 활성 코디네이터가 죽으면 서비스를 제공할 준비를 합니다.
코디네이터 HA 사용
헬름 사용
여러 코디네이터를 시작하고 활성-대기 모드에서 작동하도록 하려면 values.yaml
파일을 다음과 같이 변경해야 한다.
xxxCoordinator.replicas
을2
으로 설정한다.xxxCoordinator.activeStandby.enabled
을true
으로 설정한다.
다음 코드 스니펫은 RootCoord를 예로 사용한다. 다른 유형의 코디네이터에 대해서도 동일하게 수행할 수 있습니다.
rootCoordinator:
enabled: true
# You can set the number of replicas greater than 1 only if you also need to set activeStandby.enabled to true.
replicas: 2 # Otherwise, remove this configuration item.
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: true # Set this to true to have RootCoordinators work in active-standby mode.
Docker 사용
여러 코디네이터를 시작하고 활성-대기 모드에서 작동하도록 하려면 Milvus 클러스터를 시작하는 데 사용하는 docker-compose
파일에 몇 가지 정의를 추가하면 됩니다.
다음 코드 스니펫은 RootCoord를 예로 사용합니다. 다른 유형의 코디네이터에도 동일한 작업을 수행할 수 있습니다.
rootcoord:
container_name: milvus-rootcoord
image: milvusdb/milvus:v2.2.3
command: ["milvus", "run", "rootcoord"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
PULSAR_ADDRESS: pulsar://pulsar:6650
ROOT_COORD_ADDRESS: rootcoord:53100
# add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
depends_on:
- "etcd"
- "pulsar"
- "minio"
# add the following to have RootCoords work in active-standby mode
# rootcoord-1:
# container_name: milvus-rootcoord-1
# image: milvusdb/milvus:v2.2.3
# command: ["milvus", "run", "rootcoord"]
# environment:
# ETCD_ENDPOINTS: etcd:2379
# MINIO_ADDRESS: minio:9000
# PULSAR_ADDRESS: pulsar://pulsar:6650
# ROOT_COORD_ADDRESS: rootcoord-1:53100
# # add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
# ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
# depends_on:
# - "etcd"
# - "pulsar"
# - "minio"
Mac/Linux 셸 사용
여러 코디네이터를 시작하고 활성-대기 모드에서 작동하도록 하려면 다음과 같이 하세요.
Milvus 소스 코드를 로컬 드라이브에 다운로드하고 다음과 같이 소스 코드에서 Milvus 클러스터를 시작합니다:
sudo ./scripts/start_cluster.sh
이 단계가 끝나면 Milvus는 각 유형의 코디네이터를 하나만 사용하여 실행됩니다.
milvus.yaml
을 업데이트하여 각 유형의 코디네이터의 포트 번호를 변경합니다. 다음은 rootCoord를 예로 사용합니다.rootCoord: address: localhost port: 53100 # change to 53001
대기 코디네이터를 시작합니다.
sudo nohup ./bin/milvus run rootcoord > /tmp/rootcoord2.log 2>&1 &
이 단계가 끝나면 다음 명령을 실행하여 두 개의 코디네이터 프로세스가 존재하는지 확인합니다.
ps aux|grep milvus
출력은 다음과 비슷해야 합니다.
> ps aux|grep milvus root 12813 0.7 0.2 410709648 82432 ?? S 5:18PM 0:33.28 ./bin/milvus run rootcoord root 12816 0.5 0.2 409487968 62352 ?? S 5:18PM 0:22.69 ./bin/milvus run proxy root 17739 0.1 0.3 410289872 91792 s003 SN 6:01PM 0:00.30 ./bin/milvus run rootcoord ...
그리고 대기 코디네이터는 다음과 같이 10초마다 로그 항목을 출력합니다:
[INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
활성 코디네이터를 한 쌍에서 종료하고 대기 코디네이터의 동작을 관찰합니다.
대기 코디네이터가 활성 코디네이터의 역할을 인수하는 데 60초가 걸리는 것을 확인할 수 있습니다.
[2022/09/21 11:58:33.855 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord\" mod_revision:167 "] [2022/09/21 11:58:33.856 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord-15\" mod_revision:167 "] [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:683] ["stop watching ACTIVE key"] [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:655] ["start retrying to register as ACTIVE service..."] [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:641] ["register ACTIVE service successfully"] [ServerID=19] [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:690] ["quit STANDBY mode, this node will become ACTIVE"] [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:638] ["rootcoord switch from standby to active, activating"] [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:306] ["RootCoord Register Finished"] [2022/09/21 11:58:33.859 +08:00] [DEBUG] [rootcoord/service.go:148] ["RootCoord start done ..."] [2022/09/21 11:58:33.859 +08:00] [DEBUG] [components/root_coord.go:58] ["RootCoord successfully started"]
관련 구성 항목
코디네이터 HA는 기본적으로 비활성화되어 있습니다. Milvus 구성 파일에서 다음 항목을 변경하여 이 기능을 수동으로 활성화할 수 있습니다.
제한 사항
현재 활성 서비스와 대기 서비스 간에는 강력한 일관성이 보장되지 않습니다. 따라서 대기 코디네이터는 활성 역할을 인수하면서 메타데이터를 다시 로드해야 합니다.
Etcd는 현재 세션의 시간이 초과된 후에만 임대를 해제합니다. 세션 시간 제한은 기본값이 60초입니다. 따라서 활성 코디네이터가 사망한 시점과 대기 코디네이터가 활성 역할을 인수하는 시점 사이에는 60초의 간격이 있습니다.