WorkaHolic/MSSQL

MSSQL 2005 Mirroring 설정

2010. 4. 26. 16:59
반응형

MSSQL 2005 Mirroring 설정

 

작성자 : 개발팀 정성학
이메일 : hakburi@naver.com

 

 1. Mirroring 개요

데이터베이스 미러링은 데이터베이스의 가용성을 높여 주는 주요 소프트웨어 솔루션입니다. 미러링은 데이터베이스 단위로 구현되며 전체 복구 모델을 사용하는 데이터베이스에서만 작동합니다. 단순 복구 모델 및 대량 로그 복구 모델에서는 데이터베이스 미러링이 지원되지 않습니다.

 

데이터베이스 미러링은 상시 대기 서버를 유지함으로써 작동합니다. 일반적인 미러링 세션 중 프로덕션 서버에 문제가 발생하면 클라이언트 응용 프로그램에서 대기 서버에 다시 연결하여 빠르게 복구할 수 있습니다.

(참고 : master, msdb, tempdb 또는 model 데이터베이스는 미러링할 수 없습니다.)

 

데이터베이스 미러링에는 일반적으로 서로 다른 컴퓨터에 상주하는 2개의 단일 데이터베이스 복사본이 사용됩니다. 클라이언트는 항상 하나의 데이터베이스 복사본만 사용할 수 있습니다. 이 복사본을 주 데이터베이스라고 합니다. 클라이언트가 주 데이터베이스에 수행한 업데이트는 미러 데이터베이스라고 하는 다른 데이터베이스 복사본에 미러링됩니다. 미러링에는 주 데이터베이스에 대해 수행된 모든 삽입, 업데이트 또는 삭제 작업의 트랜잭션 로그를 미러 데이터베이스에 적용하는 작업이 포함됩니다.

 

주 데이터베이스와 미러 데이터베이스는 별개의 서버 인스턴스(, Microsoft SQL Server 데이터베이스 엔진 의 인스턴스)에 상주해야 합니다. 두 서버 인스턴스는 데이터베이스 미러링 세션에서 파트너로서 통신하고 협력합니다. 두 파트너는 세션에서 서로 보완되는 주 역할과 미러 역할을 수행합니다. 언제든지 한 파트너는 주 역할을 수행하고 다른 파트너는 미러 역할을 수행합니다. 각 파트너는 현재 역할을 소유한다고 표현합니다. 주 역할을 소유하는 파트너를 주 서버라고 하며 주 서버의 데이터베이스 복사본이 현재의 주 데이터베이스입니다. 미러 역할을 소유하는 파트너를 미러 서버라고 하며 미러 서버의 데이터베이스 복사본이 현재의 미러 데이터베이스입니다.

(참고 : 일반적으로 미러된 데이터베이스와 미러되지 않은 데이터베이스는 같거나 다른 참가자와 함께 여러 데이터베이스 미러링 세션에 포함될 수 있는 같은 서버 인스턴스에 함께 존재합니다.)

 

           가장 간단한 데이터베이스 미러링은 주 서버와 미러 서버만 포함된 것입니다. 다음 그림은 이러한 두 서버로 구성된 세션을 보여 줍니다.

사용자 삽입 이미지

           다른 구성 방법은 미러링 모니터라고 하는 세 번째 서버 인스턴스를 포함하는 것입니다. 다음 그림은 미러링 모니터가 포함된 세션을 보여 줍니다.

  

사용자 삽입 이미지

           데이터베이스 미러링 세션에서는 역할 전환 프로세스를 통해 주 역할과 미러 역할을 서로 바꿀 수 있습니다. 역할 전환 시 미러 서버는 주 서버에 대한 장애 조치(Failover) 파트너 역할을 하며 주 역할을 넘겨 받아 해당 데이터베이스 복사본을 새로운 주 데이터베이스로 사용할 수 있도록 온라인 상태로 만듭니다. 이전 주 서버(사용 가능한 경우)는 미러 서버 역할을 맡으며 이 서버의 데이터베이스는 새 미러 데이터베이스가 됩니다.

 

2. Mirroring 이점

           데이터베이스 미러링은 다음과 같은 이점을 제공하는 간단한 전략입니다.

Ø  데이터베이스 미러링은 완전하거나 거의 완전한 데이터 중복성을 제공합니다.

Ø  서버 인스턴스는 직접 네트워크 연결을 통해 통신하며 다른 위치에 있을 수 있습니다. 서로 아주 먼 거리에 떨어져 있을 수도 있습니다. 특별한 하드웨어는 필요하지 않습니다. 그러나 장거리 통신의 경우 비동기 운영 모드에서 실행하는 것이 좋습니다. 세션의 운영 모드에 따라 특정 형태의 역할 전환이 지원됩니다.

Ø  일부 구성에서 데이터베이스 관리자는 가용성에 영향을 주지 않고 하드웨어 또는 소프트웨어 업그레이드를 위해 수동 장애 조치를 사용할 수 있습니다. 소프트웨어 업그레이드 시 데이터베이스 미러링을 사용하려면 미러 서버 및/또는 시스템에 이미 해당 업그레이드가 있어야 합니다.

Ø  미러링 세션은 두 파트너와 선택적 미러링 모니터만 지원하지만 지정된 서버 인스턴스는 각각 다른 데이터베이스에 대해 여러 개의 동시 세션에 참여할 수 있습니다. 서버 인스턴스는 일부 세션에서는 파트너 서버 역할을, 다른 세션에서는 미러링 모니터 서버의 역할을 수행합니다.
(
참고 : 미러된 데이터베이스는 서로 독립적이므로 여러 데이터베이스에 대한 장애 조치를 하나의 그룹으로 처리할 수 없습니다.)

Ø  데이터베이스 미러링은 전체 텍스트 카탈로그를 지원합니다.

Ø  데이터베이스 소유자는 미러 데이터베이스에 대한 하나 이상의 데이터베이스 스냅숏을 만들어 클라이언트가 제한된 보고서 작성에 미러 데이터베이스를 사용하도록 허용할 수 있습니다.

Ø  데이터베이스 미러링은 관리하기 쉬운 장애 조치 클러스터링 방법을 제공합니다. 데이터베이스 미러링은 서로 다른 두 장애 조치 클러스터 사이에는 사용할 수 있지만 하나의 클러스터 내에서는 사용할 수 없습니다.

Ø  데이터베이스를 미러링 세션의 주 데이터베이스이자 로그 전달 구성의 주 데이터베이스로 구성할 수 있습니다. 그러나 미러 데이터베이스는 로그 전달에 참여할 수 없으며 로그 전달 보조 데이터베이스는 다른 서버 인스턴스에서 미러 서버와 달라야 합니다.

Ø  데이터베이스 미러링은 복제와 호환됩니다.

 

멈추지 않는 시스템을 위한 DB 미러링

 

SQL 서버 2000에는 서버가 도중에 다운되더라도 다른 서버가 대신 작동하게 하는 기능으로 클러스터링을 이용하였다. 그러나 클러스터링을 구축하기 위해서는 공유 디스크와 같은 별도의 하드웨어가 필요했다. 또한 디스크 자체는 공유를 하므로 디스크가 깨지는 경우에는 좋은 해결책이 아니었다. 그리고 광케이블로 서로 연결해야 하므로 100마일이라는 거리의 제한도 있었다. SQL 서버 2005에서는 또 다른 해결책으로 미러링이라는 것을 지원한다. 미러링은 두 대의 SQL 서버를 운영하면서 서로 로그 정보를 주고받으면서 동일한 데이터를 유지한다.

따라서 별도의 공유 디스크가 필요 없으며, 디스크 자체가 깨지더라도 서로 디스크 복사본을 유지하기 때문에 문제가 안 된다. 또한 별도의 광케이블이 아닌 일반 네트워크 선을 사용하므로 거리 제한도 없다. 여기에 클러스터링은 서버에 문제가 생겨 교체되는데 있어 30초 이상의 시간이 걸리지만 미러링은 23초면 서버가 교체되어 자동으로 작동한다
.

그렇다고 미러링이 클러스터링의 대안은 될 수 없다. 서로 장단점이 있기 때문이다. 미러링은 시스템 데이터베이스에는 사용하지 못한다. 단지 사용자 DB만 사용할 수 있다. 따라서 클러스터링은 전체 시스템을 보호하는 용도로 사용하고 미러링은 중요한 사용자 데이터베이스를 보호하는 용도로 사용하는 것이 적당할 것이다.

미러링은 데이터 자체를 서로 전송하는 것이 아니라 로그만을 서로 전달한다. 애플리케이션으로부터 데이터 수정 작업이 들어오면 이를 먼저 로그에 기록한 다음 미러 서버에게도 그 로그 정보를 전달하여 미러 데이터베이스에도 동일 정보를 유지하도록 해준다. 이러한 동작은 감시 서버(witness server)가 계속 감시하고 있다가 만약 주 서버가 다운이 되면 바로 미러 서버를 주 서버로 바꾸어 동작하게 한다. 그동안 애플리케이션은 별도의 프로그램 수정 없이도 자동으로 미러 서버를 주 서버로 간주하여 접속을 유지한다.

 

 

3. Mirroring 준비절차

1. 서버구성

자동 Fail over 구현을 위한 서버 3

     주서버 : Windows Server 2003 (MSSQL Server 2005 Standard Edition SP2)

     미러서버 : Windows Server 2003 (MSSQL Server 2005 Standard Edition SP2)

     모니터링 서버 : Windows Server 2003 (MSSQL Server 2005 Express Edition SP2)
중요) 3대의 서버는 모두 동일한 MSSQL Service Pack 2가 설치되어 있어야 한다.

2. 도메인 컨트롤러 구성 (DNS서버 구축) : 별도의 매뉴얼 참조

3. Active Directory 구성 : 별도의 매뉴얼 참조

4. 도메인 조인 : 별도의 매뉴얼 참조

 

4. Mirroring 설정

주서버 : Principal

미러 서버 : Mirror

모니터링 서버 : Witness

 

1. 데이터베이스 백업 (대상 : 주서버)

     데이터베이스에서 마우스 오른쪽 버튼을 클릭하여 작업을 선택한다.

     작업내에 백업을 선택한다.

     대상의 Default 위치를 제거 후 추가버튼을 클릭한다.

  

사용자 삽입 이미지

     백업파일이 저장될 경로와 파일을 입력후 확인버튼을 클릭한다.

사용자 삽입 이미지

2. 데이터베이스 복원 (대상 : 미러 서버)

     데이터베이스에서 마우스 오른쪽 버튼을 클릭하여 데이터베이스 복원을 선택한다.

     데이터베이스명을 입력한다. (주서버와 동일한 데이터베이스 명을 입력한다.)

     복원에 사용할 원본에서 장치를 선택하여 주서버에서 백원한 파일을 선택한다.

사용자 삽입 이미지
 

     옵션을 선택후 복구상태의 "데이터베이스를 비작동 상태로 유지하고 커밋되지 않은 트랜잭션을 롤백하지 않습니다. 추가 트랜잭션 로그를 복원할 수 있습니다.(RESTORE WITH NORECOVERY)" 를 선택한다.

사용자 삽입 이미지
 

     데이터베이스가 복원되며 그림과 같은 "복원 중.." 상태를 유지하게 된다.

사용자 삽입 이미지
 

3. 미러링 설정 (대상 : 주서버)

     미러링 대상 데이터베이스에서 마우스 오른쪽 버튼을 클릭하여 작업에 미러를 선택한다.

     데이터베이스 속성 메뉴중 미러링의 보안 구성 버튼을 클릭한다

 

사용자 삽입 이미지

     미러링 구성 마법사를 이용하여 주서버 인스턴스

사용자 삽입 이미지
 

     미러링 구성 마법사를 이용하여 미러서버 인스턴스

사용자 삽입 이미지

     미러링 구성 마법사를 이용하여 모니터링서버 인스턴스

사용자 삽입 이미지
 

     미러링 구성 마법사를 이용하여 각 서버 인스턴스의 서비스 계정을 설정한다. [NT계정 : NT AUTHORITY\ANONYMOUS LOGON]을 사용한다.

사용자 삽입 이미지
 

     미러링 끝점이 생성이 성공되면 미러링 시작을 선택하면 완료된다.

     미러링 완료된 주서버 / 미러서버의 상태는 아래의 그림과 같다 (DB_FROG_V2_MIRROR)

사용자 삽입 이미지

<주서버>

사용자 삽입 이미지
 

<미러서버>

5. Mirroring Test

Mirroring 구성은 MSSQL 2005 Standard Edition에서 구성하였기 때문에 미러 서버의 데이터 Mirroring 여부를 확인하기 위해서는 데이터베이스 스냅샷(Enterprise Edition 가능)을 이용할 수 없다. 따라서 데이터 확인절차는 Mirroring 수동 장애 조치 기능을 이용하는 방식으로 테스트 하였다.

 

     주서버에서 특정 테이블에 데이터를 insert 시킨다.

 

사용자 삽입 이미지

 

     주서버의 Mirroring된 데이터베이스를 마우스 오른쪽 버튼으로 클릭후 작업에 미러를 선택후 장애 조치(Failover)를 클릭한다.

 

사용자 삽입 이미지

     주서버와 미러서버가 변경된 그림은 아래와 같다.

사용자 삽입 이미지
<미러 서버 : 기존 주서버>

사용자 삽입 이미지
<주서버 : 기존 미러서버>

     미러서버에서 주서버에서 INSERT한 데이터가 존재하는지 확인한다.

사용자 삽입 이미지

     데이터가 정상적으로 동기화 된 것을 확인할 수 있다.

이상으로 MSSQL 2005를 이용한 미러링 구성을 마치며, 미러링 설정을 하면서 발생한 End Point(끝점)의 TCP통신 인증방식에 대한 부분은 도메인조인을 이용했으나 부득이하게 도메인 조인(Active Directory)를 사용할 수 없는 경우에는 인증서를 발급하여 할 수 있는 방법도 있다고 한다. (Microsoft Technet참조)
또한 Auto Failover를 Java Application 및 php(sqlrelay)에서 설정하는 부분에 대해서는 지금부터 고민하여 추후 본 내용에 업데이트하거나 별도로 기재하도록 하겠다.

궁금한 사항이나 잘못된 사항이 있으면 본 문서 처음에 명시한 이메일 혹은 댓글을 남기면 답변하도록 하겠다

반응형