Jan 26, 2023
Contents
Contents분산 시스템이란?프로세스란?클러스터 코디네이션과 리더 선출 알고리즘용어 정리애플리케이션 인스턴스의 분산 클러스터를 운용할 때 어려운 점클러스터 코디네이션아파지 주키퍼의 이점리더 선출 알고리즘
분산 시스템이란?
분산 시스템은 네트워크를 통해 서로 통신하며, 서로 다른 컴퓨터에서 실행되는 프로세스들로 이루어져 이들 간에 상태를 공유하거나 공동의 목표를 위해 함께 작업하는 시스템을 의미한다.
프로세스란?
- 실행 가능한 파일을 메인 메모리에 적재함으로써 생성되는 인스턴스로, 프로세스마다 독립적인 메모리 영역을 가진다. 프로세스는 다른 프로세스의 메모리 영역에 접근할 수 없다.
- 파일 시스템을 통해 간접적으로 프로세스 간 통신이 가능하다.
- 그럼에도, 프로세스들은 여전히 같은 컴퓨터 내에서 실행되고 있기 때문에 분산 시스템이라고 부를 수 없다. 상태를 공유하는 프로세스들이 각각 다른 컴퓨터에서 돌아가고 있을 때, 이를 분산 시스템이라고 한다.
- 이때 일부 컴퓨터가 작동 불능이 되어도 다른 컴퓨터들은 여전히 잘 동작하기 때문에, 연결된 네트워크가 원활하다면 평상시대로 분산 작업이 가능하다.
클러스터 코디네이션과 리더 선출 알고리즘
용어 정리
- 노드 : 동작하는 시스템에서 실행하는 프로세스 (from 그래프 이론)
- 네트워크 내부의 두 개 이상의 프로세스가 통신선을 매개로 통신함
- 클러스터 : 서로 연결된 노드의 모음
- 한 클러스터 내부의 노드들은 동일한 작업을 수행
애플리케이션 인스턴스의 분산 클러스터를 운용할 때 어려운 점
- 클러스터 내부의 노드들은 자기 자신만을 인지할 수 있어, 다른 노드들의 상태를 인지하지 못하며 어떻게 통신하는지 모른다.
- 각각의 노드는 다른 노드와 동일하므로, 대칭을 깨거나 클러스터 범위의 의사 결정이나 합의에 도달하기 어려울 수 있다. → 노드는 완전 동일해서 이들 간 합의가 제대로 이루어지지 않을 수 있다.
- 클러스터를 이루는 노드는 언제 뻗을지 예측할 수 없어, 노드들에 각자 따로 작업을 부여하거나 자동으로 업무를 분산하기 어렵다.
클러스터 코디네이션
- 왜 쓰는가?
- 클러스터 코디네이션이 없다면, 클러스터 간 동기화를 위해 복잡한 로우레벨 알고리즘을 구현하고 적용해야 하므로 이 과정에서 오류가 발생할 수 있다.
- 코디네이션을 적용하면 클러스터 내부의 노드들이 데이터를 주고받을 수 있고, 복잡한 알고리즘을 노드들이 분담하여 수행할 수 있다.
- 클러스터는 작업을 병렬화하고, 각 노드가 공동의 목표를 위해 독립적으로 동작할 수 있게 하는 역할인데 이를 실현하게 하는 것이 바로 코디네이션이다.
- 작업을 어떻게 노드들에 분배할 수 있는가?
- 자동으로 하는데, 분배를 담당하는 마스터 노드를 둔다.
- 마스터 노드는 클러스터에 참여하는 노드들이 스스로 선출한다.
- 마스터 노드로 선출된 노드에 장애가 발생하거나, 연산을 제대로 수행하지 못할 경우 노드들은 새로운 노드를 선출한다. 이전에 마스터 노드로 선출되었던 노드는 일반 노드로써 역할을 계속하여 수행한다.
- 아파치 주키퍼는 분산 코디네이터로, 클러스터를 관리하는 역할을 한다.
아파지 주키퍼의 이점
분산 시스템, 호환성 높음, 높은 가용성과 신뢰성
3개 이상의 노드로 이루어진 클러스터로 운용
시스템이 온전히 가동될 수 있도록 함
노드들이 주키퍼 서버와 직접적으로 통신
소프트웨어 추상화 구조와 데이터 모델 제공
트리 구조, Z노드
Z노드는 파일과 디렉토리 두 가지 성격을 띤다.
영구 Z노드 → 연결 끊어져도 유지되며 하위 데이터도 유지
임시 Z노드 → 연결 끊어지면 모든 데이터 사라짐
리더 선출 알고리즘
- 주키퍼와 연결된 모든 노드가 리더 후보에 자원
- 각 노드는 선거에 출마하게 위해 자신을 나타내는 Z노드들을 특정 노드의 하위 노드에 추가
- 할당된 각 Z노드들에게 할당된 하위 노드들의 수를 물어봄
- 할당된 하위 노드의 숫자가 가장 작으면 그 노드가 리더 노드로 선출됨