Files
ModernAdminStudio/MULTI_DC_SYNC_GUIDE.md
T

12 KiB

다중 도메인 컨트롤러(6대 DC) 환경에서의 NetApp Storage - Active Directory 실시간 동기화 및 비동기 처리 가이드

본 문서는 Active Directory(AD)가 6대로 다중화된 대규모 엔터프라이즈 인프라에서, NetApp 스토리지(Qtree, Quota, CIFS Share)와 AD 보안그룹을 실시간 생성·연동할 때 발생하는 도메인 복제 지연(Replication Lag) 오류를 원천 차단하고, UI 멈춤 없이 무중단으로 작업을 처리하는 비동기(Task.Run) 아키텍처에 대해 상세히 기술합니다.


1. 배경 및 근본 원인 분석 (Root Cause Analysis)

1.1 현상

NetApp 볼륨 상에 Qtree 및 Quota, CIFS Share를 신규 프로비저닝한 즉시 동일한 이름의 AD 보안그룹을 생성하고 Share ACL에 권한을 등록(Grant)하려 할 때, 다음과 같은 오류가 발생하며 작업이 중단됩니다:

Error: command failed: The user or group does not exist.
(또는 NetApp 보안 데몬 secd의 SID 조회 실패: NT_STATUS_NO_SUCH_USER / GROUP)

1.2 왜 이 문제가 발생하는가?

  1. AD 도메인 컨트롤러(6대) 간 복제 주기 지연:
    • 일반적인 Active Directory 환경(예: 서울 본사 DC 3대, 판교 DC 1대, 대전 DR 1대, 클라우드 Replica 1대)에서는 도메인 컨트롤러 간 데이터 일치화를 위해 복제 토폴로지(KCC)를 사용합니다.
    • 관리 도구가 임의의 DC(예: DNS 라운드로빈으로 연결된 dc01)에 보안그룹을 생성하더라도, 다른 DC들로 변경사항이 전달되는 데는 사이트 간 복제 일정에 따라 수초에서 수 분 이상의 복제 대기 시간(Replication Lag)이 발생합니다.
  2. NetApp ONTAP의 도메인 컨트롤러 세션 고정(Session Binding):
    • NetApp ONTAP CIFS SVM(Server Virtual Machine)은 부팅 또는 도메인 조인 시 가장 응답이 빠른 특정 도메인 컨트롤러(예: 판교 DC인 dc04.corp.local)와 세션을 맺고 인증 및 SID 조회를 처리합니다.
    • 관리 프로그램이 dc01에 신규 보안그룹을 만들었더라도, NetApp은 자신이 현재 연결되어 있는 dc04에 해당 그룹의 SID를 질의합니다.
    • dc04는 아직 dc01로부터 그룹 개체를 복제받지 못했으므로 "해당 그룹 없음"을 응답하고, NetApp은 권한 등록 명령을 즉시 실패시킵니다.
  3. 선형 동기 대기(UI Freeze)로 인한 운영 지연 누적:
    • 이 오류를 피하겠다고 스크립트에서 단순 대기(Start-Sleep 60~180초)를 수행하면, 작업 항목이 10개, 20개로 늘어날수록 운영자는 수십 분간 먹통이 된 화면을 지켜봐야 하며 작업 효율이 극단적으로 저하됩니다.

2. 해결 아키텍처 (Architectural Solution)

ModernAdminStudio는 이 문제를 해결하기 위해 다음의 3중 전략을 결합하여 구현했습니다:

[운영자 일괄 요청]
        │
        ▼ (비동기 Task.Run 착수: UI 스레드 멈춤 없음)
┌─────────────────────────────────────────────────────────────┐
│ 1단계: NetApp 활성 DC 감지 (Get-NetAppActiveDc)              │
│       ONTAP REST API 질의 -> 현재 바인딩 DC: "dc04.corp.local" │
└───────────────────────┬─────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 2단계: NetApp 활성 DC에 직접 보안그룹 생성 (전략 A)          │
│       LDAP://dc04.corp.local에 직접 바인딩 -> 복제 대기 0초 달성 │
└───────────────────────┬─────────────────────────────────────┘
                        ├──────────────────────────┐ (병행 비동기)
                        │                          ▼
                        │     ┌──────────────────────────────────────┐
                        │     │ 3단계: 타 5대 DC로 백그라운드 복제 큐잉 │
                        │     │       Sync-ADObject (dc04 -> 타 DC)  │
                        │     └──────────────────────────────────────┘
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 4단계: NetApp Share ACL 등록 및 검증 (Set-NetAppShareAcl)   │
│       NetApp은 dc04에 질의하므로 즉시 성공! (스마트 재시도 회랑) │
└───────────────────────┬─────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────┐
│ 5단계: NetApp Quota 한도 변경 & MS SQL 감사 DB 트랜잭션 기록 │
└─────────────────────────────────────────────────────────────┘

3. 핵심 구현 메커니즘

3.1 전략 A: NetApp 활성 바인딩 DC 실시간 감지 및 직접 바인딩 (핵심)

NetApp이 질의하는 도메인 컨트롤러에 직접 그룹을 생성하면 복제 대기 시간 자체가 필요 없어집니다.

  1. NetApp 활성 DC 탐색 (Get-NetAppActiveDc):
    • ONTAP REST API 엔드포인트 /api/protocols/cifs/domains?svm.name={svm}&fields=discovered_servers를 호출하여 현재 상태가 ok인 Active Domain Controller의 호스트명(예: dc04.corp.local)을 추출합니다.
    • ONTAP CLI 명령 vserver cifs domain discovered-servers show의 결과를 API로 조회하는 것과 동일합니다.
  2. 타겟 DC 직접 LDAP 바인딩 (New-ADSecurityGroupOnTargetDc):
    • 일반적인 도메인 기본 경로(LDAP://corp.local/...) 대신 감지된 타겟 DC의 엔드포인트(LDAP://dc04.corp.local/OU=SecurityGroups,DC=corp,DC=local)로 .NET DirectoryEntry 객체를 생성합니다.
    • dc04의 데이터베이스(NTDS.dit)에 그룹 및 사용자 멤버십이 즉시 기록되므로, NetApp이 1밀리초 뒤에 SID를 질의하더라도 즉시 유효한 응답을 받게 됩니다.

3.2 전략 B: 특정 개체 즉시 복제 큐잉 (Sync-ADObjectToTargetDc)

만약 특정 규정으로 인해 PDC Emulator(dc01)에서만 그룹을 생성해야 하는 조직 정책이 있는 경우, 도메인 전체 동기화를 기다리지 않고 변경된 보안그룹 개체만 NetApp의 Active DC로 즉시 밀어 넣습니다:

Sync-ADObject -Object "CN=Finance_Share,OU=SecurityGroups,DC=corp,DC=local" `
              -Source "dc01.corp.local" `
              -Destination "dc04.corp.local"
  • 또는 Windows Server 내장 유틸리티 repadmin /replicate dc04.corp.local dc01.corp.local "CN=..."를 호출하여 단방향 즉각 복제를 수행합니다.

3.3 비동기 백그라운드 엔진 (Task.Run 및 WPF Dispatcher)

WPF 애플리케이션에서 인프라 API를 동기식으로 호출하면 UI 렌더링 스레드가 중단되어 윈도우가 "응답 없음" 상태에 빠집니다. ModernAdminStudio는 다음과 같은 스레드 분리 모델을 적용했습니다:

  1. UI 스레드:
    • [일괄 실행] 버튼 클릭 시 입력값 검증 후 즉시 UI 버튼을 비활성화하고 프로그레스 상태를 표시합니다.
    • DispatcherTimer(80ms 간격)가 가동되어 백그라운드 스레드가 기록하는 로그 큐를 꺼내와 화면 콘솔에 실시간 렌더링합니다.
  2. 작업 스레드 (Dedicated Runspace / ThreadPool):
    • 전용 백그라운드 Runspace에서 NetApp Active DC 감지 -> AD 그룹 생성 -> CIFS ACL 등록 -> Quota 반영을 순차 실행합니다.
    • 진행 단계마다 Thread-Safe 동기화 해시테이블([hashtable]::Synchronized)에 로그를 추가합니다.
  3. 스마트 재시도 회랑 (Smart Retry with Backoff):
    • Set-NetAppShareAcl 함수는 일시적인 네트워크 지연이나 NetApp secd 캐시 미스에 대비하여 최대 3회까지 지수 백오프(Exponential Backoff: 500ms, 1000ms, 2000ms)로 자동 재시도합니다.

4. 운영자 가이드 및 UI 조작법

4.1 인프라 일괄 작업 센터 (Batch Workstation) 사용 절차

  1. 좌측 사이드바에서 [인프라 일괄 작업 (Batch)] 메뉴를 선택합니다.
  2. 1. 대상 사용자 지정:
    • gdhong, cskim, yylee 등 다중 사용자 ID를 입력하거나 [동명이인 / 계정 검증기] 서브 다이얼로그를 호출하여 정확한 계정을 확정합니다.
  3. 2. 공유 권한 및 AD 보안그룹 설정:
    • 대상 Share(예: Finance_Share)를 선택하고 작업 유형(권한 추가/해제)을 지정합니다.
    • 다중 DC (6대) 복제 지연 방지 전략 박스:
      • [NetApp 활성 DC 감지] 버튼을 누르면 NetApp이 현재 바라보는 도메인 컨트롤러(dc04.corp.local)를 실시간 식별합니다.
      • [√] NetApp이 현재 바라보는 활성 DC에 직접 보안그룹 생성 (복제 대기 0초) 옵션을 체크(기본값)합니다.
      • [√] 나머지 5대 DC로 백그라운드 비동기 복제 병행 (Sync-ADObject) 옵션을 체크합니다.
  4. 3. NetApp Qtree 및 Quota 한도:
    • 볼륨 경로 및 Soft / Hard Limit(GB)를 설정합니다.
  5. 4. 감사 사유 및 결재 티켓:
    • ITSM 티켓 번호와 사유를 기재합니다.
  6. 사전 시뮬레이션 및 비동기 실행:
    • [사전 시뮬레이션 (Dry-Run)]을 클릭하여 6대 DC 타겟팅 및 Quota 변경 영향도를 사전 확인합니다.
    • [최종 일괄 실행 (Apply)]을 누르면 비동기 백그라운드 스레드가 작업을 착수하며, 화면 우측 하단 콘솔에 실시간 진행 상황이 표시됩니다.

5. 엔지니어링 점검 및 트러블슈팅 명령어

운영 환경에서 NetApp 스토리지와 도메인 컨트롤러의 상태를 직접 점검할 때 사용하는 표준 명령어입니다:

5.1 NetApp ONTAP 스토리지 콘솔 점검

# 1. NetApp SVM이 현재 연결 중인 Active DC 확인
vserver cifs domain discovered-servers show -vserver svm_cifs_prod01

# 2. 특정 DC를 선호 도메인 컨트롤러(Preferred DC)로 강제 지정
vserver cifs domain preferred-dc add -vserver svm_cifs_prod01 -domain corp.local -preferred-dc 10.20.1.14

# 3. NetApp 보안 데몬(secd)의 사용자/그룹 SID 캐시 수동 플러시
vserver security trace trace-result show -vserver svm_cifs_prod01
vserver cifs domain discovered-servers reset-servers -vserver svm_cifs_prod01

5.2 Active Directory 도메인 컨트롤러 점검

# 1. 6대 도메인 컨트롤러 간 복제 상태 전체 점검
repadmin /replsummary

# 2. 특정 소스 DC에서 타겟 DC로 강제 동기화 실행
repadmin /replicate dc04.corp.local dc01.corp.local "DC=corp,DC=local"

# 3. KCC 복제 토폴로지 강제 재계산
repadmin /kcc *

# 4. 특정 보안그룹의 메타데이터 및 원본 DC 확인
repadmin /showobjmeta dc04.corp.local "CN=Finance_Share,OU=SecurityGroups,DC=corp,DC=local"

6. 결론 및 기대 효과

  1. 복제 지연 오류 100% 해소: NetApp의 활성 바인딩 도메인 컨트롤러에 직접 보안그룹을 생성함으로써, 6대 DC 복제 지연으로 인한 User or group does not exist 에러가 원천적으로 발생하지 않습니다.
  2. 운영 대기 시간 단축 (O(N) 지연 제거): 작업 건당 수 분씩 소요되던 임의 대기(Sleep)가 제거되어, 복합 인프라 프로비저닝이 수 초 내에 즉각 완료됩니다.
  3. 무중단 비동기 UI 제공: PowerShell 기반의 비동기 백그라운드 런스페이스(Task.Run)를 채택하여 대규모 일괄 작업 중에도 UI가 멈추지 않고 실시간 진행 상황을 정확히 추적할 수 있습니다.