
일일이 백업을 배치로 걸어놓느냐 아니면 클러스터를 하느냐 여러가지 DB 이중화에 대한 고민을 하게 됩니다. 그래서 MSSQL2005 이상부터는 DB 미러링이라는 기능이 있습니다. 정말 정말 좋은 기능중의 하나라고 장담합니다. 필자가 클러스터보다 더 매력을 느끼는 기능이 바로 미러링 기능입니다.


<%
connstr = "Provider=SQLNCLI10.1;Password=db_pass;Persist Security Info=True;User ID=dbuser_id;Initial Catalog=DB name;Data Source=ip address A;Failover Partner=ip address B"
set dbo = server.CreateObject("ADODB.Connection")
dbo.open(connstr)
set rs = dbo.Execute("select top 200 * FROM [DB].[table_id].[xxx]")
do while Not rs.Eof
Response.Write(rs(0) & "<BR>")
Response.Write(rs(0).Name & "<BR>")
rs.MoveNext
loop
%>
위 커넥트를 참조하여 셀렉트 쿼리문을 날리고 출력이 되면 바로 DB에 연결이 되는거죠. 필자는 주 서버를 바로 죽여서 스탠바이 서버가 주서버로 변경되고 난후 다시 사이트 접속을 해봤습니다. IP접속 활성화 상태가 바로 Partner B서버로 넘어가는게 보였습니다. 클러스터보다 더 빨리 쉽게 넘어간걸 보고 너무 놀라웠습니다만 다시 원래 주서버로 원복을 시켰을때는 DB서버에 연결이 되지 않았습니다. 즉 웹서비스라면 재시작을 해줘야만 연결이 가능했죠. 한번 Failover는 가능했지만 두번 다시 Failover 는 되지 않았습니다. 어플리케이션 단에서 DB 접속 Retry 옵션이 있어야만 가능하다는 말을 들었지만 클러스터처럼 VIP를 바라보는게 아니기 때문에 이부분에 대해서는 많은 연구와 테스트가 필요하다는 결론을 내려봅니다. 위그림처럼 DB미러링은 데이터의 완전성을 위한것이지 서비스의 완전성을 위한건 아니라는 결론입니다. 장애 대책을 임시나마 이용하면 더더욱 좋은 기능이지만 이걸 주목적으로 사용하다간 위험하다는거죠.
대부분의 데이타베이스 관리나 운영자들이 미러링 기능을 사용하지 않는거 같습니다. 전략적으로 좋은 기능인거 같다는 생각을 해봅니다만 비용상 효율적인 DB관리 솔루션은 미러링이 짱이다?라는 글을 남겨봅니다.