전체 글

전체 글

    Spring Cloud - Netflix Eureka, Spring Gateway

    Spring Cloud - Netflix Eureka, Spring Gateway

    MSA- 어플리케이션을 목적에 따라 여러 개의 독립적인 서비스로 분할하여 개발하고 배포하는 방식   MSA의 특징- 독립된 각 서비스 마다 고유의 ip와 port를 가진다.- 각각의 서비스가 분산되어 있기 때문에, 배포와 테스트가 어렵다 MSA를 왜 쓸까?느슨하게 결합된 서비스들의 모임으로 프로젝트를 구성함으로써, 전체 시스템 구조를 논리적으로 구분해 이해하고, 고가용성(부분 장애가 전체 장애로의 확장을 막음)을 높이며, 분산 처리를 가능하도록 하기 위함  MSA를 편리하게 하기 위한 아키텍처 컴포넌트  스프링 클라우드(Spring Cloud)분산 시스템의 몇가지 공통된 패턴들을 빠르게 빌드할 수 있도록 다양한 툴을 제공해 준다.예를 들어, Configuration management(설정 관리), Se..

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    1. Spring Cloud Netflix Eureka - 유레카는 Service Discovery 중 하나이다. - Service Discovery는 말 그대로 서비스를 찾아주는 것으로써, 어느 위치에 어떤 서버가 있는지를 찾아준다. rf. key / value 형태로 서비스를 등록하고 검색할 수 있도록 해준다. - 넷플릭스 자사의 기술들을 Java Spring 재단에 기부를 하면서 만들어진 것이 Eureka이다. - Eureka를 쓰려면 먼저 서비스를 등록해야 한다. - Client에서 요청이 Load Banlancer로 들어오면 Service Discovery가 서비스의 위치를 찾아준다. 2. 프로젝트 환경 구성 [1] 프로젝트 생성 - 마인드챗이라고, 내 마음 속 이야기를 채팅창에 적을 수 있는 ..

    [Spring Cloud & MSA] MSA와 Spring Cloud

    [Spring Cloud & MSA] MSA와 Spring Cloud

    시간이 지날 수록 소프트웨어는 Antifragile한 아키텍처를 구성하고자 하였으며, Cloud Native한 아키텍처를 구성하고자 했다. 아래는 그러한 소프트웨어 아키텍처의 특징을 정리한 내용이다. 1. Antifragile 아키텍처 1) AutoScaling (자동확장성) : 상황에 따라 인스턴스의 갯수를 자동으로 늘리는 등 자동 확장이 가능한 것 2) Microservices : 세밀한 단위로 모듈과 기능을 세분화한 서비스. 넷플릭스와 아마존에서 가장 잘 구축했음 3) chaos engineering : chaos, 급격하고 예측 불가한 상황에서도 견딜 수 있을 만큼 안정적인 서비스 구축 4) continuous deployments : 지속적인 통합/배포를 의미 2. Cloud Native 아키텍..

    [Docker] Prometheus와 Grafana를 통해 실시간 로그 확인

    [Docker] Prometheus와 Grafana를 통해 실시간 로그 확인

    1. Prometheus란? - 관련된 신화 : 신으로부터 불을 훔친 자로써, 형벌로 동생에게 판도라라는 여성을 보내 판도라의 상자 사건이 일어남 - 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 모두 제공하는 오픈 소스 모니터링 시스템이다. - 프로메테우스로 모니터링을 하려면 모니터링 항목 수집을 위해 Exporter라고 하는 Agent가 수행되어야 한다. ex. node_exporter, mysql_exporter, postgre_exporter, redis_exporter, kafka_exporter..... 2. Dockerfile로 mysqld_exporter와 node_exporter가 포함된 MySQL 컨테이너 생성하기 - Prometheus에서 모니터링을 하려면 MySQL 컨테이너..

    [Docker] Proxy Layer 구성하기

    [Docker] Proxy Layer 구성하기

    1. Proxy Layer란 - Proxy Layer : 대리층 - ProxySQL : C++로 짜여진 오픈 소스 Proxy 프로그램으로 총 4개의 database schema를 가지며, Proxy를 컨트롤하고 모니터링할 수 있게 한다. - Proxy Layer를 두는 이유 : 앞서서 Orchestra 설정을 해두면 Master(db001)이 샷다운 되더라도 Slave(db002)이 자동으로 Master로 승격되어 고가용성, 곧 시스템이 지속될 수 있도록 할 수 있었다. 하지만, Application 입장에서는, Application의 자체 설정에 따라 기존의 Master(db001)을 계속해서 바라볼 수 있다. 이를 해결하기 위해 중간층인 Proxy Layer를 둘 수 있는데, MySql은 Proxy ..

    [Docker] Orchestra를 통해 High Availability(HA) 구축하기

    [Docker] Orchestra를 통해 High Availability(HA) 구축하기

    1. 고가용성이란? - 가용성 = Uptime / (uptime + downtime) - 고가용성 = 바람직한 정도로 긴 시간 동안 지속적인 운영이 가능한 시스템 또는 컴포넌트 - 고가용성의 시스템을 구축한다는 건 = 서비스가 다운되는 타임을 최소화하는 시스템을 구축한다는 것 2. HA 수동 설정 [1] Orchestra를 Docker로 생성하기 - Orchestra는 MySQL용 복제 토폴로지 관리자로서, 고가용성 및 복제 관리 툴을 말한다. - GUI/CLI/API를 통해서 상태를 확인하고 작업을 수행할 수 있다. docker run -it --name orchestrator -h orchestrator \ --net mybridge --net-alias=orchestrator \ -p 3000:30..

    [Docker] 브리지를 통해 컨테이너 통신

    1. 브리지 생성 [1] 도커 네트워크 확인 & 브리지 생성 [root@dev opc]# docker network ls NETWORK ID NAME DRIVER SCOPE 697ad12cd5fa bridge bridge local d955f1181bf5 host host local 30e9346c2d17 none null local [root@dev opc]# docker network create --driver bridge mybridge [2] data,log 삭제하고 도커 컨테이너 재생성 docker run -it --name db001 -p 3306:3306 -h db001 \ --net mybridge --net-alias=db001 \ -v /home/opc/db/db001/data:/va..

    [Docker] Master-Slave Replication 구성

    [Docker] Master-Slave Replication 구성

    Master/Slave 구조를 사용하는 이유 서버에 트래픽이 몰려들 때 해결하는 방법으로, 컴퓨터 성능을 1) Scale-up 하거나, 컴퓨터를 여러대 두는 2) Scale-out이 있다. DB로 다수의 트랜잭션이 몰리면 race condition이 발생할 수 있다. Replication(복제)으로 Master/Slave 구조를 형성하면 DB에 가해지는 부하를 분산하여 이러한 race condition을 미연에 방지할 수 있다. 일반적으로 Master에서 write(쓰기)를 하도록 하고, Slave에서는 read(읽기)를 하도록 하여, 부하를 분산한다. MySQL에서 Master/Slave가 동작하는 방식은 아래와 같다. [1] Insert/Update/Delete 트랜잭션이 들어오면 Master에서 이..

    [Docker] 호스트OS에 log, config 연결 (+my.cnf)

    [Docker] 호스트OS에 log, config 연결 (+my.cnf)

    호스트 OS에 log/config를 연결하기 위한 순서 [1] 호스트 OS에서 log,conf 파일 경로를 먼저 생성 [2] mysql 기본 설정 파일(my.cnf)을 호스트 OS의 conf 경로에 저장 * 주의 ) 이 때, my.cnf 파일의 설정값은 컨테이너를 기준으로 한다. 예를 들어, basedir=/var/lib/mysql 로 설정한다면, 이는 컨테이너의 /var/lib/mysql 경로를 의미한다. [3] 컨테이너를 재생성하며 -v 옵션을 통해 호스트 OS의 log/conf 경로와 컨테이너 log/conf 경로를 연결 * my.cnf 에서 설정했던 log 경로가 곧 컨테이너 log 경로이다. 컨테이너 conf 경로는 my.cnf이 저장되는 아무 경로로 설정하면 된다. 호스트 OS에 log/con..

    [Docker] Docker란? Docker로 Mysql 설치해보기

    [Docker] Docker란? Docker로 Mysql 설치해보기

    Docker와 VM의 차이 * VM : Virtual Machine 가상 머신으로, 분할 공간의 가상 환경을 제공한다. * 호스트 OS : 서버 OS * 게스트 OS : VM이 서버 OS위에 올리는 가상 OS * 하이퍼바이저 : 게스트 OS를 구동하고 모니터링하는 소프트웨어 -> 유형 1 : Native/Bare-Metal 하이퍼바이저, 호스트 OS 없이 게스트 OS들만 존재 ex. VMware의 ESXi, Citrix의 Xen, Microsoft의 Hyper-V -> 유형 2 : Hosted 하이퍼바이저, 호스트 OS 위에 게스트 OS들을 둔다. ex. VmWare의 Workstation, Oracle의 VirtualBox 가상 머신(VM)의 경우, 하이퍼바이저를 통해 호스트 OS 위에 게스트 OS들을..