Inside Microsoft.com데이터베이스 미러링 시작하기

Saleem Hakani

데이터베이스가 오프라인이 되면 난처한 상황이 발생할 것입니다. 그러나 SP1이 설치된 SQL Server 2005의 데이터베이스 미러링 기능을 사용하면 재난을 미연에 방지할 수 있습니다. 이 새로운 고가용성 기술은 프로덕션 데이터베이스 서버를 사용할 수 없게 되었을 때 이를 대체하여 사용할 수 있도록 데이터베이스를 상시 대기 상태로 유지합니다.

데이터베이스 미러링 기능은 데이터베이스의 트랜잭션 로그 기록을 주 서버에서 보조 서버로 전송하는 방식으로 작동하며, 여기에서 보조 서버는 상시 대기 서버 역할을 합니다. 데이터베이스 미러링에서는 SQL Server™ 업데이트의 작동 방식과 마찬가지로 데이터 변경 내용을 트랜잭션 로그에 기록한 후 실제 데이터 페이지에 적용합니다. 로그 기록은 먼저 메모리에 있는 주 데이터베이스의 로그 버퍼에 저장된 다음 디스크에 영구적으로 저장됩니다. 그리고 트랜잭션 로그는 미러 서버의 데이터베이스에 복사 및 적용됩니다. 이렇게 하면 주 데이터베이스의 변경 내용이 미러 데이터베이스에 복제됩니다. 주 데이터베이스만 클라이언트 연결에 액세스할 수 있음을 유의하십시오. 클라이언트에서 요청한 변경 내용을 주 데이터베이스에서 수신하면 주 서버는 이 활성 변경 내용을 미러 서버에 보내게 됩니다. 이 과정에서 미러 서버는 변경 내용에 대해 어떠한 결정도 내리지 않습니다. 데이터베이스 미러링을 사용하고 있을 때 주 데이터베이스에 오류가 발생하면 미러링된 데이터베이스가 작동합니다.

데이터베이스 미러링의 메커니즘

데이터베이스 미러링은 SQL Server 2005를 지원하는 모든 표준 하드웨어에서 작동하며 데이터베이스 오류가 발생하더라도 데이터가 손실되지 않도록 합니다. 미러 데이터베이스는 주 데이터베이스 서버에서 처리되고 있는 현재 트랜잭션을 통해 항상 업데이트됩니다. 그림 1은 데이터의 흐름을 보여 줍니다.

주 서버가 다운되더라도 마지막 트랜잭션이 커밋된 시점과 정확히 일치하는 시점의 주 데이터베이스 사본이 미러 서버에 있으므로 안심할 수 있습니다. 따라서 미러 서버는 항상 주 서버 역할을 대신 수행할 수 있는 준비가 되어 있는 것입니다.

Figure 1 Data replication to the mirror

Figure 1** Data replication to the mirror **(더 크게 보려면 이미지를 클릭하십시오.)

데이터베이스 미러링 토폴로지에서 주 서버와 미러 서버 간의 자동 장애 조치를 사용하려면 미러링 모니터 서버라는 세 번째 서버가 필요합니다. SQL Server 2005를 지원하는 모든 컴퓨터는 미러링 모니터 서버가 될 수 있습니다.

운영 모드

사용하게 될 데이터베이스 미러링 토폴로지는 선택한 트랜잭션 안정성 및 운영 모드에 따라 달라집니다. 데이터베이스 미러링에서 지원되는 운영 모드에는 보호 우선 모드(자동 장애 조치 포함 또는 제외)와 성능 우선 모드가 있습니다.

자동 장애 조치가 있는 보호 우선 모드는 미러 데이터베이스로의 동기 데이터 전송 및 자동 장애 조치를 수행하여 데이터베이스 가용성을 최대로 유지하도록 지원합니다. 이 운영 모드는 주 서버와 미러 서버 간의 통신 상태가 빠르고 안정적이면서 단일 데이터베이스에 대한 자동 장애 조치가 필요한 경우에 적합합니다. 이 모드에서 주 데이터베이스는 미러 서버에서 트랜잭션의 로그를 디스크에 기록했음을 알리는 미러 서버의 메시지를 수신할 때까지 기다린 후 트랜잭션을 커밋합니다.

자동 장애 조치가 없는 보호 우선 모드는 자동 장애 조치를 사용하지 않고 미러 데이터베이스로의 동기 데이터 전송을 수행하여 데이터베이스 가용성을 최대로 유지하도록 지원합니다. 이 모드에서는 미러 서버 인스턴스를 사용할 수 없게 되어도 주 서버 인스턴스가 계속해서 작동하기는 하지만 데이터를 미러링하지는 못합니다. 주 서버가 다운되면 데이터베이스 미러링이 중지되지만 서비스를 수동으로 장애 조치할 수는 있습니다.

성능 우선 운영 모드에서는 데이터가 비동기적으로 전송됩니다. 위의 두 모드와는 달리 주 서버는 미러 서버의 승인을 기다리지 않습니다. 미러 서버는 최대한 주 서버와 동일한 상태를 유지하려고 시도하지만 특정 시점에서 주 서버의 최신 트랜잭션이 미러 서버의 트랜잭션 로그에 기록되어 있지 않을 수 있습니다. 주 서버가 다운되면 데이터베이스 미러링이 중지되지만 서비스를 수동으로 장애 조치할 수는 있습니다.

기반 구축

최선의 방법을 사용하여 강력한 기반을 마련하면 데이터베이스 미러링을 간편하게 설정할 수 있습니다.

서버 버전 주 서버와 미러 서버가 동일한 버전의 SQL Server 2005에서 실행되고 있는지 확인해야 합니다. Standard 또는 Enterprise Edition을 사용할 수 있습니다.

미러링 모니터 서버 가용성 자동 장애 조치가 있는 보호 우선 모드를 사용하려면 미러링 모니터 서버가 있어야 하고 SQL Server 2005(모든 버전 사용 가능)가 설치되어 있어야 합니다. 미러링 모니터 서버는 SQL Server 2005를 지원할 수 있는 모든 안정적인 컴퓨터 시스템에서 실행할 수 있습니다.

미러 이미지 미러 서버 인스턴스의 작업, 로그인, SQL Server Integration Service(SSIS) 패키지, 디스크 파티션, 파일 위치 및 서버 구성이 주 서버 인스턴스와 동일한지 확인합니다. 미러 서버를 주 서버와 완전히 동일하게 구성하면 미러 서버가 주 서버와 동일하게 작동합니다.

전체 복구 데이터베이스 미러링에 참여하는 모든 데이터베이스는 전체 복구 모델로 설정해야 합니다.

Master 및 TempDB 미러링 토폴로지에 속한 모든 서버 인스턴스에서 동일한 Master 및 TempDB 데이터 정렬 및 코드 페이지를 사용하는지 확인합니다. 다른 데이터 정렬 및 코드 페이지를 사용하게 되면 데이터베이스 미러링 설정 중에 문제가 발생할 수 있습니다.

백업 미러링할 데이터베이스의 용량이 큰 경우에는 먼저 데이터베이스를 전체 백업한 다음 NORECOVERY 옵션을 사용하여 미러 서버 인스턴스에서 복원해야 합니다.

사전 계획 서버 이름, 포트 번호, 보안 계정 및 데이터베이스의 위치를 모두 결정한 다음 문서로 작성합니다. 검사 목록은 "데이터베이스 미러링 모범 사례" 추가 기사를 참조하십시오.

기반이 마련되었으면 이제 환경에 데이터베이스 미러링을 설정할 차례입니다.

데이터베이스 미러링 모범 사례

  1. 동일한 CPU, 메모리, 스토리지 및 네트워크 용량을 가진 파트너 서버를 사용합니다.
  2. 파트너 서버에는 동일한 SQL Server 및 OS 버전, 서비스 팩 및 업데이트를 설치해야 합니다.
  3. 주 서버 인스턴스 및 미러 서버 인스턴스에서 동일한 디렉터리 및 드라이브 구조로 SQL Server를 설치합니다.
  4. 성능이 문제가 되는 경우에는 전용 네트워크 인터페이스 카드를 사용하여 부하를 분산시킬 수 있습니다.
  5. 서버 파트너와 마찬가지로 주 서버 인스턴스 및 미러 서버 인스턴스에도 동일한 CPU, 메모리, 스토리지 및 네트워크 용량을 사용해야 합니다. 두 서버의 디렉터리 구조, 디스크 분할 스키마 및 SQL Server 구성이 동일하면 미러 파트너로의 장애 조치를 수행하는 도중이나 이후에 이들 요소에 대한 변경 작업을 수행하지 않아도 됩니다.
  6. 모든 응용 프로그램에서 연결이 가능하고 모든 필요한 작업을 실행할 수 있는지 확인한 다음 주 서버 인스턴스의 모든 활성 SQL Server 로그인(및 사용 권한)이 미러 서버 인스턴스에도 있는지 확인합니다. 이 작업은 SQL Server 2005 Integration Services의 로그인 전송 작업을 통해 수행할 수 있습니다.
  7. SQL Server 에이전트 작업, 경고, SSIS 패키지, 지원 데이터베이스, 링크된 서버 정의, 백업 장치, 유지 관리 계획, 데이터베이스 메일 프로파일 등을 주 서버에서 미러 서버로 복사합니다.
  8. 주 서버에서 수정 작업(예: 하드웨어, 소프트웨어, SQL Server 설정 또는 데이터베이스 개체에 대한 변경)을 수행할 때마다 자동으로 반복 또는 복제하여 해당 변경 내용을 미러 서버 인스턴스에 전송하는 절차를 수립합니다.
  9. 실제로 사용하기 전에 장애 조치 테스트를 여러 차례 수행합니다.

설정

이제 자동 장애 조치가 있는 보호 우선 운영 모드를 사용하여 데이터베이스 미러링을 설정하는 방법을 알아보겠습니다. 앞에서 말한 대로 이 경우에는 미러링 모니터 서버 인스턴스가 필요합니다. 이 문서의 예에서는 그림 2와 같이 각 서버의 역할을 나타내는 서버 및 데이터베이스 이름을 사용합니다.

보류 중인 트랜잭션 로그를 주 서버에서 미러 서버로 복사하는 경우처럼 구성이 성능에 영향을 미칠 수 있으므로, 사용량이 적은 시간에 데이터베이스 미러링의 초기 구성을 수행하는 것이 좋습니다.

미러를 설정하는 단계에는 참여하는 서버에 끝점을 만들고, 주 데이터베이스의 백업 및 복원을 수행하고, 참여하는 모든 서버에서 미러링 세션을 활성화하는 세 단계가 있습니다.

데이터베이스 미러링 세션을 설정하기 전에 데이터베이스 미러링에 참여하는 모든 서버 간의 통신 메커니즘을 설정해야 합니다. 이 작업을 수행하려면 ServerA와 ServerB에서 다음 문을 실행하여 양 서버에 끝점을 만듭니다.

Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);

미러링 모니터 서버로 작동할 ServerC의 경우에는 (Role=Partner)를 (Role=Witness)로 변경한 후 문을 실행합니다. 이 서버는 각 인스턴스에서 수신하는 TCP 포트를 제어합니다.

다음 단계에서는 전체 데이터베이스 백업을 수행하고, 주 서버에 있는 DBM_Demo 데이터베이스의 로그를 백업한 다음 NORECOVERY 옵션을 사용하여 미러 서버 인스턴스에 백업을 복원합니다. NORECOVERY 옵션은 미러 데이터베이스를 복원 중인 상태로 유지하여 트랜잭션 로그를 적용할 수 있도록 합니다.

다음은 주 서버 인스턴스인 ServerA에 있는 DBM_Demo 데이터베이스의 전체 데이터베이스 백업을 수행하는 T-SQL 문입니다.

Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';

전체 데이터베이스 백업을 수행한 후 데이터베이스가 변경되면 데이터베이스의 로그를 백업해야 하며, 그렇지 않은 경우에는 백업하지 않아도 됩니다.

필요한 경우, 다음 T-SQL 문을 사용하여 ServerA에 있는 DBM_Demo 데이터베이스의 로그를 백업할 수 있습니다.

Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';

모든 백업 작업을 수행한 후에는 백업을 ServerB에 복원하기 위해 백업 파일을 ServerB 또는 공유 위치로 이동합니다. 이 작업을 완료한 후에는 ServerA에서 전체 데이터베이스 백업을 마지막으로 실행한 이후에 수행한 모든 트랜잭션 로그 백업도 복원해야 합니다.

NORECOVERY 옵션이 지정된 다음 T-SQL 문을 사용하여 ServerB에 전체 및 로그 백업을 복원할 수 있습니다.

--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;

마지막으로 NORECOVERY 옵션이 지정된 다음 T-SQL 문을 사용하여 미러 서버에 로그 백업을 복원합니다.

Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;

모든 백업을 복원한 후에는 참여하는 모든 서버에서 데이터베이스 미러링 세션을 활성화하는 마지막 단계를 수행합니다.

데이터베이스 미러링 세션을 설정하기 위해서는 각 서버 인스턴스에 대한 서버 네트워크 주소가 필요합니다. 이 주소에는 인스턴스를 식별하기 위해 시스템 주소와 인스턴스가 수신하는 포트 번호가 들어 있어야 합니다. 서버 네트워크 주소의 형식은 다음과 같습니다.

TCP://<System-address>:<port>

<System-address>는 정규화된 도메인 이름 또는 IP 주소이며, 로컬 시스템의 명령 프롬프트에서 IPCONFIG를 실행하여 이 정보를 확인할 수 있습니다.

<Port>는 끝점을 만들 때 설정됩니다.

다음과 같은 방법으로 ServerB에서 데이터베이스 미러링 세션을 시작할 수 있습니다.

Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';

이제 다음 T-SQL을 실행하여 ServerA에서 세션을 시작합니다.

Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';

다음과 같은 방법으로 ServerC(미러링 모니터 서버)에서 미러링 세션을 활성화합니다.

Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';

이제 데이터베이스 미러링을 실행할 수 있는 준비가 완료되었습니다. DBM_Demo 데이터베이스에서 수정되거나 새로 추가된 모든 데이터베이스 개체는 ServerB 사본에 전송됩니다. 그리고 ServerA의 데이터베이스를 사용할 수 없게 되면 장애 조치가 발생하면서 미러링된 데이터베이스의 역할이 주 역할로 변경됩니다.

이제 데이터베이스 미러링이 실행되고 있기 때문에 프로덕션 데이터베이스에 오류가 발생하더라도 언제라도 안심하고 작업할 수 있습니다.

Saleem Hakani는 14년 이상의 데이터베이스 시스템 경력을 지닌 Microsoft 수석 데이터베이스 엔지니어입니다. 그는 Microsoft SQL Community를 만들어 이끌고 있으며 Windows Live 조직을 통해 SQL Server 표준 및 자동화를 전달하는 책임을 맡고 있습니다. Saleem은 MCTS, MCDBA 및 MCSA 자격을 가지고 있습니다. 문의 사항이 있으면 Saleem@sqlcommunity.net으로 연락하시기 바랍니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..