mssql 에서 미러링 외에 복제 구성은 아직 해보지 않아서 먼저 여쭤보려고 합니다.
프로그래머 분도 유닉스 계열에서만 복제구성을 해보셨다고 해서 제가 진행을 해야 할거 같아요.
세대의 서버로 구성하는걸로 아는데요
질문1.이 세대의 서버가 각각 동기화 되는건가요?
질문2.동기화 되는 것이 실시간인가요? 아니면 갭이 있나요?
질문3.미러링 구성처럼 따로 모니터링 서버를 두고 자동장애조치를 할수 있을까요?
이 구성을 하려는 의도가 DB의 부하를 분산 시키기 위하여 프로그래밍을 할건데
필요하 구성이라고 합니다. DB 부하 분산에 대략적인 예나 조언좀 부탁드립니다.
Comment 6
-
항해자™
2014.04.14 10:52
-
SE왕초보
2014.04.14 10:55
sql 2008입니다. select 부하분산 방식을 구성중이라 세대의 db가 모두 똑같은 데이터베이스를 가지고 사용할수 있어야 하는 조건이 있어요 미러링은 active/standby 방식이라 그걸론 안되거든요.
-
catchv
2014.04.14 14:34
복제는 2대로 가능합니다. 테이블 단위로 복제를 걸기 때문에 미러링처럼 Active/standby가 아닌 publication/subscription으로 구성되어서 publication 하나에 여러개의 subscription이 붙을수 있습니다.
(물론 둘다 읽기 가능하며 방법에 따라서 양쪽 기록도 가능합니다.)
방법은 스냅샷,트랜잭션,머지,P2P(2012 추가됨) 이 있으며 일정시간 동기화 및 즉시 동기화 등을 구성 할 수 있습니다.
하지만 즉시 동기화도 정상적인 상태에서 대략 최대 1분정도 delay가 발생할수도 있습니다.
복제 운영은 미러처럼 간단하지는 않습니다. 운영해보시면 문제가 많이 발생합니다. 특히 거미줄처럼 복제구성되고 Trigger 까지 연결되면 복제가 깨질 경우 문제가 좀 복잡해 질 수 있으며 대량의 update 구문이 발생하는 테이블의 경우 네트워크등이 느릴 경우 트랜잭션을 바로 넘기지 못하는 경우도 발생합니다. 그리고 merge나 updatetable 을 사용할 경우 데이터 충돌이 발생하는 경우도 있습니다.
복제는 복제모니터링이라는 프로그램(?)이 따로 존재하여 현재 상태를 보여줍니다.
부하에대한 분산은 확실하겠지만 운영포인트가 상당히 늘어나는 것은 사실입니다.
최대한 많이 테스트하셔서 스냅샷 생성 및 트랜잭션의 처리등이 어떤식으로 일어나는지 확인하고 진행하시는 것이 좋을 것 같습니다.
-
SE왕초보
2014.04.14 17:20
정성스러운 답변 너무나도 감사드립니다. 혹시 질문 하나만 더 해도 될런지요.
위에 답변해주신 저러한 문제에도 DB 분산시스템을 구축하는 곳은 데이터 손실을 어떻게 방지 할까요?
캐쉬 서버를 앞단에 두면 괜찮을런지요? 프로그래머분이 포레스트 디비 쪽의 복제는 딜레이가 1초 미만이라고 하시던데
MSSQL 쪽 복제만 최대 1분의 갭이 생기는건지 궁금합니다.1분의 갭으로 데이터 손실이 발생할수 있다면 다시 구성을 생각해
봐야 하거든요. 그리고 소스 서버가 문제가 생겼을시 다른 서버로 변경가능한것이죠?
-
catchv
2014.04.14 18:54
MSSQL 은 Async replication 만 지원하는 것으로 알고 있습니다. 동기하는 딜레이는 설정 값이 있는 것으로 알고 있습니다.
(더 줄일수 있겠지만 테스트 해본 적이 없어서... 어차피 Async인데...)
데이터 손실은 확실히 막으실려면 Awayson 구성처럼 서버들을 sync 미러서버로 구성하시고 복제 하시면 될 것 같습니다.
( 이건 안해봐서.. Alwayson을 구성하시는 것이 맞을 것 같습니다. ^^; )
소스서버(발행서버)가 문제라면 distribution DB가 독립적이지 않다면 다시 복제를 구성하셔야 합니다.
-
맨즈밤
2014.04.14 15:50
질문자는 아니지만 좋은 답변글에 덩달아 배우고 갑니다. 제가 운영쪽은 무지한데, catchv 님의 답변을 보니 끄덕여지네요.
장애복구보다는 시스템 부하분산이 주 목적이고, 실시간으로 동기화가 될 필요가 없다면, 그냥 로그시핑으로 비동기적으로 맞추고, OLTP용 서버 , OLAP용서버 이렇게 구분주어서 ,OLAP용..그러니까 조회용 서버는 인덱스 좀 넉넉하게 주고 사용해도 될듯 합니다.
미러링이 몇대까지 되는지 모르겠네요,, 제 기억이 맞다면 1대만 되는거로 알구요,,,
sqlserver 2012 라면 AlwaysON으로 해결할 수 있습니다,,
동기화, 비동기화는 선택적으로 운영할 수 있습니다.