본문 바로가기

운영/고가용성

MS SQL AlwaysOn 구성(Standard Edition)

728x90

MS SQL에서 AlwaysOn으로 이중화 구성

AlwaysOn 구성 시 EE 버전과 다르게 SE에서는 기본 가용성 그룹만 제공을 합니다.

아래 URL을 보면, EE와 SE 버전에서 가용성 그룹에 대해서는 기능 제공이 다른 것을 확인할 수 있습니다.
https://docs.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017

 

SQL Server 2016의 버전 및 지원하는 기능 - SQL Server

SQL Server 2016의 버전 및 지원하는 기능Editions and supported features of SQL Server 2016 이 문서의 내용 --> 적용 대상: SQL Server(2016부터) Azure SQL Database Azure SQL Data Warehouse 병렬 데이터 웨어하우스APPLIES TO: SQL Server (starting with 2016) Azure SQL Database Azure SQL Data War

docs.microsoft.com

그래서 SE에서 EE와 유사한 가용성 그룹을 제공하고자 할 때 아래와 같이 구성합니다.

 

첫번째, 가용성 그룹에 여러 데이터베이스가 추가가 되지 않기 때문에 가용성 그룹과 데이터베이스를 1:1로 하여 여러개의 기본 가용성 그룹을 생성합니다.

 

두번째, 제공하는 서비스에서 가장 중요한 DB가 속한 가용성 그룹에 리스너를 만듭니다.

다른 가용성 그룹에 상관 없이 해당 리스너로 접속하는 서비스는 리스너가 설정된 가용성 그룹이 PRIMARY로 설정된 서버에 자동으로 접속하게 됩니다. 리스너가 없는 가용성 그룹은 리스너가 있는 가용성 그룹에 상관 없이 다른 서버에서 서비스가 제공 됩니다.

 

세번째, 나머지 가용성 그룹에 있는 데이터베이스도 리스너가 있는 가용성 그룹과 PRIMAY 서버를 일치 시키기 위해 예약 작업에 아래 스크립트를 이용하여 모니터링 하고 만일 리스너가 있는 가용성 그룹과 서비스가 다른 곳에서 서비스 하는 가용성 그룹들은 강제로 FailOver를 시킵니다.

DECLARE @VAR1 int
DECLARE @VAR2 int
SELECT @VAR1 = sys.fn_hadr_is_primary_replica ('서비스의 주가 되는 DB')
SELECT @VAR2 = sys.fn_hadr_is_primary_replica ('서비스의 주가 되는 DB에 의해 자동 전환될 DB')
IF(@VAR1=1)
BEGIN
 IF(@VAR2=0)
  ALTER AVAILABILITY GROUP [서비스의 주가되는 DB에 의해 자동 전활될 DB의 가용성그룹] FAILOVER
END

참고로, 위의 방식으로 임시 방편으로 서비스를 하고 있는데 트랜젝션이 수행되고 있는 상태에서 강제 Failover를 시켰을때 DB가 손상되지는 않을까 약간의 우려는 있습니다.

728x90