티스토리 뷰

Working

Replmon 완전 정복

OLDMAN 2014. 7. 8. 15:00

네드(Ned)입니다. AD 복제 모니터 유틸리티(Replmon.exe)은 특정한 DC 관리자 작업을 수행하기 위한 GUI 메커니즘으로 수년전 소개된 Windows Server 2000 지원 도구입니다. Window Server 2008에서 Replmon은 포함되지 않았고 추가적인 지원도구를 만드는 것을 중단했습니다. 몇주전에 누가 저에게 물었습니다. “Windows Server 2008의 Replmon을 어디서 다운받을 수 있나요?” 없습니다. 그게 다입니다. 더 이상 만들지 않아요. 끝났어요. 구식이 되었거든요. 만약 원한다면, 오래된 Windows Server 2003 버전에서 실행해야 합니다. 오늘은 대체된 도구인, Repadmin.exe로 옮겨가는 것에 대해 이야기할까 합니다.

배경

Replmon은 AD 사이트 및 서비스 스냅인(dssites.msc)보다 더 유용한 필요에 의해 발전했습니다. DS 사이트는 토폴로지의 기본적인 뷰만을 제공하고, 토폴로지에서 에러를 보거나 복제를 강제하는 매우 제한된 옵션만이 있었죠.

반면에, Replmon는 더 많은 정보를 제공했고 AD 파티셔닝 구조에 대해 더 깊은 뷰를 가지고 있었습니다. 그건 Windows 제품 그룹에 의해 설계되었기보다는 기술지원부서의 엔지니어에 의해 설계되었죠. 모든 지원 도구들처럼, 영원히 지원되지 않고 “현재”만을 지원합니다.

Replmon는 운영자가 복제를 빠르게 할 수 있도록 하고, 기본적인 상태에 대한 리포트를 얻을 수 있고, 환경구성에 대한 정보를 볼 수도 있습니다.

Replmon는 명령줄 인터페이스보다는 그래픽적인 형태로 만들어졌습니다. Active Directory가 10년전에 발표되었을때, 대부분의 도구는 명령줄 버전보다 GUI에 더 주목했죠. 고객들은 NT를 뛰어넘은 AD의 급격한 변화에 압도당했고 GUI는 Active Directory와 같은 복잡하고 잘 이해되지 않는 제품을 위한 매우 유용한 기능이었죠.

그때는 그랬습니다.

현재는 AD가 Windows로서 수많은 고객 환경에 널리 펴저 있습니다. Windows 운영자는 명령줄을 더욱 편하게 느낍니다. 그것은 맞습니다. 왜냐하면 repadmin.exe 은 현재 Replmon보다 같거나 더욱 뛰어나기 때문이죠. 저를 믿지 못하시겠다고요? 한번 비교해보시죠.

Repadmin Syncall로 옮겨가기

Replmon의 가장 일반적인 명령은 변경된 DC로부터 밖으로 나가는 AD 복제를 “밀어내고(push)” 모든 파트너에게 빠르게 전달하는 것입니다. “밀어내기(push)”를 강조한 이유는 AD 복제는 항상 당겨오기(pull)기반이기 때문에, 밀어내기(push) 같은 것은 없기 때문입니다. Replmon이 실제로 하는 일은 파트너 DC에 접속하고 그 머신에 즉시 복제를 가져오라고 지시하는 것입니다. 이것은 다음과 같이 합니다.

1. Replmon을 시작합니다.

2. DC(또는 찾고자하는 DC)를 입력합니다.

3. DC에서 마우스 오른쪽 버튼을 누르고 복제를 강제시키기 위해 Synchronize를 선택합니다.

4. 당겨오기(pull) 또는 밀어내기(push), cross AD sites(또는 아님), transitivity(또는 아님)을 선택합니다.

그리고나서 끝나기를 기다리면 됩니다. 즉시 볼 수 있는 결과는 없고, 전체가 보이는 유용한 메시지를 항상 볼 수도 없죠. 단지 진행상태가 작은 상태바에 표시됩니다.

그리고 다음과 같은 것을 볼 수 있습니다.

만약 문제가 있다면 에러를 생길것이고, 잘못 진행된 것입니다. 예를 들어, 도메인 파티션의 복제를 강제하고 DC 중 하나가 유지보수를 위해 오프라인 상태일때 에러가 발생됩니다.

같은 서버에서 Repadmin.exe 단계와 비교해보죠, 모든 파티션에 밀어내기 복제를 실행합니다.

1. 다음과 같이 실행합니다.

Repadmin /syncall DC_name /APed

2. 2번 단계는 없어요. 이게 끝입니다. :-)

repadmin을 /syncall /A(ll partitions) P(ush) e(nterprise, cross sites) d(istinguished names) 매개변수를 넣고 실행시키면, Replmon이 하는 것과 정확히 같은 일을 합니다. 여러 단계가 아니라, 한단계만을 거치는 것이 다르죠. 그리고 명령어 어떻게 진행되었는지 즉시 결과를 볼 수 있는 장점이 있습니다. 제가 제 DC에서 이걸 실행했을때, 특정 서버 이름조차 지정하지 않았습니다.

앞에서 본 하나의 DC가 유지보수를 위하여 오프라인 상태인 상황은 어떨까요? 이 경우는 도메인 파티션만을 위해서 synchronize 동기화를 할것이고, 사이트 경계에 걸쳐 밀어내기(push)를 할겁니다.

Repadmin /syncall /Pe dc_name naming_context

Repadmin을 통해 더욱 더 자세한 에러를 얻을 수 있습니다.

이건 문서화되어있고 리서치할 수 있는 적합한 에러입니다.

상태 확인

Replmon은 상태 리포트를 텍스트파일로 생성하는 옵션이 있습니다. 그건 어떤 서버가 어떤 다른 서버에 복제되도록 구성되었는지, 어떤 에러가 생겼는지 등을 알려줍니다. 실제로 꽤 유용하고, 사람들이 이 도구를 좋아하는 이유중에 하나이죠. Repadmin.exe은 명령줄 옵션의 일부에 비슷한 기능을 제공합니다. 예를 들어, 다음과 같이 요약 리포트를 얻을 수 있습니다.

Repadmin /replsummary *

여러대의 DC가 오프라인입니다. Repadmin은 58번의 정확한 에러를 보여주는데 다른 DC가 가용하지 않으며 상태를 알 수 없다고 보여줍니다.

또한 Repadmin에서 장황한 명령어를 사용하여 어떤 DC가 복제되지 않았는지에 대한 세부내용을 볼 수 있습니다.

Repadmin /showrepl *

유용한 상태 정보를 많이 만들어내는 ‘repadmin 상태 리포트’를 만들기 원하면, 다음의 간단한 배치파일이 있습니다.

@echo off

echo.

echo Gathering Report for DCLIST = %1

echo.

Echo Report for DCLIST = %1 > replreport.txt

echo. >> replreport.txt

echo. >> replreport.txt

echo Gathering Verbose Replication and Connections

echo Verbose Replication and Connections >> replreport.txt echo. >> replreport.txt

repadmin /showrepl %1 /all >> replreport.txt

echo. >> replreport.txt

echo Gathering Bridgeheads

echo Bridgeheads >> replreport.txt

echo. >> replreport.txt

repadmin /bridgeheads %1 /verbose >> replreport.txt

echo. >> replreport.txt

echo Gathering ISTG

echo ISTG >> replreport.txt

echo. >> replreport.txt

repadmin /istg %1 >> replreport.txt

echo. >> replreport.txt

echo Gathering DRS Calls

echo Outbound DRS Calls >> replreport.txt

echo. >> replreport.txt

repadmin /showoutcalls %1 >> replreport.txt

echo. >> replreport.txt

echo Gathering Queue

echo Queue >> replreport.txt

echo. >> replreport.txt

repadmin /queue %1 >> replreport.txt

echo. >> replreport.txt

echo Gathering KCC Failures

echo KCC Failures >> replreport.txt

echo. >> replreport.txt

repadmin /failcache %1 >> replreport.txt

echo. >> replreport.txt

echo Gathering Trusts

echo Trusts >> replreport.txt

echo. >> replreport.txt

repadmin /showtrust %1 >> replreport.txt

echo. >> replreport.txt

echo Gathering Replication Flags

echo Replication Flags >> replreport.txt

echo. >> replreport.txt

repadmin /bind %1 >> replreport.txt

echo. >> replreport.txt

echo Done.

메모장에 복사하고 붙여넣기를 한 다음, CMD 파일로 저장하고 서버이름, 와일드카드와 부분적인 이름, 또는 *을 넣고 실행합니다. 이건 Repadmin에서 지원됩니다.

따라서 하나의 서버에 데이터를 얻고자 한다면, 다음과 같이 Replmon을 실행합니다.

Replreport.cmd server1

또는 모든 DC (Replmon이 실행될 수 없는 DC) 에서 데이터를 얻고자하면,

Replreport.cmd *

또는 서버이름이 “SANFRAN”으로 시작하는 모든 서버의 데이터를 얻길 원한다면,

Replreport.cmd sanfran*

replreport.txt라고 불리는 텍스트파일로 결과물이 생깁니다. Repadmin이 할 수 있는것은, 이 배치파일에서 할 수 있습니다.

더, 더, 더 많이 할 수 있는 것들

다음과 같이, Repadmin 은 심지어 모니터링도 할 수 있습니다.

DC 가 백업된 마지막 시간을 알고 싶다면, 모든 서버에서 DSASignature 속성값을 읽습니다.

Repadmin /showbackup *

또는 모든 DC의 복제 요약 정보에 대한 결과물을 CSV 형식을 받았다면 스프레드시트나 데이터베이스에서 열 수 있습니다. 여기에서 제 DC를 다시 온라인으로 하고 멈춰있던 변경을 복제합니다. 그리고나서 복제 리포트를 얻습니다.

Repadmin /showrepl * /csv

또는 다음과 같이, 어떤 복제 백로그(backlog)가 현재 큐에 있는지 볼 수 있습니다.

Repadmin /queue *

또는 어떤 변경사항이 서버로부터 복제되지 않았는지뿐만 아니라, 어떤 변경사항이 마지막으로 명령어를 실행시킨 이후에 복제되었는지, /showchanges 를 통해 알 수 있습니다.

repadmin /showchanges destination_DC source_DSA_GUID domain_DN

(69) add CN=Ned Pyle,CN=Users,DC=adatum,DC=com

1> parentGUID: a90a9633-2682-4896-be86-21220cf24f0c

1> objectGUID: e8f0e0a2-69aa-4e4e-9f74-3db79ad6f3b7

4> objectClass: top; person; organizationalPerson; user

1> sn: Pyle

1> givenName: Ned

1> instanceType: 0×4 = ( WRITE )

1> whenCreated: 6/21/2009 9:05:32 AM Pacific Daylight Time

1> displayName: Ned Pyle

1> nTSecurityDescriptor: O:DAG:DAD:AI

1> name: Ned Pyle

1> userAccountControl: 0×10200 = ( NORMAL_ACCOUNT | DONT_EXPIRE_PASSWD )

1> codePage: 0

1> countryCode: 0

1> pwdLastSet: 6/21/2009 9:05:32 AM Pacific Daylight Time

1> primaryGroupID: 513 = ( GROUP_RID_USERS )

1> objectSid: S-1-5-21-3776065869-1984782319-1196103478-1107

1> accountExpires: (never)

1> sAMAccountName: nedpyle

1> sAMAccountType: 805306368 = ( NORMAL_USER_ACCOUNT )

1> userPrincipalName: nedpyle@adatum.com

1> objectCategory: <GUID=4ed8da23575bed48b12cd36061257c14>;CN=Person,CN=Schema,CN=Configuration,DC=adatum,DC=com

맞나요? 대기하는 변경사항의 목록에서, DC가 오프라인상태 일때 만든 사용자입니다. 대기하는 변경사항의 다른 긴 목록은 잘랐습니다. 잠시동안 DC가 복제되지 않는것을 볼 수 있고 문제를 해결하는데 걸리는 시간을 줄여줄 수 있어 매우 유용해 보입니다.

다른 Repadmin 기능들

Repadmin은 모니터링, 운영, 그리고 문제해결을 할때 사용할 수 있는 많은 비밀들이 있습니다.

하지만 Replmon이 할 수 없는 것들은 다음과 같습니다.

l 특정 오브젝트에 대한 복제

l 읽기전용 DC(RODC)에서 비밀번호 캐슁을 지정하거나 비밀번호 정책 보기 및 변경

l 복제 토폴로지를 만들고, 수정하고, 그리고 삭제하기

l 링거링 오브젝트(lingering objects) 삭제하기

l 글로벌 카탈로그 파티션 조정하기

l 복제 레지스트리 값 조정하기

l 엑셀에서 읽을 수 있는 텍스트로 출력하기

l 기타 기능들…

모든 도움말을 보기 원한다면

Basic help – Repadmin /?

선택된 DC에 대한 도움말은 Repadmin /listhelp

고급 명령어 도움말은 – Repadmin /experthelp

모든 매개변수에 대한 도움말과 예제는 – Repadmin /?:Your specific parameter here

정리

Repadmin 은 Replmon이나 Dssites.msc 과 같지 않지만, 이 두 유틸리티들을 합친것보다 더욱 강력합니다. AD 운영자는 ID 관리, 인증, 권한, 그리고 기업 전반에 걸친 네트워크 등의 많은 책임을 가지게 됩니다. 마우스를 지원하지 않더라도, AD의 가장 강력한 도구를 사용할 수 있도록 노력해보세요.

2009년 6월 2일 업데이트 : 독자중에 한분이 Repadmin을 사용하여 문제를 해결할 수 있는 훌륭한 백서를 가르켜주셨습니다. 아래 링크를 참조하세요.

http://www.microsoft.com/downloads/details.aspx?familyid=c6054092-ee1e-4b57-b175-5aabde591c5f&displaylang=en

(Mike!, 고마워요)

댓글