Search

노드 사용 계획

프로젝트의 목표

중형의 트래픽이 발생하는 웹사이트에서 고객 정보를 수집하여 안정적으로 이를 저장, 처리하는 것
하루 방문객 1000명의 웹서비스를 가지는 클라이언트 100명에 대한 안정적 서비스를 목표
1.
수집하는 이벤트는 고객의 클릭, 스크롤 등 dom 이벤트와 로그인, 상품 구매 등 고객이 정의한 커스텀 이벤트
2.
이벤트 당 평균 1kb의 트래픽이 발생함을 가정
3.
한명의 고객이 방문 시 평균 100개의 이벤트를, 초당 1개의 이벤트 발생을, 총 방문객의 10%인 10000명의 동시 접속자가 발생할 수 있다 가정
4.
하루 발생하는 트래픽은 약 10gb, 최대 트래픽은 10mbps
데이터 분산에 대해 이해하고 더욱 효율적인 구조와 방안을 연구하기 위함
1.
Hadoop, Kafka, Spark, Airflow 등을 실제로 운영하고 작업을 관리, 문제가 발생하는 상황을 경험하며 네트워크와 컴퓨터 구조에 대해 지식을 쌓음
2.
Prometheus와 Grafana를 통해 각 노드가 사용하는 자원을 모니터링하여 부하가 발생하는 곳을 찾고 해결하기 위한 올바른 도구와 설정, 아키텍쳐를 고민함

클러스터의 특징

API 서버의 로드밸런싱을 통한 롤링 업데이트
안정적인 서비스 제공을 위해 고가용성(High Avaiilability; HA)을 유지하는 Hadoop 생태계
분산환경에서 발생하는 병목 또는 부하의 모니터링 시스템
분산 데이터 웨어하우스, 데이터 마트 구축

master01

노드의 목적
마스터 노드로써 데이터 클러스터에 참여
분산 파이프라인 수집
YARN 클러스터에 Spark Job 제출
고가용성을 위한 Hadoop Active Namenode
Hiveserver를 통해 API 서버와 연동
구동되는 주요 서비스
Hadoop Namenode(Active): hdfs 데이터 블록의 메타정보를 관리하는 서비스
Zookeeper(Quorum): HA를 위헤 fail 상황 발생 시 리더 선출과 Znode를 관리하는 서비스
Kafka broker: SpringBoot에서 Cassandra까지의 데이터 스트리밍을 위해 사용하는 분산 메시징 큐 서비스
Airflow celery worker: Airflow의 작업을 분산 병렬 처리하기 위한 서비스
Cassandra node 1: 분산된 Cassandra의 첫번째 노드. 스트리밍되는 로그를 저장하기 위한 저장소. 과도하게 늘어나는 트래픽에서 확장성을 보장하기 위해 simple strategy를 통해 분산됨.
Hiveserver2: Spring Boot에서 Hive 데이터 웨어하우스에 접근하기 위해 구동하는 서버.
Spark job: Kafka 에서 Cassandra, Cassandra 에서 Hive 까지의 데이터 변환과 저장을 위해 실행되는 작업. cluster 모드로 실행되며, YARN에서 약 5gb의 자원을 할당받음.
Prometheus: 시스템 로그를 저장하여 모니터링을 하기 위한 서비스

master02

노드의 목적
Standby 마스터 노드로써 Active Namenode의 로그를 관리
분산 파이프라인 수집
YARN 클러스터에 Spark Job 제출
고가용성을 위한 Hadoop Staandby Namenode
5개 노드의 자원과 각종 툴의 로그 모니터링
구동되는 주요 서비스
Hadoop Namenode(Standby): HA를 위해 master01 namenode의 fsimage, editlog를 관리하는 서비스
Zookeeper(Quorum)
Kafka broker
Airflow celery worker
Cassandra node 2: 분산된 Cassandra의 두번째 노드
Spark job
Prometheus
Grafana: Prometheus에서 데이터를 받아와 노드별로 모니터링하는 서비스

slave01

노드의 목적
HDFS 데이터를 저장하는 Datanode
분산 파이프라인 수집
YARN 클러스터에 Spark Job 제출
Airflow 웹서버 및 스케쥴러 구동
구동되는 주요 서비스
Hadoop Datanode: HDFS 의 데이터 블록을 저장하는 서비스
Zookeeper
Kafka broker
Airflow celery worker & webserver & scheduler: Airflow 웹 UI를 통한 워크플로 관리, 스케쥴링 서비스
Cassandra node 3: 분산된 Cassandra의 세번째 노드
Spark job
Prometheus

slave02

노드의 목적
HDFS 데이터를 저장하는 Datanode
분산 파이프라인 수집
YARN 클러스터에 Spark Job 제출
정적파일을 통한 대시보드 웹서비스
SpringBoot API 서비스
구동되는 주요 서비스
Nginx: 대시보드 서비스 정적파일 제공 및 Spring Boot API 서버의 프록시
SpringBoot: API 서비스
Hadoop Datanode: HDFS 의 데이터 블록을 저장하는 서비스
Zookeeper
Kafka broker
Airflow celery worker
Spark job
Prometheus

slave03

노드의 목적
HDFS 데이터를 저장하는 Datanode
분산 파이프라인 수집
YARN 클러스터에 Spark Job 제출
Jenkins CI/CD 파이프라인 관리
SpringBoot API 서비스
구동되는 주요 서비스
SpringBoot: API 서비스
Hadoop Datanode: HDFS 의 데이터 블록을 저장하는 서비스
Zookeeper
Kafka broker
Airflow celery worker
Spark job
Prometheus

확인된 사용 자원

실제 Docker를 통해 5개의 컨테이너 위에서 서비스를 구동한 결과, 약 34gb의 메모리를 사용
안정적인 서비스 구동을 위해 필요한 자원은 8gb의 인스턴스 5개로 확인됨