티스토리 뷰
Kafka를 1도 모르면서 Kafka를 모니터링하는 프로그램 개발을 하게 되어 처음으로 해보게 된 것이 Kafka 클러스터 세팅이다. 구글링하면서 진행했는데 같은 실수를 반복하지 않기 위해, 그리고 시작하면서 우려스러웠던 점들 확인했던것들을 기록하고자 진행내용을 정리해본다.
1. AWS 서비스 가입 및 결제수단 등록
- 특별한 이슈 사항 없음.
2. Kafka 클러스터 구축을 위한 VM 인스턴스(EC2 : Elastic Compute Cloud) 생성
- 가입후 첫 화면에서 '솔루션 구축' > 'EC2를 사용하여 가상 머신 시작' 을 선택하여 진행
1) AMI선택
"Amazon Linux 2 AMI (HVM), SSD Volume Type"으로 진행했는데, 지금 다시보니 "Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type" 에는 VM에 일부 도구가 설치되어서 제공된다고 나와있다.
2) 인스턴스 유형 선택
비용을 최대한 안들이고 테스트 해보고 싶었던거라 "프리 티어 사용 가능" 표시가 있는 유형으로 선택하고
'다음 : 인스턴스 세부 정보 구성'을 눌러 넘어간다.
3) 인스턴스 세부 정보 구성
세부 설정을 진행하면 '추가 요금'이 있다는 옵션들이 있다.
인스턴스 개수를 '3'으로 설정하고 '다음 : 스토리지 추가'로 넘어간다. (Kafka 클러스터를 3 VM으로 구성)
4) 스토리지 추가
기존으로 8GB가 제공되고 30GB까지는 무료로 제공된다고 나온다.
'종료 시 삭제'가 이미 check되어 있는데,
이것은 현재 설정하는 'Instance'의 상태를 '종료'로 바꾸면 스토리지도 같이 삭제된다는 의미로
Instance를 '중지'상태로 바꾸면 스토리지는 남아있게 된다.
세팅하다가 잘못한 것 같고, 원복이 힘든것 같으면 그냥 'Instance'를 '종료'처리하고 새로 만들면 된다.
※ 'Instance'를 중지하고 일정시간이 지나면, 중지된 'Instance'는 EC2 대쉬보드의 'Instance'목록에서 사라지게 된다.
그런데 EC2 대쉬보드 첫 화면을 잘 보면 '볼륨'에 숫자가 남아있고 해당 정보를 눌러 들어가보면
'볼륨'(스토리지) 목록이 남아있다. 해당 목록에서 다시 'Instance'정보로 쫒아갈 수 있는데,
거기서 'Instance'를 다시 '실행'할 수 있다.
5) 태그 추가
리소스가 많아지는 경우, 이를 분류 관리하기 위한 항목으로 별도 입력없이 지나갈 수 있다.
6) 보안 그룹 구성
EC2 VM에 접근할 수 있는 IP/Port 등을 보안처리하는 부분이다. 인스턴스 생성후에도 보안 그룹을 변경하거나 할 수 있는것으로 보이는데 실제로 해보진 않았다. Kafka 클러스터 구성을 위해서는 서비스용 포트를 미리 등록해놓으면 편하다.
- [경고] "소스가 0.0.0.0/0인 규칙은 모든 IP 주소에서...". 이 페이지에는 이런 경고문구가 있어
뭔가 별도 처리를 해줘야하는지 구글링을 해봤는데 별도로 크게 나오는 내용은 없었다.
그리고 인스턴스 시작 시, pem이라는 key 파일을 발급받아서 ssh로 접근하게 되어 있어서
개인 테스트 후 VM리소스 종료만 잘해주면 크게 문제 없는 것 같다.
- Kafka 클러스터 구성에 필요한 포트는 다른 블로그를 참조하였다. (https://blog.voidmainvoid.net/325)
[ 사용자 지정 TCP 규칙 ] / 2888 / [위치 무관] 'Zoo Keeper'용
[ 사용자 지정 TCP 규칙 ] / 3888 / [위치 무관] 'Zoo Keeper'용
[ 사용자 지정 TCP 규칙 ] / 2181 / [위치 무관] 'Zoo Keeper'용
[ 사용자 지정 TCP 규칙 ] / 9092 / [위치 무관] 'Kafka'용
7) 검토 및 시작
Key파일인 pem파일을 발급받는다. 이 파일을 활용해 VM에 접근하게 된다.
VM접근 방식은 크게 2가지 방법이 있는데 아래 내용들을 참조하였다.
(putty 설치 필요한 방법도 있음. 기업에서도 무료로 사용가능)
- https://goddaehee.tistory.com/181
- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html
※ EC2의 사용자용 기본계정은 ec2-user 이다.
3. VM에 Zookeeper 및 Kafka 설치
- 다음 블로그를 참조하여 진행하였다.
(참고, Kafka에는 ZooKeeper가 포함되어 배포되고 있다. 별도로 ZooKeeper를 다운받아 설치하지 않아도 됀다.)
http://blog.naver.com/PostView.nhn?blogId=hanajava&logNo=221581346202
※ ZooKeeper와 Kafka를 실행하는 sh파일에는 메모리 설정이 되어 있는데,
EC2를 저렴하게 기본구성하는경우 메모리 부족으로 실행되지 않을 수 있다.
둘 중 하나의 메모리 할당 설정을 변경해주면 된다. 아래는 Kafka 설정 변경 방법이다.
https://printhelloworld.tistory.com/160
[Zookeeper 및 Kafka 설치 중 초보자들이 잘 모를 수 있는 Trick들]
1) /etc/hosts의 IP 설정 기준
- 1년정도 전에 다른 교육과정에서 Kafka, Zookeeper 등을 설치해봤던 기억이 가물거리면서 떠올린 부분이다.
Zookeeper를 위해 /etc/hosts를 설정하는데, 어떤 정보를 기준으로 설정해야하는지 적어놓은 블로그들이 없다.
여기서는 3개의 EC2(VM)을 만들었고 해당 VM들끼리 hosts에 설정한 명칭을 IP로 대치해서 연결되도록 하는 것인데
IP들은 각 VM에 접속하여 "ip addr show"등의 IP 확인 명령어를 통해, 내부 할당 IP를 확인해서 설정하도록 한다.
EC2의 Instance화면에 할당된 public IP가 있어서 그 값으로 설정할수도 있을것 같은데
(public으로도 클러스터가 잘 동작하는지 확인은 해보지 않음),
Instance를 중지시키고 한참후에 다시 실행시키면 public IP가 변할수 있다.
다행히 private IP는 변하지 않는 걸 확인하였다.
한번에 모든 과정을 끝낼것이 아니면, 그리고 만들어 놓은 Kafka Cluster에 다른 테스트를 또 하려면,
private IP로 설정하는게 편하다.
- /etc/hosts의 '0.0.0.0'은 각 Node의 명칭 입력
3개 Node의 /etc/hosts는 똑같은 내용을 copy&paste해서 넣으면 안된다.
1번 Node에서는 0.0.0.0에 1번 Node의 이름을, 2번 Node에서는 0.0.0.0에 2번 Node의 이름을 넣어야한다.
2) Application 실행 권한
- EC2에서는 기본적으로 root 계정이 활성화되어 있지 않다는 내용을 구글링하면서 본 것 같다.
그래서 구글링하다보면 나오는 내용이 EC2에서 root계정 활성화하는 방법 등이 나와 있다.
그것 말고 그냥 명령어 앞에 sudo 를 넣고 실행하는 것도 괜찮다.
3) EC2에 JAVA 설치
- ZooKeeper 또는 Kafka 실행시 JAVA가 없다고 오류가 발생한 케이스가 있었다.
실제로도 java -version 명령에서 아무것도 나오지 않아서
AWS용 Open JAVA가 있어 아래 블로그를 참조하여 설치하였다.
https://sarc.io/index.php/aws/1809-aws-java-amazon-linux-2-amazon-corretto-8
(참고1) 구글링해서 나오는 EC2 Kafka/Zookeeper 설치하는 내용들에는 JAVA내용은 빠져있었던것 같은데
별도 설치 없이 잘 돌아가면 설치 안해도 될 것 같다.
(참고2) EC2에서 AMI 선택시 JAVA등 기본설치 된 것으로 보이는 VM 옵션이 있는데 그걸 사용하면
별도 설치를 안해도 될 것 같다. (테스트 해보지는 않음)
4. 비용 알람 설정
- AWS콘솔 상단 우측에 계정명을 클릭해보면 '내 결제 대시보드' 메뉴가 있다.
- 'Budgets' 메뉴에 들어가 '예산 작성'을 클릭한다.
1) 예산 유형 선택
'비용 예산' 선택 후 '예산 설정'선택 (지정된 달러금액 기준으로 비용을 모니터링하여, 임계값 초과시 알람 전달)
2) 예산 설정
'이름' 항목과 '예산 금액'을 설정하고 '알람 구성'을 선택.
(이 예산은 계획된 총 비용이고, 다음 단계에서 이 예산 중 어느정도를 초과해야 알람이 발생하는지 설정할 수 있다.)
3) 알림 구성
'알림 임계값' (예산의 %) 과 알람 수신 이메일을 설정하고 '예산 확인' 선택
4) 예산 확인
내용 확인 후 '작성' 선택
※ 본 Kafka 클러스터 구축 및 테스트를 하면서 전혀 비용이 발생하지 않아서,
이 알림설정으로 유효하게 알람이 발생하는지는 확인하지 못함.
-끝-
[추가사항]
Zookeeper를 별도로 깔아서 세팅도 해보고, Kafka에 같이 딸려오는 버전으로도 세팅도 해보니
별도 버전과 Kafka버전의 sh 파일명도 다르고, config 파일명과 경로도 달라서 시간이 지난뒤에 다시하려니 혼동이 온다.
다시 블로그들과 자료들 찾아가면서 겨우 다시 테스트하고 세팅했다. (현재 Telegraf+InfuxDB+Grafana세팅 후, Jolokia를 이용해 Kafka->(Jolokia)->Telegraf 연결구성중)
기동시 or 테스트시 명령했던 명령어들은 잘 기록하도록 하자.
1. Zookeeper 기동 - sudo ./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties 2. Kafka서버 기동 - sudo ./bin/kafka-server-start.sh -daemon ./config/server.properties 3. Kafka Console Producer/Consumer를 이용한 테스트 (/etc/hosts에 설정한 호스트명 참조) - ./bin/kafka-console-producer.sh --broker-list test-broker01:9092,test-broker02:9092,test-broker03:9092 --topic t3 - ./bin/kafka-console-consumer.sh --bootstrap-server test-broker01:9092,test-broker02:9092,test-broker03:9092 --topic t3 |
'프로그래밍 > 빅데이터 관련' 카테고리의 다른 글
Telegraf + Influx DB + Grafana on AWS EC2 (0) | 2020.06.25 |
---|---|
Kafka Partition Assignment Strategy (0) | 2020.06.25 |
ZooKeeper 예제들의 3 node 세팅의 이유 (기초) (0) | 2020.06.12 |