SQL Server 이야기

SQL Server 2005 데이터베이스 미러링 구성

늘푸르른나 2010. 4. 3. 23:40

. 점검사항

 

1. 본 문서는 자동 장애 조치(Automatic Failover) 있는 보호 우선(동기) 모드로 데이터베이스 미러링(Database Mirroring)을 구성하는 방법을 설명합니다. 자동 장애 조치가 가능하도록 데이터베이스 미러링을 구성하려면 주서버(Principal), 미러서버(Mirror), 모니터서버(Witness)를 위한 3대의 별도 머신이 준비되어야 하며 각각의 머신에는 SQL Server 2005 Service Pack 1 이상이 설치되어야 합니다.

 

2. 주서버, 미러서버, 모니터서버의 SQL 서버 서비스 계정은 각각 상대편 머신에 로그인이 가능해야 하며 끝점(Endpoint)에 대해서 CONNECT 권한을 가져야 합니다. 추가적인 설정작업을 피하려면 모든 서버의 SQL 서버 서비스 계정을 동일한 도메인 계정으로 설정하거나 동일한 로컬 윈도우즈 계정(예를들어, administrator)으로 설정하고 암호를 일치시켜주면 됩니다.

 

3. 미러링할 데이터베이스는 반드시 전체 복구 모델로 설정되어 있어야 합니다.

 

 

. 미러 데이터베이스 생성

 

1. 주서버(Principal)의 SQL Server Management Studio에서 미러링을 구성할 데이터베이스에 대해서 전체 백업을 수행하기 위해 작업-백업을 선택합니다. 

 

2. 아래와 같이 백업 유형을 전체로 지정하고 백업할 위치를 추가해 준 다음 백업 작업을 시작합니다. 

 

3. 전체 백업이 성공적으로 완료되면 다음의 메시지가 표시됩니다. 생성된 백업 파일은 복원 작업을 위해서 미러서버로 복사합니다.

 

4. 미러서버(Mirror)의 SQL Server Management Studio에서 데이터베이스 복원을 선택합니다.

 

5. 데이터베이스 이름은 주서버의 데이터베이스 이름과 동일하게 지정하고 복원될 백업 파일을 지정하기 위해 장치를 선택하고 우측의 버튼()을 클릭합니다.

 

6. 백업 미디어를 파일로 지정하고 추가 버튼을 클릭합니다.

 

7. 아래의 화면에서 주서버로부터 복사한 최신의 전체 백업 파일을 지정합니다. 

 

8. 백업 파일 지정이 성공적으로 완료되면 아래와 같은 상태가 됩니다.

 

9. 복원에 사용할 백업 세트 선택 항목에서 복원될 백업 세트를 선택합니다. 

 

10. 옵션 페이지를 선택한 다음 아래처럼 RESTORE WITH NORECOVERY를 선택하고 복원 작업을 시작합니다.

 

11. 복원이 성공적으로 완료되면 다음의 메시지가 표시되며 이로써 데이터베이스 미러링 구성을 위한 미러 데이터베이스 생성작업이 완료됩니다.

 

12. 복원 작업 완료후 미러 데이터베이스는 아래와 같이 항상 복원 중 상태이며 장애 조치(Failover)가 수행되어 주서버가 되기 전에는 사용될 수 없습니다(읽기 전용으로도 사용될 수 없습니다).

 

 

. 데이터베이스 미러링 구성

 

1. 주서버의 SQL Server Management Studio에서 미러링을 구성할 데이터베이스에 대해 작업-미러를 선택합니다(데이터베이스의 속성을 선택한 다음 미러링 페이지를 선택한 것과 동일합니다). 

 

2. 아래의 화면에서 보안 구성 버튼을 클릭합니다.

 

3. 데이터베이스 미러링 보안 구성 마법사가 시작됩니다. 

 

4. 자동 장애 조치(Automatic Failover)가 가능하도록 미러링 모니터 서버를 포함하도록 합니다. 

 

5. 주서버, 미러서버, 모니터서버에 모두 보안 구성이 저장되도록 선택되었는지 확인합니다. 

 

6. 주서버(Principal)에서 데이터베이스 미러링을 위한 통신에 사용할 TCP 포트 및 끝점(Endpoint)의 이름을 지정합니다. 

 

7. 미러서버(Mirror)를 지정하기 위해 연결 버튼을 클릭합니다. 

 

8. 미러서버의 이름을 지정하고 미러서버의 sa 계정 정보를 입력합니다(Windows 인증이 가능하다면 Windows 인증을 지정할 수도 있습니다). 여기서 지정한 계정은 미러서버에 보안 구성을 저장할 때 사용됩니다. 

 

9. 미러서버 지정이 완료되면 아래와 같이 미러 서버 인스턴스 항목에 미러서버가 표시됩니다. 미러서버에서 데이터베이스 미러링을 위한 통신에 사용할 TCP 포트 및 끝점(Endpoint)의 이름을 지정합니다. 주서버와 미러서버가 별도의 머신으로 분리되었을 경우에는 아래와 같이 주서버와 동일한 TCP 포트 및 끝점(Endpoint) 이름을 사용하셔도 무방합니다.

 

10. 모니터서버(Witness)를 지정하기 위해 연결 버튼을 클릭합니다. 

 

11. 모니터서버의 이름을 지정하고 모니터서버의 sa 계정 정보를 입력합니다(Windows 인증이 가능하다면 Windows 인증을 지정할 수도 있습니다). 여기서 지정한 계정은 모니터서버에 보안 구성을 저장할 때 사용됩니다. 

 

12. 모니터서버 지정이 완료되면 아래와 같이 미러링 모니터 서버 인스턴스 항목에 모니터서버가 표시됩니다. 모니터서버에서 데이터베이스 미러링을 위한 통신에 사용할 TCP 포트 및 끝점(Endpoint)의 이름을 지정합니다. 주서버 및 미러서버와 모니터서버가 별도의 머신으로 분리되었을 경우에는 아래와 같이 주서버 및 미러서버와 동일한 TCP 포트 및 끝점(Endpoint) 이름을 사용하셔도 무방합니다. 

 

13. 도메인 환경에서 주서버, 미러서버, 모니터서버를 운영하고 각각의 SQL 서버 서비스 계정이 서로 다른 경우 아래의 화면에서 각각의 SQL 서버 서비스 계정을 지정합니다. 각각의 서비스 계정이 상대방 SQL 서버에 로그인이 가능하고 끝점(Endpoint)에 대해서 CONNECT 권한을 갖도록 자동적으로 설정됩니다. 만약, 도메인 환경이면서 모든 SQL 서버 서비스 계정이 동일하거나 비도메인 환경이라면 그냥 비워두고 다음으로 진행합니다. 

 

14. 아래의 화면에서 최종적으로 설정 정보를 확인하고 이상이 없으면 마침을 클릭하여 보안 구성 작업을 시작합니다. 

 

15. 보안 구성 작업이 주서버, 미러서버, 모니터서버에서 각각 수행되며 아래의 화면은 진행상태를 보여줍니다. 

 

16. 아래의 그림처럼 보안 구성 작업이 성공적으로 완료되었으면 닫기를 선택합니다. 

 

17. 데이터베이스 미러링 보안 구성 마법사가 완료되면서 다음의 메시지가 표시되면 미러링 시작 버튼을 선택하여 데이터베이스 미러링을 시작합니다. 

 

18. 아래의 화면은 데이터베이스 미러링이 시작된 후의 미러링 페이지로 자동 장애 조치(Failover) 있는 보호 우선(동기)가 선택되어 있으며 미러링 시작 버튼이 비활성화되어 있음을 보여줍니다. 

 

19. 주서버(Principal)의 SQL Server Management Studio에서 다음과 같이 데이터베이스 이름 옆에 (주 서버, 동기화됨)이 표시되면 데이터베이스 미러링이 성공적으로 진행중인 것입니다. 

 

20. 미러서버(Mirror)의 SQL Server Management Studio에서는 정상적일 경우 다음과 같이 데이터베이스 이름 옆에 (미러 서버, 동기화됨 / 복원 중)이 표시됩니다. 

 

 

. 장애 조치(Failover)

 

1. 시스템 장애 또는 SQL 서버 서비스 장애 등으로 인해 주서버(Principal)의 데이터베이스를 사용하지 못하는 경우 모니터서버에 의해서 자동 장애 조치(Automatic Failover)가 수행됩니다. 아래의 그림은 모니터서버에 의해서 자동 장애 조치가 수행된 후 주서버로 전환된 미러서버의 상태를 보여줍니다. 

 

2. 관리자가 수동으로 장애 조치(Failover)를 수행하여 서버간의 역할을 전환할 수도  있습니다. 아래의 데이터 베이스 속성의 미러링 페이지에서 장애 조치(Failover) 버튼을 선택하면 강제로 서버간의 역할을 전환할 수 있습니다. 장애 조치(Failover) 작업은 현재 데이터베이스를 소유하고 있는 주서버(Principal)에서만 수행할 수 있습니다. 

 

장애 조치(Failover) 버튼을 선택하면 다음의 메시지가 표시되며 이에 대해 를 선택하면 됩니다.

 

 

. 클라이언트 연결

 

1. 데이터베이스 미러링 세션에 접속하려면 SQL Native Client(SQL Server 2005 설치CD를 통해 제공)나 .NET Data Provider for SQL Server(.NET Framework 2.0 이상을 통해 제공)를 사용해야 합니다. 기존의 MDAC에서 제공하는 OLE DB Provider나 ODBC를 사용하면 Connection String에 지정된 SQL서버에만 접속할 수 있을 뿐 장애 조치(Failover) 발생시 자동적으로 미러 데이터베이스로 접속이 전환되지 않습니다.

 

2. 클라이언트에서는 Connection String에 지정된 주서버(초기 파트너)의 이름을 통해 SQL서버에 접속을 시도하고 접속 성공시 장애 조치 파트너(Failover Partner)의 정보를 주서버로부터 전달받아 메모리에 Caching합니다. 초기 파트너에 접속이 불가능하게 되면 메모리에 Caching된 장애 조치 파트너 이름을 사용하여 접속을 시도하게 됩니다. 만약, 처음으로 접속하거나 Caching된 장애 조치 파트너 정보가 일정 시간이 경과하여 메모리로부터 소멸된 후에 클라이언트에서 접속을 시도하게 되고 주서버(초기 파트너)에 접속할 수 없을 경우에는 장애 조치 파트너로 전환하여 접속하지 못하는 문제가 발생할 수 있습니다. 이런 문제점을 예방하려면 다음과 같이 Connection String에 Failover Partner 정보를 명시적으로 지정할 수 있습니다. 

"Data Source=dm-principal;Failover Partner=dm-mirror;Initial Catalog=pubs;User ID=mirroruser; Password=******"

 

Connection String에 명시적으로 지정된 장애 조치 파트너(Failover Partner) 이름은 초기 접속시 메모리에 Caching되었다가 주서버(초기 파트너)에 접속 성공하게 되면 주서버로부터 전달받은 장애 조치 파트너 정보로 대체됩니다. 만약, 처음 접속 시도시 주서버에 접속이 실패한다면 명시적으로 지정된 장애 조치 파트너(Failover Partner) 이름을 사용하여 접속을 시도하게 됩니다.

 

3. 데이터베이스 미러링은 사용자 데이터베이스에 대해서만 가능하므로 주서버(Principal)에 존재하는 SQL서버 로그인 계정들은 미러서버(mirror)에 동일하게 생성해 주어야 장애 조치(Failover) 발생시 클라이언트에서 미러서버에 접속하여 미러링된 데이터베이스를 사용할 수 있습니다. 미러서버에 로그인 계정을 추가적으로 생성하게 되면 주서버에서 Backup받아 Restore한 미러 데이터베이스에 존재하는 데이터베이스 사용자 정보와 불일치하는 문제가 발생할 수 있으며 이를 분리된 사용자(Orphaned Users)라고 합니다. 분리된 사용자 문제는 시스템 저장 프로시저 sp_change_users_login을 통해 해결할 수 있으면 자세한 사용방법은 온라인 설명서의 데이터베이스 미러링 분리된 사용자 항목에서 참고하실 수 있습니다. 분리된 사용자 문제를 해결하려면 미러 데이터베이스에 접근할 수 있어야 하므로 강제로 장애 조치(Failover)를 수행하여 주서버와 미러서버의 역할을 일시적으로 바꾼 상태에서 작업을 수행해야 합니다.

 

4. 데이터베이스 미러링 구성을 완료한 다음 장애 조치(Failover)후 접속 테스트는 SQL Native Client를 사용하는 SQL Server Management Studio를 이용하여 다음 단계와 같이 간단하게 수행할 수 있습니다.

4-1. 미러링된 데이터베이스를 기본 데이터베이스로 사용하는 SQL 계정을 주서버 및 미러서버에 생성합니다.

4-2. 클라이언트의 SQL Server Management Studio에서 주서버(Principal) 이름과 해당 계정을 사용하여 데이터베이스 엔진 쿼리 세션에 접속합니다.

4-3. 임의의 쿼리문을 실행하여 정상적으로 실행되는지 확인합니다. 예를 들어, 다음의 쿼리문을 실행하여 현재 접속된 서버를 확인합니다.

select @@servername

4-4. 주서버(Principal)에서 강제로 장애 조치(Failover)를 수행합니다.

4-5. 클라이언트에서 다시 쿼리문을 수행하면 이전에 접속했던 세션이 무효화되면서 다음의 오류가 한차례 발생합니다.

메시지 10054, 수준 20, 상태 0, 줄 0

서버로 요청을 보내는 동안 전송 수준 오류가 발생했습니다. (provider: TCP 공급자, error: 0 - 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다.)

4-6. 상기의 오류 발생후 클라이언트에서 다시 쿼리문을 실행하면 자동적으로 장애 조치(Failover)된 서버에 접속하여 쿼리문이 실행됨을 확인할 수 있습니다.