[Home-K8S] #22 FluxCD 계층과 분리 / 다중 클러스터 리소스 공유와 설정 분리
FluxCD - yaml 앞서 fluxcd 를 이용해서 helm chart 를 구성했습니다. 그 외에 일반적인 yaml
zookeeper를 사용하는 Python의 패키지는 kazoo 입니다.
pip install kazoo사용하는 방법은 간단합니다.
from kazoo.client import KazooClient
from kazoo.recipe.election import Election
import time
# Zookeeper 서버 연결
zk = KazooClient(hosts='zk-cs.zookeeper.svc:2181')
zk.start()
election_path = "/ttrade/path"zookeeper 서버에 연결하고 데이터를 저장할 Path (key) 를 정합니다.
이 Path를 가지고 중복된 Pod들이 서로의 정보를 공유합니다.
def work_as_leader():
print("I am the leader now. Performing leader tasks...")
# 여기에 리더가 해야 할 작업을 정의하세요.
while True:
# 작업을 수행하는 부분
time.sleep(5)
print("Leader is doing work...")Leader가 할 일에 대해서 작성합니다. 지금은 leader가 5초마다 쉬면서 log를 찍습니다.
try:
election = Election(zk,election_path)
print("Zookeeper Election")
election.run(work_ad_leader)
except KeyboardInterrupt:
print("Shutting down...")
finally:
zk.stop()
zk.close()
election = Election(zk,election_path) 로 리더 선출에 참여합니다.
election.run(work_as_leader) 로 리더가 되었을 경우 작업을 수행합니다.
가장 먼저 zookeeper의 Path에 지정하는 Pod의 정보들이 저장됩니다. 그리고 zookeeper에서 leader를 선출해서 함수를 실행하게 합니다.
선출된 leader는 할 일을 하고, 그 외의 pod들은 멈춰있습니다.
선출된 leader가 어떤 이유로 사라지거나 멈추게 되면 다른 즉시 다른 pod가 leader로 선출되어 실행됩니다.
실시간으로 data를 가져와야 합니다. 거래소에서 socket으로 값을 가져와서 kafka에 저장하는 데, 모든 노드에서 연결해서 값을 가져오는 것보다는 kafka에 전달하는 노드는 1개만 하고, 장애가 났을 경우에만 다른 노드가 실행되게 한다.
Comments