목록DevOps (183)
devops
쿠버네티스의 아키텍처는 크게 Control Plane, Node로 나뉜다. 아래 이미지를 보면 클러스터의 아키텍처를 쉽게 파악할 수 있다. Control Plane '마스터노드(Master Node)' 라고 불린다. Control Plane은 클러스터의 Work Node와 Pod를 관리한다. 프로덕션 환경에서, Control Plane은 일반적으로 여러 PC에서 실행되며 하나의 클러스터가 여러 노드들을 관리하여 고가용성과 내결함성을 제공한다. Control Plane CLI와 UI를 통해서 API 서버를 통해 Input 요청받는다. 또한, 마스터 노드에서는 사용자 workload를 사용하지 않는것이 좋다. Node '작업자 노드(Worker Node)'라고 불린다. 컨테이너화된 어플리케이션을 실행하는데 ..
윈도우에 mongodb를 설치하고 나서 실행할 때 아래와 같은 에러가 뜨게된다. 이 에러는 처음 설치할 때, 설정된 DB 디렉토리가 존재하지 않아서 발생하는 오류다. mongodb의 default DB 디렉토리 경로는 C:\data\db 기 때문에 C드라이브에 data/db 디렉토리를 생성하거나, 다시 설치해서 db 디렉토리 경로를 재설정하는 것이 좋다. 만약 Ubuntu일 경우, 아래 명령어로 디폴트 /data/db 생성 후 권한 설정 sudo mkdir -p /data/db sudo chown -R `id -un` /data/db + 윈도우 사용자라면 차라리 클라우드 상에서 만들거나, 도커 이미지를 활용하는 것이 간단함.
아래와 같이 외부에서 mysql 서버에 접속하려고 하면 connection refused 에러가 뜬다. 난 pymysql 모듈로 어플리케이션과 mysql을 연결하려는 작업을 하려는 중이었고, mysql은 aws 클라우드에 설치되어 있다. 간략히 크게 2가지 원인으로 볼 수 있다. 1. AWS 보안그룹의 인바운드 설정 EC2의 보안그룹에서 mysql의 기본 port인 3306 인바운드를 열어준다. 2. mysqld.cnf 외부 허용 설정 mysqld.cnf 파일에서 bind-address 를 수정하여 외부 접속을 허용한다. 먼저, 외부 접속이 허용되는지 확인하려면 sudo netstat -ntlp | grep mysqld 명령어를 사용하여 확인한다.(수정 전) mysql 5.7 버전 이상인 경우, /etc..
Kinesis는 데이터를 실시간으로 수집하고 ETL과 전송까지 담당하는 AWS의 서비스다. Data Stream을 실시간으로 수집하는 Kinesis Data Stream은 레코드를 직접 수집하는 것도 가능하지만, API Gateway가 프록시하는 것도 가능하다. 단순히 PutRecord하는 것 뿐만아니라, API Gateway에서 요청에따라 Stream 생성과 삭제, ListRecord도 가능하다. 콘솔 상에서 설정하는 방법과 Terraform에서 어떻게 설정하는지도 정리해보려고 한다. Kinesis 데이터 스트림의 API Gateway 프록시를 생성해보자 1) REST API 생성 2) streams 리소스 생성후, 하위 리소스로 다음과 같이 Stream-name 리소스 생성 3) PutRecord를 ..
https://exerror.com/importerror-cannot-import-name-docevents-from-botocore-docs-bcdoc/ [Solved] ImportError: cannot import name 'docevents' from 'botocore.docs.bcdoc' - Exception Error To Solve ImportError: cannot import name 'docevents' from 'botocore.docs.bcdoc' Error You need to reinstall awscli. First of all, update your exerror.com 위 링크의 해결책들을 수행하면됨. 주로 aws-cli와 pip를 업데이트 문제인 것으로 보임.
모든 프로세스에 DB를 거치기 때문에 시스템을 고성능으로 유지하기 위해선 DB의 구조와 매커니즘 또한 아주 중요한 요소 중 하나다. 문제상황 : 너무 많은 읽기 연산 해결책 : 데이터베이스 다중화 Primary를 복제해서 Secondary와 Teriary로 분할한다. 다중화(레플리케이션)의 이점 더 나은 성능(읽기 성능은 부 DB의 갯수와 비례한다)과 CQRS(commit command 책임 분리) 안정성 가용성 주 DB에 문제가 생기면 부 DB가 주 DB로 승격된다. 문제상황 : 너무 많은 데이터(~1TB) 해결책 : 파티셔닝(샤딩) 주 특징은 샤딩된, 나눠진 파티션은 고유한 data만 있다. 그래서 해당 DB를 가지고 하나의 노드를 만들어서 부하분산이 가능해진다. 문제 상황 : 낮은 검색 성능 해결책..
시스템 성능을 파악하는데 주요 메트릭은 Throughput과 Latency다. Throughput 시간당 처리량을 의미한다. 1초에 처리하는 HTTP 요청(Request) 수 혹은 네트워크로 전송되는 데이터 전송 속도가 대표적이다. Throughput을 개선하기 위해서는 병목 구간이 어디인가를 먼저 파악하는 것이 중요하다. 대체로 2가지의 개선방법이 있다. 어플리케이션 개선 : 개발된 어플리케이션을 개선하는 것이다. 현상을 먼저 파악 (APM, Application Performance Monitoring)을 시작으로, 알고리즘 개선, I/O 최소화 등의 개선 방안이 따른다. DevOps가 이를 모니터링하고 개발자가 여러 도구를 통해서 개선해야한다. 하위 시스템의 확장 : 대부분 Throughput 개선..
가용성과 확장성 가용성(Availability)는 시스템이 정상적으로 사용 가능한 정도를 의미한다. 정상 사용시간(Uptime)을 정상사용시간과 사용불가시간(Downtime)을 합친 전체 사용시간으로 나눈값을 표현한다. 가용성 99.95%는 1년에 4시간 22분의 다운타임이 된다. 서비스 사용 불가시간을 최소로 하는 것이야말로, 더 높은 가용성을 달성하는 것이다. 또한, 가용성의 핵심으느 단일 장애점(Single Point of Failure)를 없애는 것이다. 어떤 한 노드가 장애가 발생하더라도, 다른 노드가 대체할 수 있어야한다. 이것을 시스템 확장이라고 말한다. 확장성(Scalability)은 요구되는 시스템의 성능에 따라서 동적으로 서버 구성이 변경되고, 시스템 처리 능력을 최적화할 수 있는 것을..
SLI(서비스 수준 척도, Service Level Indicator) 서비스 수준을 판단할 수 있는 정량적인 측정 값이다. 응답속도: 요청에 대한 응답이 리턴되기까지의 시간 에러율: 전체 요청 수 대비 에러 처리량: 초당 처리할 수 있는 요청 수 가용성: 서비스가 사용가능한 상태로 존재하는 시간 비율 내구성: 데이터 저장이 중요한 경우 SLO(서비스 수준 목표, Service Level Objectives) SLI를 기준으로 서비스의 목표를 정한다. SLI
프로메테우스는 오픈소스 모니터링/알림 시스템이다. 쿠버네티스와 노드, 프로메테우스를 모니터링할 수 있다. 쿠버네티스를 지원하는 재단 CNCF가 프로메테우스를 관리하고 있고 이 두 도구의 시각화를 담당하는 Grafana를 포함, 이 세 가지가 한 묶음으로 많이 쓰이는 편이다. Prometheus 구성요소 시계열(Time series) 데이터를 저장 다양한 exporter로부터 대상의 메트릭을 pull하여 주기적으로 가져오는 모니터링 시스템 Alert manager로 경고, 알람 설정 사용자가 직접 질의가능한 Web UI(PromQL언어 사용) 쿠버네티스 exporter 프로메테우스는 쿠버네티스 메트릭을 가져올 수 있는 쿠버네티스 exporter가 있다. exporter는 kube API를 사용한다.