분류 전체보기 79

운영중인 검색엔진 클러스터에서 노드를 안정적으로 제거하는 방법

정의 운영중인 검색엔진 클러스터에서 노드를 제거하는 일은 자칫 잘못하면 운영중인 서비스에 영향이 가기 때문에 매우 신중한 작업입니다. 이 작업은 마치 차들이 쌩쌩달리는 4차선 고속도로를 3차선으로 줄이는 것과 같습니다. 먼저 4차선을 더이상 자동차들이 이용하지 않도록 안전하게 막아야 합니다. 그 이후 4차선을 폐기(=중지) 합니다. 샤드의 이동시 문제가 발생하는 케이스는 Disk Full로 인한 장애로 작업 전 모든 Node의 Disk 용량이 충분한지 체크 필요합니다 작업 순서 노드를 제거하기 전에 먼저 각 인덱스의 Replica(복제본) 샤드가 존재하는지 체크 합니다. 이유는 작업 도중 혹시라도 Primary(원본) 샤드에 문제가 생길 시 다른 노드에 있는 Replica 샤드가 Primary 역할을 할..

카테고리 없음 2023.10.05

Serverless Framework 도입기

회사에서 AWS Cloud 전환 작업 중 Lambda로 처리하던 부분들이 있었는데 클라우드팀에서 Lambda 대신 Serverless Framework를 쓰는게 어떻냐고 제안해주셨다. 그때부터 열심히 Serverless Framework를 찾아보았다.  Serverless Framework란 AWS의 CloudFormation을 이용하여 서버리스 서비스를 배포하는 방식이다. AWS, Azure, GCP 등의 클라우드 환경에서 서버리스 서비스를 쉽게 사용할 수 있도록 도와주는 오픈소스 프레임워크이다. 장점 인프라를 코드로 관리 및 배포하기 때문에 소스의 형상관리 및 유지보수가 용이하다. (기존 Lambda의 경우 콘솔 환경에서 직접 업로드를 하는 방식이였기 때문에 관리 측면에서 다소 불편한점이 있었다.)..

AWS 2023.06.02

EC2 사용자 데이터(User Data)

사용자 데이터(User Data)란? EC2를 생성하게 되면 깡통 서버가 생성이 되는데, 이때 여러 대를 한번에 생성하거나 혹은 Auto Scale 형태로 운영할 경우 해당 서버에 필요한 기본 설정을 서버가 생성 될 때 자동으로 실행을 해주는 스크립트이다. (수동으로 할 경우 시간 낭비, 인력 낭비!!) 설정 방법 EC2를 생성하는 페이지를 보면 이것저것(이름, 이미지, 네트워크, 스토리지 등등)을 다 셋팅한 후 맨 마지막에 보면 아래와 같이 "고급 세부 정보"가 보인다. 영역을 클릭하게 되면 화면이 아래로 펼쳐지는데 다시 맨 아래 쪽으로 내려가 보면 아래와 같이 사용자 데이터를 입력하는 곳이 보인다. 여기에 서버가 생성될 때 필요한 일(?)들을 처리하면 된다. 쉘스크립트를 실행하는 거라 #!/bin/b..

AWS 2023.05.23

Jenkins Execute Shell에서 cd 명령어

금일 개발서버 Jenkins에서 작업을 하는데 아래와 같은 문제가 발생하였다 + ssh user@ip cd /elasticsearch + ssh user@ip docker-compose down Can't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml Build step 'Execute shell' marked build as failure Finished: FAILURE 문제의 원인은 docker-compose 명령어를 실행하였는데 docker-compose.yml..

CI & CD/Jenkins 2023.05.10

시스템 튜닝 포인트

mmap count 기본적으로 자바 기반의 어플리케이션은 가상머신 위에서 돌아가도록 설계가 되어잇으며 JVM을 통해 할당받은 힙 메모리만 사용할 수 있다. 하지만 루씬의 경우 대용량 세그먼트를 생성하고 관리하기 위해 많은 리소스를 필요하다. 루씬은 내부적으로 자바에서 제공하는 NIO 기술을 활용한다고 한다. 이를 통해 운영체제 커널에서 제공하는 mmap 시스템콜을 직접 호출 할 수 있다. 이로 인해 커널 레벨의 파일 시스템 캐시를 사용할 수 있다. vm.max_map_count는 운영체제가 응용프로그램이 생성할 수 있는 최대 mmap 파일의 수를 지정한다. 엘라스틱서치는 파일시스템 캐시를 적극 활용하기때문에 이 값을 가능한 크게 설정해주어야 한다. swap memory ES는 메모리에 많은양의 데이터를 ..

Kafka Streams 어플리케이션 초기화

Kafka Streams를 개발하다 보면 매번 데이터를 새로 받아서 땡길 수 없기 때문에 초기화를 해주어야 하는 케이스가 종종 발생한다. 그럴때 아래 명령어를 통해 초기화를 하면 된다. ./kafka-streams-application-reset.sh --bootstrap-servers {브로커IP:PORT} --application-id {streams-id} --input-topics {토픽명} Reset-offsets for input topics [streams.test.topic] Following input topics offsets will be reset to (for consumer group search-ncms-streams) Topic: streams.test.topic Partit..

Kafka 2023.01.10

application.yml 여러개로 나누기

프로젝트를 만들다 보면 보통 아래와 같이 loc, dev, stag, prod 형태로 application.yml 또는 application.properties를 나눌 것 입니다. spring: main: web-application-type: none profiles: active: local batch: job: names: ${job.name:NONE} --- ## loc 환경 설정 spring: config: activate: on-profile: loc --- ## dev 환경 설정 spring: config: activate: on-profile: dev --- ## stag 환경 설정 spring: config: activate: on-profile: stag --- ## prod 환경 설정..

Spring 2022.12.14

카프카 스트림즈(Kafka Streams)

기존에 카프카를 이용한 데이터 파이프라인 작업으로는 Producer -> Kafka -> Consumer 형태의 프로젝트들을 많이 하였는데 이번에 신규 프로젝트를 진행하게 되면서 카프카 스트림즈(Kafka Streams)를 이용한 경험을 정리 해본다. 카프카 스트림즈란? 토픽에 적재된 데이터를 실시간으로 변환하여 다른 토픽에 적재하는 라이브러리이다. 카프카의 스트림 데이터를 처리하기 위해 아파치 스파크, 아파치 플링크 등 다양한 오픈소스 어플리케이션들이 존재하지만 카프카 스트림즈를 사용해야 하는 이유는 카프카에서 공식적으로 지원하는 라이브러이기 때문이다. 카프카 클러스터와 완벽하게 호환이 되면서 편리한 기능(신규 토픽 생성, 상태 저장, 데이터 조인 등)들을 제공해준다. 카프카 스트림즈의 구조와 사용 방..

Kafka 2022.12.14

Jenkins에서 ECS 실행

Jenkins Pipeline을 이용하여 AWS ECS를 실행하는 방법에 대해 정리해본다. ECR 업로드 할 때 처럼 AWS CLI를 이용할텐데 아래 페이지에 접속을 해보면 API 설명이 잘 나와 있다. https://docs.aws.amazon.com/cli/latest/reference/ecs/index.html ecs — AWS CLI 1.27.26 Command Reference Note: You are viewing the documentation for an older major version of the AWS CLI (version 1). AWS CLI version 2, the latest major version of AWS CLI, is now stable and recommended..

CI & CD/Jenkins 2022.12.09

Jenkins pipeline을 이용해서 ECR에 Docker Image 업로드

Jenkins Pipeline을 이용하여 AWS ECR에 도커 이미지를 올리는 방법에 대해 정리해본다. 준비물 ECR 생성 AWS Credential 생성 Jenkinsfile 생성 Jenkins Pipeline 생성 Jenkins Pipeline 실행 준비물 [Jenkins] Amazon ECR plugin [Jenkins] AWS Global Configuration Plugin ECR 생성 먼저 이미지를 올릴 ECR 레포지토리를 생성하여야 한다. 1. 아래 그림 1번의 "리포지토리 생성"을 클릭한다. 2. 표시 여부 설정은 "프라이빗"으로 그냥 놔두면 되고 아래 그림에서 1번 영역에 리포지토리 이름을 채워 넣고 2번 "리포지토리 생성" 버튼을 클릭하면 된다. 3. 그러면 다음 그림의 1번과 같이 정..

CI & CD/Jenkins 2022.12.02