MS SQL Server 고가용성(HA)이란?
고가용성(High Availability, HA)은 애플리케이션이나 데이터베이스가 계획된 유지보수든 예기치 않은 장애든 어떠한 상황에서도 24시간 연중무휴 접근할 수 있도록 보장하는 솔루션, 프로세스, 기술을 의미합니다.
기본적으로 MS SQL Server에서 데이터베이스 가용성을 구성하는 방법은 다음 5가지가 있습니다.
- 복제(Replication)
- 로그 전달(Log Shipping)
- 미러링(Mirroring)
- 클러스터링(Clustering)
- AlwaysON 가용성 그룹(AlwaysON Availability Groups)
1. 복제(Replication)
복제는 개체(Object) 수준의 기술로, 복제 작업(에이전트/작업)을 통해 원본 데이터를 대상 서버로 복사합니다. 이해해야 할 주요 용어는 다음과 같습니다.
- 게시자(Publisher): 원본 서버
- 배포자(Distributor): 선택 사항이며, 복제된 데이터를 구독자에게 전달하기 위해 저장하는 역할을 합니다.
- 구독자(Subscriber): 대상 서버
2. 로그 전달(Log Shipping)
로그 전달은 데이터베이스 수준의 기술로, 트랜잭션 로그 백업 작업을 통해 원본 데이터를 대상 서버로 복사합니다. 주요 용어는 다음과 같습니다.
- 주 서버(Primary Server): 원본 서버
- 보조 서버(Secondary Server): 대상 서버
- 모니터링 서버(Monitor Server): 선택 사항이며, 로그 전달 상태를 모니터링합니다.
3. 미러링(Mirroring)
미러링은 데이터베이스 수준의 기술로, 엔드포인트와 포트 번호 연결을 통해 네트워크 트랜잭션 방식으로 주 데이터를 보조 서버로 복사합니다. 주요 용어는 다음과 같습니다.
- 주 서버(Principal Server): 원본 서버
- 미러 서버(Mirror Server): 대상 서버
- 감시 서버(Witness Server): 선택 사항이며, 자동 장애 조치(Failover) 솔루션에 사용됩니다.
4. 클러스터링(Clustering)
클러스터링은 인스턴스 수준의 기술로, 데이터를 공유 스토리지에 저장하여 주 서버와 보조 서버가 함께 사용합니다. 이 방식을 사용하려면 공유 스토리지에 Windows 클러스터링을 먼저 설정해야 합니다. 주요 용어는 다음과 같습니다.
- 활성 노드(Active Node): SQL 서비스가 실행 중인 노드
- 수동 노드(Passive Node): SQL 서비스가 실행되지 않는 노드
5. AlwaysON 가용성 그룹(AlwaysON Availability Groups)
AlwaysON 가용성 그룹은 데이터베이스 그룹 수준의 기술로, 트랜잭션을 통해 주 데이터를 보조 서버로 전송합니다. Windows 클러스터링 설정이 필요하지만 공유 스토리지는 필요하지 않습니다. 주요 용어는 다음과 같습니다.
- 주 복제본(Primary Replica): 원본 서버
- 보조 복제본(Secondary Replica): 대상 서버
미러링 및 로그 전달 HA 구성 단계
다음은 클러스터링, AlwaysON 가용성 그룹, 복제를 제외한 미러링(Mirroring)과 로그 전달(Log Shipping)의 HA 구성 단계입니다.
1단계: 원본 데이터베이스의 전체 백업 및 트랜잭션 로그 백업 수행
예를 들어, TESTINSTANCE를 주 SQL Server로, DEVINSTANCE를 보조 서버로 하여 TestDB 데이터베이스에 미러링/로그 전달을 구성하려면 원본 서버(TESTINSTANCE)에서 다음 쿼리로 전체 백업과 트랜잭션 로그 백업을 수행합니다.
TESTINSTANCE에 연결한 후 새 쿼리를 열고 아래 코드를 작성하여 실행합니다.
Backup database TestDB to disk = 'D:testdb_full.bak'
GO
Backup log TestDB to disk = 'D:testdb_log.trn'
백업 쿼리 실행 화면
2단계: 백업 파일을 대상 서버로 복사
이 예제에서는 하나의 물리적 서버에 SQL Server 인스턴스가 두 개 있으므로 파일을 복사할 필요가 없습니다. 하지만 두 개의 SQL Server 인스턴스가 서로 다른 물리적 서버에 설치되어 있다면, 다음 두 파일을 DEVINSTANCE가 설치된 보조 서버의 지정된 위치로 복사해야 합니다.

대상 서버로 백업 파일 복사
3단계: NORECOVERY 옵션으로 데이터베이스 복원
대상 서버에서 백업 파일을 사용해 데이터베이스를 복원할 때는 NORECOVERY 옵션을 선택해야 합니다.
DEVINSTANCE에 연결한 후 새 쿼리를 열고, 원본 데이터베이스와 동일한 이름인 TestDB로 데이터베이스를 복원하는 다음 코드를 작성합니다. 로그 전달 구성 시에는 다른 이름을 사용할 수도 있습니다. 복원 시에는 NORECOVERY 옵션을 사용합니다.
Restore database TestDB from disk = 'D:TestDB_full.bak'
with move 'TestDB' to 'D:DATATestDB_DR.mdf',
move 'TestDB_log' to 'D:DATATestDB_log_DR.ldf',
norecovery
GO
Restore database TestDB from disk = 'D:TestDB_log.trn' with norecovery
백업 파일을 이용한 데이터베이스 복원
DEVINSTANCE 서버에서 데이터베이스 폴더를 새로 고치면 아래 그림과 같이 복원 상태의 TestDB 데이터베이스가 표시되는 것을 확인할 수 있습니다.

데이터베이스 복원 상태 확인
4단계: HA(로그 전달/미러링) 구성
아래와 같이 HA(로그 전달/미러링)를 구성합니다.
예를 들어, 주 서버인 TESTINSTANCE의 TestDB 데이터베이스를 마우스 오른쪽 버튼으로 클릭한 후 속성(Properties)을 선택합니다. 그러면 아래와 같은 화면이 나타납니다.

로그 전달/미러링 구성 화면
5단계: 미러링 또는 트랜잭션 로그 전달 선택 및 구성 완료
필요에 따라 미러링(Mirroring) 또는 트랜잭션 로그 전달(Transaction Log Shipping) 페이지를 선택한 후, 마법사가 제공하는 단계를 따라 구성을 완료합니다.