본 게시물은 개인적인 의견으로 작성되었으니 절대적인 정보가 아닐 수 있습니다. 참고만 하시고 궁금한 사항이 있으시면 연락주세요.

티스토리 뷰

   

SQL Server 2014 이하에서는 Read-Only Routing(읽기 전용 라우팅) 을 지원하고 있으며, 이 기능은 첫번째 설정한 보조복제본으로만 접근이 계속되는 문제가 있었다.

첫번째 설정한 보조복제본에 장애가 발생할 경우에만 두번째 설정한 보조복제본으로 접근이 가능하다.

   

이 기능을 개선한 SQL Server 2016에서는 Load Balanced Read-Only Routing으로 개선하였다.

   

일단, 해보자. (나의 이상이다)

   

#. SQL Server 2016 Load Balanced Read-Only Routing(로드밸런싱 읽기전용 라우팅 ??) 설정하기

[환경설정]

2개의 가용성데이터베이스를 추가하여 그룹을 생성한다.

   

   

   

리스너를 생성해야 된다.

   

리스터 접속테스트

   

쿼리로만 구성이 가능하다.

USE MASTER

GO

-- 보조 복제본 Read-Only 설정

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S1\AG1' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))

GO

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S2\AG2' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))

GO

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S3\AG3' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))

GO

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S4\AG4' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = READ_ONLY))

GO

   

-- 라우팅 URL 생성

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL] MODIFY REPLICA ON N'AG2016-S1\AG1'

WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://AG2016-S1.overtop.local:1433'));

GO

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL] MODIFY REPLICA ON N'AG2016-S2\AG2'

WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://AG2016-S2.overtop.local:1433'));

GO

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL] MODIFY REPLICA ON N'AG2016-S3\AG3'

WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://AG2016-S3.overtop.local:1433'));

GO

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL] MODIFY REPLICA ON N'AG2016-S4\AG4'

WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://AG2016-S4.overtop.local:1433'));

GO

   

   

   

-- 라우팅 구성

-- 보조 복제본 2,3,4를 모두 LB 구성, 3개 모두 복제복이 비정상일겨웅에는 1번으로 연결한다는 정의

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S1\AG1'

WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('AG2016-S4\AG4','AG2016-S3\AG3', 'AG2016-S2\AG2'), 'AG2016-S1\AG1')));

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S2\AG2'

WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('AG2016-S4\AG4','AG2016-S3\AG3', 'AG2016-S1\AG1'), 'AG2016-S2\AG2')));

   

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S3\AG3'

WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('AG2016-S4\AG4','AG2016-S2\AG2', 'AG2016-S1\AG1'), 'AG2016-S3\AG3')));

   

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S4\AG4'

WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('AG2016-S3\AG3','AG2016-S2\AG2', 'AG2016-S1\AG1'), 'AG2016-S4\AG4')));

   

-- 구성완료.

   

-- 라우팅 제거할때는 아래와 같이 해주면 끝.

ALTER AVAILABILITY GROUP [AG-GroupNameTSQL]

MODIFY REPLICA ON N'AG2016-S4\AG4'

WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=NONE));

   

   

   

   

   

#. 로드밸런싱 라우팅 테스트

sqlcmd -S AGLBLsn.overtop.local,1433 -E -K ReadOnly -d AGDefault01 -Q "select @@servername"

   

AG3 보조복제본의 SQL 중지를 하고 테스트를 해보자. 2번과 4번으로 로드밸런싱이 되는 것을 확인 할 수 있다.

   

구성이 잘 된다.

   

그럼 기존의 방식으로도 가능할까?

테스트 결과 기존방식으로도 구성이 가능하다.

   

다음 포스팅은 다양한 LB 구성정책을 예정이다.

   

.

     

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday