ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서버 다중화 (Active-Active, Active-Standby)
    서버 2016. 8. 25. 20:41

    서비스의 가동률을 높이는데에 여러가지 방법 중 서버 다중화를 설명하겠습니다.

    다중화 구성에는 다중화된 요소를 모두 이용할 수 있는 Active-Active와 다중화된 요소 중 한쪽은 사용할 수 없는 Active-Standby 두 종류가 있습니다. Active-Standby는 Standby의 방식에 따라 다시 세 종류로 나뉩니다.

    Hot StandbyStandby 측은 가동 후 즉시 이용가능한 구성
    Warm StandbyStandby 측은 가동 후 이용가능하게 하기 위해서 나름대로의 준비가 필요한 구성
    Cold StandbyStandby 측을 정지시켜 두는 구성

    Active-Standby 다중화 구성의 예


    기술적으로 가능하면 Active-Active가 가장 가동률이 높아집니다. 데이터를 저장하지 않은 Stateless 방식의 요소라면 Active-Active를 비교적 쉽게 구현할 수 있습니다. 대표적인 예로 웹 서버에서 로컬 스토리지나 임시 파일등을 이용하지 않은 경우에 간단하게 구현할 수 있습니다. 기본적으로는 Active-Active가 가능하도록 최대한 Stateless로 해야하지만 데이터베이스 서버나 파일 서버 등 데이터를 저장하는 부분을 Active-Active로 하면 대개 데이터 정합성 유지를 위해 동기화가 필요하기 때문에 동작이 느려집니다.

    다중화 구조

    데이터의 정합성을 얻기 위한 방법

    다중화한 경우의 주의할 점은 같은 데이터가 여러 개 존재하는 것이므로 어떤 데이터가 올바른 것인지 또는 가장 최신의 것인지를 제대로 관리해야 한다는 것입니다. 또한 여러 개의 데이터가 정확하게 일치하고 있는 상태를 유지해야만 합니다.

    일반적으로 스토리지를 공유하는 Shared Disk 방식과 스토리지를 공유하지 않는 Shared Nothing 방식이 있습니다. 

    Shared Disk 방식은 하나의 스토리지를 공유하며 대개는 전용 스토리지 기기를 이용합니다. Shared Disk 방식은 스토리지를 공유하기 때문에 정합성에 대해 특별히 문제될 것이 없습니다. 다만, Shared Disk 자체를 다중화해야 한다는 과제가 남습니다. Shared Disk 기능이 있는 스토리지 기기는 대체로 값비싼 기기들 입니다.



    Shared Nothing 방식의 경우는 스토리지 간 통신을 해 데이터 정합성을 확보합니다. 이것을 리플리케이션이라 하며, 리플리케이션의 데이터 송신측을 master, 데이터 수식 측을 slave라고 합니다. multi-master라고 하여 각각이 master와 slave의 역할을 모두 갖는 방식도 있지만 문제가 많이 발생하기 때문에 잘 사용하지 않습니다.


    동기식 리플리케이션은 오버헤드가 큰(동기 처리에 따른 성능 저하의 정도가 큰) 대신 데이터의 정합성을 확보하기 좋은 반면, 비동기식은 데이터 손실이 발생할 수도 있지만 성능 저하의 정도는 작습니다.

    스토리지에 RDBMS(관계 데이터베이스 관리 시스템)를 사용할 경우, MySQL이나 PostgreSQL은 표준으로서 비동기 리플리케이션에 대응하고 있기 때문에 자주 사용됩니다. 또한, 파일의 경우는 Isyncd 등을 이용한 순차 동기가 주로 사용됩니다. 비동기 방식이라고는 하지만 대부분 수 초에서 수십 초 사이에는 반영이 완료됩니다.


    위의 그림처럼 RDBMS에 데이터 손신을 피하는 리플리케이션 방법이 구현되었습니다. MySQL에서는 5.5버전부터 준동기식 리플리케이션이라는 명칭으로, PostgreSQL에서는 9.1버전부터 동기식 리플리케이션이라는 명칭으로 구현되고 있습니다. 명칭은 다르지만 구현하고 있는 기능은 거의 동일합니다.

    이것은 데이터 손실은 없지만 Standby측의 데이터 반영까지는 동기적이지 않은 방식입니다. 데이터 보호의 관점에서는 동기식 또는 준동기식이 필수지만, 부분적으로 비동기식을 조합하여 전체 성능을 높이는 방법이 많습니다.



    댓글