본문 바로가기

기술이야기

(5)
Mysql(Mariadb) Replicaiton 구축하기 0. 준비 실무에선 보통 단일 Mysql 장비로 서비스를 운영하지 않는다. 트래픽이 증가하다 보면 자연스럽게 병목현상이 발생하기 때문이다. 아무리 애플리케이션 단에서 대용량 처리가 가능하다 해도 DB에서 병목현상이 발생하면 의미가 없기 마련이다. 따라서 DB까지 부하 분산 작업이 필요하다. DB 단에서 부하 분산을 위한 방법은 여러가지 있다. 그중에서 가장 일반적이고 쉽게 적용할 수 있는 방법을 소개해보려고 한다. 바로 Replication(복제) 방식이다. Replication 방식은 쓰기(Insert, Update, Delete) 연산을 할 수 있는 Master 장비 1대와 읽기(Select) 연산만 할 수 있는 Slave 장비로 구성되어 있다. * 보통 읽기 연산이 쓰기 연산보다 많이 실행되므로 하..
무료로 내 서버에 HTTPS 적용하기 0. 준비 이 글은 Let's Encrypt라는 비영리 기관에서 무료로 발급하는 인증서를 이용해 Nginx에 SSL를 적용하는 방법이다. 이 방법을 이용하면 무료로 내 서버에 https로 접근할 수 있다. 단, 사전에 아래 사항이 준비가 되어 있다는 가정 하에 진행한다. CentOS7 리눅스 서버 Nginx openssl 1.1.1 이상 도메인 발급 - Centos7 서버를 구축하면 openssl이 기본적으로 설치되어 있다. 하지만 대부분 버전이 1.0.2일 것이다. openssl 1.0.2 버전은 Let's Encrypt가 발급하는 인증서를 만료된 인증서로 간주하기 때문에 정상 동작하기 어렵다. 또한 해당 버전은 상위 TLS 버전(1.3)을 지원하지 않는다. 따라서 별도로 openssl 1.1.1 버전..
Elasticsearch + Logstash + Kibana 구축하기 (3) - Kafka와 연동 구성도 갑작스러운 트래픽 증가로 Logstash와 Elasticsearch의 부하를 막기 위한 메시지 브로커 Kafka를 도입 Kafka는 데이터를 토픽으로 그룹화하고 발행-소비 체계로 운영되는 분산 큐 시스템. 도입 시 탄력적인 운영 가능. Elastic사는 어플리케이션과 Kafka 사이에 Shipper 역할을 하는 beats를 추가하는 것을 권장(이 글에서는 생략) 일반적으로 데이터 소스별로 토픽을 분리하고 토픽 별 파티션 수와 Logstash 인스턴스 규모를 조정(이 글에서는 토픽 별 파티션 수는 1개로 설정) 기본적으로 Logstash(shipper) 사용 시 데이터는 라운드 로빈 방식으로 파티션에 할당. message_key를 지정하면 파티션에 데이터를 할당한 방법 설정 가능 Kafka를 읽어들..
Elasticsearch + Logstash + Kibana 구축하기 (2) - Spring boot와 연동 구성도 간단한 로그를 생성하는 Springboot 애플리케이션 3개 3개의 어플리케이션에서 로그를 수집하여 Elasticsearch로 전송하는 logstash 전송받은 로그를 저정하는 Elasticsearch Visualization을 위해 Elasticsearch 서버에 search, aggreagate API를 호출하는 Kibana ELK는 편의상 도커 컴포즈로 구성한 deviantony/docker-elk 를 사용하여 구축 SpringBoot 구성 각 어플리케이션 이름은 springboot-elk-01, springboot-elk-02, springboot-elk-03으로 설정 1초마다 서버이름을 출력하는 로그 생성 @Slf4j @SpringBootApplication public class Spr..
Elasticsearch + Logstash + Kibana 구축하기 (1) - ELK 설치 ELK 스택 알아보기 ELK는 Elastic사에서 제공하는 Elasticsearch, Logstash 및 Kibana 세 가지 오픈소스 프로젝트의 약자 Elasticsearch 검색 및 분석 엔진으로 Logstash로부터 수집된 로그 데이터를 저장하고, 최소/최댓값, 평균 등의 분석 API를 제공한다. 관계형 데이터베이스와 달리 데이터를 해시테이블과 같이 저장 따라서 검색 시 시간복잡도는 O(1) index(database), type(table), document(row), field(column), mapping(schema)로 구성, Elasticsearch(관계형 데이터베이스) GET, POST, PUT, DELETE의 Rest API 제공 Logstash 여러 소스에서 동시에 데이터를 수집하여 ..