전체 글 116

CoreOS etcd 클러스터 구축하기

오늘은 CoreOS cluster architecutres 문서에 기술된 Production cluster with central services를 구축해보려고 합니다. 큰 규모의 서비스를 운영해야하는 경우 이 아키텍쳐를 사용하는 것이 좋습니다. 3~5개의 머신으로 etcd 클러스터를 별도로 구성하고 Worker 머신에는 etcd를 Proxy로 실행시키는 방식입니다. 그러면 Worker는 etcd proxy를 통해 Central Services의 etcd를 사용할 수 있습니다. etcd Proxy는 etcd 클러스터의 write 성능에 아무런 영향을 끼치지 않는다고 하네요. Security Group 생성Security Group을 하나 생성합니다. 저는 SSH 접속을 위해 22번 포트를 열었고, etc..

MicroService 2016.08.11

CoreOS etcd cluster 사이즈 변경하기

CoreOS 설치Document를 보고 AWS EC2 환경에 CoreOS 클러스터를 구축하였습니다. CloudFormation으로 구축하니 클릭 몇번으로 환경이 구성되어 굉장히 편리하네요. 각 인스턴스의 UserData는 아래와 같이 구성되었습니다. 만약 UserData를 변경하고 싶다면 인스턴스를 Stop한 경우에만 가능하다고 하네요. Cluster 사이즈 변경etcd의 discovery값은 etcd 클러스터 개수에 기반하여 생성된 값입니다. 그렇다면 etcd 클러스터 사이즈를 늘리기 위해서는 인스턴스들을 정지시키고 User Data를 모두 변경해줘야 할까요? Document를 조금 더 읽어보니 etcdctl 명령어를 사용하면 downtime없이 클러스터를 추가하거나 삭제하는 것이 가능하다고 하네요. ..

MicroService 2016.08.10

Docker port 범위 사용 시 cannot allocate memory 오류

증상넓은 범위의 port를 사용하여 container를 실행하려고 하였더니 cannot allocate memory 오류가 발생하였습니다. version: '2'services: tunnel_http: build: ./tunneling ports: - "30000-30999:30000-30999" ERROR: for tunnel_http driver failed programming external connectivity on endpoint docker_tunnel_http_1 (3e88c0459935f2feb125235551af19769359865534da160db348ca5eb536613f): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d..

Docker 2016.07.28

docker-compose ports 적용이 안되는 경우

증상Dockerfile에는 EXPOSE를 명시하지 않고 대신 docker-compose.yml에 ports를 설정하였습니다.그런데 docker-compose run을 하였는데 해당 port가 맵핑되지 않습니다. docker-compose.ymlversion: '2'services: myapp: build: ./myapp ports: - "8080:8080" myapp container실행$ docker-compose run -d myapp 바인딩된 포트 확인 (아무것도 없음)$ netstat -nap | grep 8080 원인 및 대책docker-compose.yml의 ports: 설정은 docker-compose up 명령으로 실행했을 때만 적용됩니다. docker-compose run 명령 시에도 적..

Docker 2016.07.27

Filebeat 데이터를 로드밸런싱하는 방법들

Filebeat 데이터를 로드밸런싱하는 방법을 검토해보았습니다.1. logstash loadbalance 설정을 활성화시키는 방법filebeat.yml logstash: hosts: ["192.168.0.10:5044", "192.168.0.11:5044", "192.168.0.12:5044"] loadbalance: true Filebeat 설정에서 logstash의 loadbalance 옵션을 활성화시키면 등록된 Logstash hosts들에게 데이터가 분산됩니다. LogStash 인스턴스 개수가 고정이라면 이 방법이 가장 유용합니다. 하지만 LogStash가 오토-스케일링되는 조건이라면 LogStash 인스턴스들을 Discovery하여 Filebeat 설정에 반영해주는 모듈을 별도로 구현해줘야합니다..

LogStash 2016.07.25

[LogStash] Filter 적용하여 로그 파싱하기

로그 포맷제가 파싱하려는 로그는 아래의 포맷으로 기록되고 있습니다.[timestmp] [log_level] [task_id] message 로그 예제[2016-07-21 05:27:19,818] [INFO] [....................................] Received task: qservice.devicemgmt.worker.GetServices[f770306e-1582-4b1e-9a6b-b5e09ca5f924][2016-07-21 05:27:19,819] [INFO] [f770306e-1582-4b1e-9a6b-b5e09ca5f924] message...[2016-07-21 05:27:19,761] [INFO] [......................................

LogStash 2016.07.21

[Spring] DataSource 의존성 주입

Spring을 통해 MySQL에 접근하기 위해서 Bean 객체를 정의하고 DataSource에 주입하였습니다.구체적은 소스코드는 다음과 같습니다. pom.xml MySQL 연결을 위해 maven 저장소에서 필요한 모듈을 내려받습니다. mysql mysql-connector-java 5.1.38 org.springframework spring-jdbc ${org.springframework-version} root-context.xml JDBC 드라이버를 사용하여 MySQL에 접근할 수 있는 Bean을 정의합니다. DataSourceTest.java DataSource를 주입(@Inject)하면 root-context.xml에서 정의한 Bean을 사용하여 MySQL에 접근하게 됩니다. ... import ..

Spring 2016.07.12

Docker 윈도우 공유 폴더 마운트

Boot2Docker 이미지로 생성된 가상 OS는 재부팅 시 일부 디렉토리를 제외한 모든 경로의 데이터를 초기화시킵니다. 따라서 소스코드와 같은 파일들을 가상 OS 내부에서 다루는 것은 위험합니다. 저는 소스코드가 담긴 윈도우 폴더(q-cloud-backend)를 Docker 가상 OS에 마운트시키고 이를 기반으로 컨테이너가 동작하도록 설정해보았습니다. VirtualBox 공유 폴더 설정 공유 폴더 자동 마운트 설정1) ssh 로그인 후 bootlocal.sh 생성docker@default:/$ sudo vi /var/lib/boot2docker/bootlocal.sh ----------------------------------------------------------------------------..

Docker 2016.06.16

Putty로 윈도우 Docker 이미지 접속하기

Docker Toolbox 설치https://www.docker.com/docker-toolbox Boot2Docker.iso 이미지 설치 및 실행"Docker Quickstart Terminal"을 실행하면 Boot2Docker.iso 이미지가 VirtualBox에 자동으로 설치된다. Putty로 접속1) "Docker Quickstart Terminal"을 실행하여 상단에 표시되는 IP를 확인한다. 2) Putty 접속 (사용자:docker, 비밀번호:tcuser) TIP! SSH 인증키 사용하여 로그인1) puttygen 실행2) File > Load private keyC:\Users\계정명\.docker\machine\machines\default\id_rsa 3) Save private key..

Docker 2016.06.16