yeollow / return-home-safely

Apache License 2.0
1 stars 0 forks source link

[AWS] : building kafka cluster #17

Open yeollow opened 3 years ago

yeollow commented 3 years ago

kafka / zookeeper cluster 구축 내용

각 hostname이 worker1, worker2, worker3인 AWS instance 3개를 통해 cluster를 구축한다.

zookeeper : 분산 시스템을 위한 코디네이터로 kafka의 동작은 zookeeper에 의해 관리된다. 별도로 zookeeper를 구축해도 되지만, 해당 프로젝트 에서는 kafka 설치 시 들어있는 zookeeper를 사용한다.


kafka : 기본적으로 pub/sub model을 구현한 분산 메시징 시스템이다. kafka는 수평적인 확장을 위해 cluster를 구성하며 broker의 clustering을 위해 zookeeper를 통해 관리한다.

yeollow commented 3 years ago

참고

kafka는 cluster를 3대로 구성했을 때, 2대가 다운되어도 서비스를 제공할 수 있는 반면 zookeeper는 3대의 앙상블 중 2대(과반수 이상)가 다운되면 장애가 발생한다. 이와 같이 zookeeper의 장애 상황으로 코디네이션 역할을 하지 못하는 경우에는 kafka cluster에 문제가 없더라도 kafka 역시 장애 상황에 놓이기 때문에 되도록이면 zookeeper와 kafka는 동일한 서버가 아닌 별도의 서버로 구성하는 것이 좋다.

yeollow commented 3 years ago

zoo.cfg

/usr/local/zookeeper/conf 경로에 위치

tickTime=2000          # zookeeper가 사용하는 시간 측정 단위
initLimit=10               # follower와 leader가 초기에 연결하는 시간에 대한 timeout
syncLimit=5              # follower와 leader가 동기화 하는 시간에 대한 timeout
dataDir=/data           # zookeeper의 transaction log와 snapshot이 저장되는 데이터 저장 경로
clientPort=2181        # zookeeper 사용 TCP port

# zookeeper 앙상블 구성을 위한 server 설정
# 위에서 지정한 myid의 번호를 통해 server.myid와 같이 구성하며 2888과 3888은 기본 포트이다.
server.1=worker1:2888:3888
server.2=worker2:2888:3888
server.3=worker3:2888:3888
yeollow commented 3 years ago

zookeeper-server.service

/etc/systemd/system 경로에 위치

[Unit]
Description=zookeeper-server        # `systemctl status` 명령어에 표시
After=network.target                        

[Service]
Type=forking                # 'ExecStart`에 영향을 주는 unit process가 시작됨
User=root
Group=root
SyslogIdentifier=zookeeper-server
WorkingDirectory=/usr/local/zookeeper            # 실행 process의 working directory지정
Restart=always                # always로 설정한 경우, systemctl 명령어로 인한 중지를 제외하고 process가 종료된 후 항상 재시작 함
RestartSec=0s                  # Restart를 몇 초에 실행할지 지정
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start            # Service가 시작될 때 실행할 명령어 또는 스크립트를 설정
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop            # Service가 정지될 때 실행할 명령어 또는 스크립트를 설정
yeollow commented 3 years ago

zookeeper 실행 장애 발생

worker1,worker2,worker3에 대해 와 같은 zookeeper 설정 및 실행 진행 시 /usr/local/zookeeper/bin/zkServer.sh start zookeeper server FAILED TO START.. 및 systemctl start zookeeper-server.service 명령 또한 실패

zookeeper ensemble fails to start 원인../zookeeper/logs/XXX.out확인 결과, org.apache.zookeeper.server.quorum.QuorumPeerMain 에 대한 ClassNotFoundException 발생 확인.

yeollow commented 3 years ago

kafka server.properties

/usr/local/kafka/config/ 경로에 위치

자세한 내용은 broker configs참조

yeollow commented 3 years ago

kafka-server.service

/etc/systemd/system 경로에 위치

[Unit]
Description=kafka-server        # `systemctl status` 명령어에 표시
After=network.target                        

[Service]
Type=simple                # 'ExecStart`에 영향을 주는 unit process가 시작됨
User=root
Group=root
SyslogIdentifier=kafka-server
WorkingDirectory=/usr/local/kafka            # 실행 process의 working directory지정
Restart=no                # 항상 재시작을 허용하지 않음
RestartSec=0s                  # Restart를 몇 초에 실행할지 지정
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties            # Service가 시작될 때 실행할 명령어 또는 스크립트를 설정
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh            # Service가 정지될 때 실행할 명령어 또는 스크립트를 설정