본문 바로가기

STUDY/실전 카프카 개발부터 운영까지

2장 - 카프카 환경 구성

카프카 클라우드 환경

 

AWS EC2 인스턴스 생성

 

총 7개의 Amazon-Linux EC2 인스턴스를 생성한다. 여기서 1개의 인스턴스는 ansible, 3개의 인스턴스는 주키퍼 클러스터, 3개의 인스턴스는 카프카 클러스터에 사용된다.

 

이때 인스턴스의 보안규칙은 1. ssh 접속을 위해 22번 포트는 열어두고 2. 클러스터 내부 통신을 위해 VPC에서 오는 모든 포트를 열어두고 3. 이후 실습할 내용을 위해 0 - 65535 포트를 열어둔다. (교육용으로 실환경에서는 사용하는 포트만 열어야 한다.)

 

 


DNS 설정

 

> sudo vi /etc/hosts

아래 내용 삽입 //////////////////////////////////////////////////////////////////////
{ec2 private ip} peter-ansible01.foo.bar peter-ansible01
{ec2 private ip} peter-kafka01.foo.bar peter-kafka01
{ec2 private ip} peter-kafka02.foo.bar peter-kafka02
{ec2 private ip} peter-kafka03.foo.bar peter-kafka03
{ec2 private ip} peter-zk01.foo.bar peter-zk01
{ec2 private ip} peter-zk02.foo.bar peter-zk02
{ec2 private ip} peter-zk03.foo.bar peter-zk03

각 인스턴스간에 도메인 네임을 사용하여 통신하게 위해, DNS 설정을 해야한다. 실습환경에서는 Route53 같은 DNS서비스대신 /etc/hosts 파일을 수정하여 대신한다. 

 

> ping -c 2 peter-kafka01.foo.bar

설정 후, 호스트 네임을 통한 핑테스트를 수행하여 정상 동작하는지 확인한다.

 

 


Ansible 설치 및 실습 코드 받기

 

> sudo amazon-linux-extras install -y ansible2
> sudo yum install -y git
> git clone https://github.com/onlybooks/kafka2

카프카 클러스터가 여러 EC2로 구성되어 있기 때문에, 보다 효율적으로 인프라를 관리하기 위해 Ansible을 사용한다. 그리고 실습을 위한 코드 및 설정 파일들이 있는 git 파일을 내려받는다.

 

 


Ansible 서버의 공개키 복사

 

ansible 인스턴스가 다른 zookeeper, kafka 인스턴스를 관리하기 위해서는 ansible 인스턴스에서에서 다른 인스턴스로 접속할 수 있어야 한다. 이를 위해 ansible 인스턴스의 공개키를 다른 인스턴스들에 등록해주어야 한다.

 

ansible 인스턴스에서 실행 ////////////////////////////////////////////////////////////////////
> ssh-keygen
> cat .ssh/id_rsa.pub

 

이 값을 복사 //////////////////////////////////////////////////////////////////
ssh-rsa ...

ansible 인스턴스에서 ssh-keygen으로 공개키를 생성하고, cat 명령어로 이를 출력한 값을 복사한다.

 

다른 인스턴스들에서 실행 /////////////////////////////////////////////////////////////
> sudo vi .ssh/authorized_keys
> chmod 600 .ssh/authorized_keys

그리고 복사한 ansible 인스턴스의 공개키를 다른 인스턴스들의 인증키 파일에 붙여넣는다.

 

 


Ansible을 사용한 Zookeeper, Kafka 인스턴스 설정

 

ansible 인스턴스에서 실행 //////////////////////////////////////////////////////////////
> cd kafka2/chapter2/ansible_playbook
> ansible-playbook -i hosts zookeeper.yml
> ansible-playbook -i hosts kafka.yml

이제 각 인스턴스들에 kafka와 zookeeper를 설치하고 관련 설정들을 해줘야한다. 이때 ansible을 사용하여 이 인프라 작업들을 한번에 수행한다. git에서 내려받은 실습코드에서 ansible 폴더로 이동 한다. 그리고 zookeeper와 kafka 설정 파일을 실행한다. 그럼 ansible은 zookeeper 인스턴스들에는 zookeeper를 위한 환경을 설치하고 실행한다. kafka 인스턴스들에도 이를 위한 환경을 설치하고 실핸한다.

 

zookeeper 인스턴스에서 실행 //////////////////////////////////////////////////////////////////
> sudo systemctl status zookeeper-server

kafka 인스턴스에서 실행 //////////////////////////////////////////////////////////////////
> sudo systemctl status kafka-server

ansible이 정상적으로 동작하고 나면, zookeeper, kafka 인스턴스로 이동해서 제대로 실행되고 있는지 확인한다.

 

 


메시지 주고 받아보기

 

kafka01 인스턴스에서 실행 /////////////////////////////////////////////////////////////////
> /usr/local/kafka/bin/kafka-topics.sh --bootstrap-server peter-kafka01.foo.bar:9092 --crea
te --topic peter-overview --partitions 1 --replication-factor 3

이제 카프카 실습을 위한 클러스터 구성이 끝났으니, 간단하게 메시지를 주고 받아보겠다. 먼저 kafka01 인스턴스로 이동하여 메시지를 주고 받기위한 토픽을 생성해준다. 토픽이 무엇인지는 추후 챕터에서 배울 것이다.

 

cmd 창 1 //////////////////////////////////////////////////////////////////////////////////
> /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server peter-kafka01.foo.bar:9092 
--topic peter-overview01

 

cmd 창 2 /////////////////////////////////////////////////////////////////////////////////
> /usr/local/kafka/bin/kafka-console-producer.sh --bootstrap-server peter-kafka01.foo.bar:9092 
--topic peter-overview01

그리고 두개의 cmd 창을열고 kafka01 인스턴스로 들어와서, 각각 consumer와 producer를 실행해준다. 그리고 producer에서 메시지를 입력하면 consumer에서 해당 메시지가 보일 것이다.

 

hello 메시지 전송

 

 

728x90