목록 Architecture/Infrastructure (22)
Mysql DB Multi source replication지난 글에선 데이터 백업, 쿼리 분산을 위한 Mysql replication 을 소개했다. DB 서버 하나에 데이터를 넣어두는 것이 위험하다고 생각해 복제용 DB를 만들어 데이터를 백업했고, 이를 읽기 전용 서버로 생각하여 백업과 부하 분산 두 가지를 잡을 수 있었다. 이번엔 새로운 니즈가 생겼다. 지금 프로젝트 배포를 개인 홈 서버에 하고 있는데 물리적인 문제가 생겨 데이터가 날아가면 어쩌지 하는 생각이다. (혹시 불이라도 나거나 SSD가 고장나면 어째..) 원하는 구조는 아래와 같다. Api 서버별로 다른 DB 서버로부터 Cloud server 에 하나의 Mysql DB 를 띄워 단순 복제하는 것이다. 여러 소스로부터 복제한다고 해서 이를 M..
Mysql db replication DB를 백업하기 위해서 replication 을 사용한다. 백업을 위함도 클 것이고, 쿼리 부하 분산, 지역화의 이점도 얻을 수 있을 것이다. 이 글에선 아래 네가지 키워드를 다룬다. - Mysql이 제공하는 Replication 방식과 각 장단점- 비동기 복제의 정합성 문제- Spring boot에서 읽기와 쓰기 Datasource 분기하기 복제 종류 Mysql 의 복제 방식은 '동기', '비동기', '반동기'가 대표적이다. 동기 방식은 한 노드에 요청된 쿼리를 트랜잭션 내에서 다른 노드들에 전달하고 모든 노드들이 동기화되면 트랜잭션의 결과를 반환한다. 마스터(또는 첫 요청을 받은 노드)가 다른 노드들에 쿼리를 전달하는 식으로 진행된다. 모든 노드에서 동일한 요청..
Diagram EKS는 2가지 VPC로 구성되어 있다. Kubernetes control plane를 AWS에서 관리하는 AWS VPC, 그리고 사용자가 직접 관리하는 Customer VPC가 있다. 사용자는 K8S의 control plane를 직접 관리하지 않고, 실질적으로 사용해야 하는 서비스들을 AWS EC2를 Worker node로 하는 Customer VPC에 집중하도록 한다. Cluster endpoint access 이때 이 cluster의 Endpoint, 즉 AWS VPC의 kubernetes api server의 접근 가능 VPC를 설정할 수 있다. public은 요청자의 VPC에 상관없이 endpoint에 접속할 수 있고, 반대로 private 은 cluster 내 VPC 또는 그와 ..
EKS 모니터링하기 / Cloudwatch 세팅부터 Metric slack 알람까지 1. EKS의 Metric 정보를 fluentbit와 cloudwatch agent를 이용하여 Cloudwatch로 모니터링한다. 2. Cloudwatch의 알람을 Slack으로 전송한다. docs : https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/90-monitoring/100-build-insight CWagent 설치와 Fluentbit 를 Daemonset 으로 선언 cwagent-fluent-bit-quickstar.yaml 다운 받는다. wget https://raw.githubuse..
NO_PUBKEY B53DC80D13EDEF05 Google cloud에서 반환하는 gpg key 포맷이 'OpenPGP ASCII armor'로 변경되면서 기존 kubernetes docs에서 소개하는 Installing kubeadm 방식을 사용하는 경우 gpg key이 올바르지 않는 문제가 발생한다. 혹시 Kubeadmin, Kubelet, Kubectl 을 설치하는 과정에서 apt repository를 등록하고 apt update로 package 업데이트 시 아래와 같은 key 에러(NO_PUBKEY B53DC80D13EDEF05)를 만났다면 이전 방식으로 설치를 진행하진 않았는지 점검한다. Err:2 https://packages.cloud.google.com/apt kubernetes-xeni..
Vault 시작하기 Vault의 가장 기본적인 기능들을 소개한다. 0. Vault dev server 실행 1. Secret Engine의 개념과 Secret 생성 2. Seal / Unseal 3. Auth engine / Auth method 4. Policy로 접근 가능 리소스, 액션 제한 5. Entity, 여러 인증 방식을 사용자로 묶어 관리 6. Group, 여러 Entity를 집합으로 관리 0. 간단한 Dev server 실행 Dev server 설치가 간단해서 로컬에서 먼저 테스트해 보기 좋다. 실 서버는 정책이나 설정, Audit을 저장할 저장소가 필요하지만 개발 서버는 인 메모리로 실행되어 Vault 외 준비할 것들이 없다. 1. vault 설치 brew tap hashicorp/tap..
AWS 자원 생성 시에 태깅을 강제하자AWS의 비용을 계산하고 유휴 자원을 관리하려고 한다. 문제는 어디에 사용되었는지 모르는 레거시 자원들과 여러 팀이 얽힌 프로젝트, 퇴사자들로 이 자원이 현재 사용되고 있는지, 바로 삭제해 버려도 되는지 자원의 출처와 사용처를 알기 어려웠다. 이런 배경 아래, 자원 생성하는 과정에서 태깅을 강제하는 정책을 고민했고 이를 IAM Policy로 풀었던 경험과 필요 개념, 간단한 팁을 공유하고자 한다. 0. 요구 사항 0. 기존 Policy 정책/사용자 그룹은 가능한 건드리지 않도록 한다. 1. 사용자는 정책으로 지정한 자원을 생성하는 경우 태그를 붙여야만 한다.2. 단순히 태그의 Key 값만 일치하면 생성을 허용할 수 있는 조건이 있을 수 있다.3. 태그의 Key에 미리..
How to add new hosted VPC회사 내부에서 사용하는 내부 서비스 도메인이 public하게 열려있었다. 이를 외부에 노출되지 않도록 하고 싶었다. 개발/테스트/배포 환경 등 서비스 환경에 따라 다른 AWS 계정과 리전, 인프라가 분리되어 있었고, 모든 각 계정/리전마다 사용할 DNS를 등록하는 것이 아닌 전면의 한 계정에서 공통된 도메인을 갖고, 노출된 VPC만 따로 등록하는 식으로 관리 포인트를 줄일 수 있었다. Route53의 private dns를 사용해서 지정된 VPC 안에서만 접근할 수 있는 내부용 DNS를 만들 수 있었다. How to configureRoute53에서 Dns를 생성할 때 private hosted zone 를 선택할 수 있다. 이때 같은 도메인 이름으로 pu..