[AMAZON] EC2 프리티어로 API서버 구축 + Elaticsearch + Kafka
아마존에서 제공하는 프리티어로
테스트용 API서버 구축일지
Django + Gunicorn + Nginx API서버
- 이전 포스팅을 참고하면 빠르게 API 서버를 구축할 수 있다.
- 테스트용 API 서버이긴 하지만, 실제 서비스로 가정하고 Nginx와 Gunicorn을 장고에 연결한다.
- 서버 구축 관련 사항은 아래 링크 참고
- https://soyoung-new-challenge.tistory.com/62
연결 테스트
- Django + Gunicorn + Nginx가 잘 연결되었는지 연결 테스트
- 아마존 인스턴스 IP주소:80 포트로 요청을 보냈을 때 장고 시작화면이 나오면 성공
Elasticsearch + Kibana
- 추가적으로 서버로 들어온 요청을 확인 하기 위해 Elasticsearch + Kibana 구축
- 자세한 엘라스틱서치와 키바나의 설치 & 세팅 과정은 아래 포스팅을 참고
https://soyoung-new-challenge.tistory.com/56
인스턴스에서 Elasticsearch 실행
- 아마존에서 기본적으로 제공해주는 instance의 메모리는 1gb이다.
- 이때 발생하는 문제는, elaticsearch 설치시 기본 자바 최소 메모리가 1gb여서 실행시 메모리 에러 발생
[ERROR] : Not enough space, Insufficient memory for Java
- 따라서 기본적으로 설정 된 자바 heap memory사이즈를 변경해줘야 한다.
$ vi /etc/elasticsearch/jvm.options
- 최소 Xms512m
- 최대 Xmx512m
최소와 최대 메모리를 다르게 설정하면 아래와 같은 에러메세지가 elasticsearch 실행로그에 출력된다.
따라서 최소, 최대 메모리를 같은 사이즈로 바꿔준다.
- 자바 메모리 설정 변경 후에는 정상적으로 elasticsearch 실행 완료
엘라스틱 서치 실행 확인
- 정상적으로 실행 했는 지 상태 확인
$ sudo systemctl status elasticsearch.service
인스턴스에서 Kafka 실행
- 우선 아래 링크를 참고하여 빠르게 Kafka설치 및 실행 진행
https://soyoung-new-challenge.tistory.com/61?category=872749
- 아마존에서 기본적으로 제공해주는 instance의 메모리는 1gb... 이번에도 역시나 메모리 에러 발생
- 테스트 용 구축 시 한 인스턴스에서 Kafka와 Elasticsearch를 둘다 설치하는 건 무리여서 카프카만 실행하는 걸로 결정
- 이번에도 java_heap_size를 재 설정 해주어야 함
- 가장 빠르게 해결하는 방법은 아래와 같이 실행
- 메모리 1gb 기준으로 반 정도를 Kafka_heap_opts의 max로 정한다
export KAFKA_HEAP_OPTS="-Xmx512M -Xms256M"
## 서버를 껐다 켰을 때도 동일한 설정을 연결해주고 싶을 때
$ vi ~/.bashrc
export KAFKA_HEAP_OPTS="-Xmx512M -Xms256M"
쥬키퍼 & 카프카 실행 확인
- 위 설정을 마친 후 재 시작 시 아래와 같이 잘 실행되는 것을 확인 할 수 있다
# 쥬키퍼 실행 (꼭 선행되어서 실행)
$ bin/zookeeper-server-start.sh config/zookeeper.properties
# 카프카 실행
$ bin/kafka-server-start.sh config/server.properties
> 쥬키퍼 & 카프카 작동 확인 완료