에어비앤비에서 쿠버네티스에 분산 데이터베이스를 사용하여 고가용성을 달성하기
전통적으로 조직들은 데이터베이스 확장을 위해 샤딩을 사용하며 비용이 많이 드는 독립형 서버를 사용했지만, 이 접근 방식은 데이터 수요가 증가함에 따라 유지보수에 문제가 있음을 입증했습니다. 높은 가용성, 낮은 지연 시간, 확장성을 합리적인 비용으로 갖춘 클라우드에서 수평적으로 확장 가능한 오픈 소스 데이터베이스를 안정적으로 실행하는 것은 상당한 과제입니다. 에어비앤비는 안정성과 운영성을 향상시키기 위해 여러 쿠버네티스 클러스터에 분산 데이터베이스 클러스터를 배포하는 혁신적인 전략을 채택했습니다. 쿠버네티스에서 데이터베이스와 같은 상태 저장 서비스를 관리하는 것은 어렵습니다. 특히 노드 교체 및 업그레이드와 관련하여 쿠버네티스는 데이터 분산 인식 기능이 부족합니다. 이를 완화하기 위해 에어비앤비는 AWS EBS를 사용하여 스토리지 볼륨을 노드에 연결했으며, 쿠버네티스 영구 볼륨 클레임을 통해 새 가상 머신에 자동으로 다시 연결할 수 있도록 했습니다. 사용자 정의 쿠버네티스 연산자를 개발하여 노드 교체 이벤트를 관리하고, 이를 데이터베이스 시작, 사전 예방적 인프라, 계획되지 않은 오류로 분류했습니다. 데이터베이스 시작 및 사전 예방적 이벤트의 경우, 연산자는 교체 전에 모든 노드가 실행 중인지 확인하고 안전한 삭제를 조정하기 위해 파드 퇴거를 가로챕니다. 계획되지 않은 오류는 조정할 수 없지만, 실패한 하드웨어가 수정될 때까지 교체를 차단하여 지속적인 유지보수가 보호됩니다. 높은 지역적 가용성을 보장하기 위해 에어비앤비는 각 데이터베이스를 서로 다른 AWS 가용 영역에 있는 세 개의 독립적인 쿠버네티스 클러스터에 배포하여 문제의 파급 효과를 제한합니다. 데이터베이스 클러스터의 과잉 프로비저닝은 전체 AZ, 쿠버네티스 클러스터 또는 한 구역의 모든 스토리지 노드가 다운되더라도 충분한 용량을 보장합니다. AWS EBS는 노드 교체를 위한 빠른 다시 연결과 우수한 내구성을 제공하여 세 개의 복제본만으로도 높은 가용성 클러스터를 지원합니다. EBS의 지연 시간 급증은 스토리지 읽기 시간 초과를 구현하고 복제본에서 읽기를 허용하여 지연 시간을 줄이고 AZ 간 비용을 방지하며, 오래된 읽기 기능을 통해 읽기 성능을 더욱 최적화합니다. AWS EBS 및 사용자 정의 연산자를 활용하는 이 다중 클러스터 쿠버네티스 전략을 통해 오픈 소스 분산 스토리지 시스템은 클라우드 환경에서 높은 가용성, 낮은 지연 시간 및 확장성을 달성하여 강력한 데이터 관리를 가능하게 합니다.