요즘 Xen Server 에 대한 사람들의 궁금증이 증가되는것 같다. 이에 한번 테스트 해보기로 큰 맘을 먹고 이에 대한 테스트를 수행해 보려고 한다. 이중 첫번째 단계로 Xen Server 설치 이후 Vitrual Machine에 Windows 2008 Core Version을 올려 AD 구성해보는것이 첫번째 Mission 이다.~~~^^
[Windows 2008 Core]
Windows 2008 Core를 처음 다루는거라 부족한 면이 많다. 이렇다할 참고자료 없이 맨땅에 해딩하는 기분으로 시작해보았다.
위의 그림은 XenCenter에서 Windows Core Version을 실행하고 있는 모습니다. 일단 Install만 해놨지 IP설정이나 뭐 이런것을은
전혀 설정되어 있지 않은 상태이다. IP설정이나, 만약 Core에 원격 Desktop 접속을 원하면 http://cokooni.tistory.com 에 들어가면 자세한 방법이 나와있다. 간단히 설명하자면 Windows 2003에서도 똑같은 명령을 수행할 수 있으며 “netsh”명령어를 사용해서 Network 설정을 할 수 있다.
오른쪽 그림을 보면 Core Version에서 Registory 값을 쉽게 변경할 수 있는 SCregEdit.wsf 파일이 있는데 이 파일을 이용하여
원격접속 및 뭐 다른것들을 손쉽게 변경할 수 있다. 파일 내용 中 하단에 보면 사용 가능한 Option을 지정할 수 있다.
이제 기본적인 설정이 끝났으면 본격적으로 Active Directory를 Install해보겠다. 위에 참고 KB문서를 보면 Install하는 방법이 쉽게 나와 있다. Install하는 방법은 몇가지 방법으로 할 수 있으나 특정 파일내 설치되는 환경을 미리 정의 이후 dcpromo를 이용하여 환경파일을 읽어오는 방법으로 설치해 보겠다.
이와 같이 실행하면 정상적으로 설치되는 화면을 볼 수 있다. 환경파일 설정 방법은 다음과 같다.
Active Directory 도메인 서비스 파일이 설치되어 있는지 여부를 확인하는 중입니다. Active Directory 도메인 서비스 설치
환경 및 매개 변수를 확인하는 중...
권한 있는 부모 영역이 없거나 권한 있는 부모 영역에서 Windows DNS 서버가 실행되고 있지 않으므로 이 DNS 서버에 대한 위임을 만들 수 없습니다. 기존 DNS 인프라와 통합하는 중이면 TST.com 도메인 외부에서 이름 확인을 신뢰할 수 있도록 부모 영역에 이 DNS 서버에 대한 위임을 수동으로 만들어야 합니다. 그렇지 않으면 아무 작업도 필요하지 않습니다.
---------------------------------------- 다음 작업이 수행됩니다. 이 서버를 새 포리스트의 첫 번째 Active Directory 도메인 컨트롤러로 구성합니다.
새 도메인 이름은 TST.com이며 새 포리스트의 이름으로도 사용됩니다.
도메인의 NetBIOS 이름은 TST입니다.
포리스트 기능 수준: Windows Server 2008
도메인 기능 수준: Windows Server 2008
사이트: HERE
추가 옵션: 읽기 전용 도메인 컨트롤러: 아니요 글로벌 카탈로그: 예 DNS 서버: 예
DNS 위임 만들기: 아니요
데이터베이스 폴더: C:\Windows\NTDS 로그 파일 폴더: C:\Windows\NTDS SYSVOL 폴더: C:\Windows\SYSVOL
이 컴퓨터에 DNS 서버 서비스를 설치합니다. 이 컴퓨터에 DNS 서버 서비스를 구성합니다. 이 DNS 서버를 기본 설정 DNS 서버로 사용하도록 이 컴퓨터를 구성합니다.
새 도메인 Administrator의 암호는 이 컴퓨터의 로컬 Administrator의 암호와 같습니다. ----------------------------------------
시작하는 중...
DNS 설치를 수행하는 중...
다음 작업을 위해 Ctrl+C를 누릅니다. 취소
DNS 설치가 완료될 때까지 대기하는 중
DNS 서버 서비스가 인식될 때까지 대기하는 중... 0
DNS 서버 서비스가 시작될 때까지 대기하는 중... 0
그룹 정책 관리 콘솔을 설치해야 하는지 확인하는 중...
Active Directory 도메인 서비스를 호스팅할 로컬 컴퓨터를 구성하는 중
다음 디렉터리 파티션을 만드는 중: CN=Schema,CN=Configuration,DC=TST,DC=com; 1585 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 1249 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 988 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 741 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 532 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 327 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 158 개체 남음
다음 디렉터리 파티션을 만드는 중: CN=Configuration,DC=TST,DC=com; 0 개체 남음
다음 디렉터리 파티션을 만드는 중: DC=TST,DC=com; 0 개체 남음
새 도메인 사용자, 그룹 및 컴퓨터 개체를 만드는 중
LSA 정책 정보 설정 중
machine\software\microsoft\windows 보안 중
SamSs 보안 중
시도한 도메인 컨트롤러 작업이 완료되었습니다.
이 컴퓨터에 DNS 서버 서비스를 구성하는 중...
이 컴퓨터에 지금 Active Directory 도메인 서비스가 TST.com 도메인에 대해 설치되어 있습니다.
이 Active Directory 도메인 컨트롤러가 HERE 사이트에 할당되었습니다. Active Directory 사이트 및 서비스 관리 도구를 사용하여 사이트를 관리할 수 있습니다.
Windows Server 2008 도메인 컨트롤러는 새롭고 보다 안전한 "Windows NT 4.0과 호환되는 암호화 알고리즘 허용" 보안 설정을 기본값으로 사용합니다. 이 설정은 Microsoft Windows 및 비-Microsoft SMB "클라이언트"가 보다 안전하지 않은 NT 4.0 형식의 암호화 알고리즘을 사용하여 보안 채널 세션을 Windows Server 2008 도메인 컨트롤러에 연결하는 것을 예방합니다. 이 새로운 기본값의 결과로, Windows Server 2008 도메인 컨트롤러에서 서비스하는 보안 채널을 필요로하는 작업 또는 응용 프로그램이 실패될 수도 있습니다.
이 변경 사항에 영향을 받는 플랫폼은 Windows NT 4.0 및 비-Microsoft SMB "클라이언트"와 높은 암호화 알고리즘을 지원하지 않는 NAS 장치가 있습니다. Vista 서비스 팩 1 보다 이전 버전을 실행하는 클라이언트의 경우, Active Directory 마이그레이션 도구에서 실행하는 도메인 참가 작업 또는 Windows 배포 서비스등의 일부 작업도 영향을 받을 수 있습니다.
이 컴퓨터에는 네트워크 어댑터의 IP 속성에 할당된 고정 IP 주소가 없습니다. 네트워크 어댑터에 대해 IPv4 및 IPv6을 모두 사용하도록 설정된 경우 실제 네트워크 어댑터의 IPv4 및 IPv6 속성 모두에 IPv4 및 IPv6 고정 IP 주소를 모두 할당해야 합니다. 그렇지 않은 경우에는 IPv4 또는 IPv6 고정 IP 주소 중 하나를 할당해야 합니다. 신뢰할 수 있는 DNS(Domain Name System) 작업에 대해 고정 IP 주소를 할당해야 합니다. 고정 IP 주소를 할당하지 않으면 IP 주소가 변경되는 경우 클라이언트가 이 도메인 컨트롤러에 연결하지 못할 수 있으며 현재 동적으로 할당된 IP 주소를 가리키는 모든 위임이 작동을 중지합니다.
Windows에서 제공하는 Alert 기능을 활용하여 시스템 관련 모니터링을 하는 경우가 있다. Event Log에 이력을 남겨 관리할 수 있으며, 특정 조건 (임계치를 초과 할 경우)에서 수행할 동작을 미리 지정하여 시스템 운영의 자동화에 도움을 줄 수 있다.
이때 강력하게 사용할 수 있는 명령어가 “Logman.exe”란 명령어이다. 결론부터 말하자면 Windows 2003 과 Windows 2008에서 Command 로 수행될 수 있는 방법에는 약간의 차이가 있다.
Windows 2003에서 Logman.exe 명령어는 counter & trace Log만 명령어로 수행할 수 있다. 만약 성능로그를 활용해서 시스템 모니터링을 강화하고 싶다면, 특정 Registry 값을 Export하여 다른 서버에 등록해야 하는 번거로움이 있다.
[참고] Perfmon 中 Alert Log 배포를 쉽게 하는 방법
1. 원본 Source 서버에서 성능 모니터링을 수행하고자 하는 항목에 대한 Template을 작성한다.
2. 새로 생성한 Registry값을 확인하여 SID값을 원하는 값으로 수정한다.
Key Value : HKLM\SYSTEM\CurrentControlSet\Services\SysmonLog\Log Queries
3. 수정한 Registry 값을 Export 받은 후 다른서버에 적용한다.
만약 특정 Action 발생 후 Script를 실행한다면 수행할 계정을 선택하게 된다. 이러한 경우에는 배포하려는 서버에 공통계정을 만들어 두어 관리를 한다면 좀 더 효과적인 관리가 될 수 있다.
그럼 Windows 2008에도 똑같은 위치에 Registry값이 존재할까? 대답은 No!!!이다. 물론 Windows 2003의 Registry값을 등록할 경우 Key Value는 등록이 되며 Windows 2008 Perfmon에도 해당 설정된 값은 보이게 되지만 실행은 되지 않는다.
그럼 Windows 2008에는 이러한 작업을 일일히 해야 하는 것일까?
이런 Case일 경우 Windows 2008에서는 logman.exe 명령어를 사용하면 된다.
Windows 2008에서 logman 실행화면이다. 각 Command에 따라서 자세한 설명을 보고싶다면, 가령 예들들어 perfmon관련 Counter를 새로 만들고 싶다면 “logman create /?” 이런 방법으로 각 세부 설명을 볼 수 있다.
위 그림에서 확인할 수 있듯이 Windows 2008에서는 alert 뿐만이 아닌 구성 & API관련 내용에 대한 항목도 Command로 수행할 수 있다. 생성 뿐만이 아닌 수정도 아래와 같이 Command Base로 가능하다.
특정 Registry값을 몰라도 일반 CMD명령어로 alert 설정이 가능하기 때문에 배포를 손쉽게 할 수 있으며 내용 수정또한 쉽게 할 수있어 앞으로 이와 같은 Command를 활용하여 Windows서버 관리를 좀더 효율적으로 하면 좋지 않을까~~~^^
요즘 Terminal Server 관리 자동화를 위해 VBS를 이용하고 있다. 거의 완전 초보 수준이라 몇개 Script를 이용해서 만들기는 하지만 Output에 대해서는 나름 만족하고 있다. 더 나은 로직으로 관리를 하신 분들도 분명히 계실것이라 생각된다.^^ (저의 블로그를 방문해 주시는 고수 분들의 많은 지적도 부탁드립니다)
'CPU Time과 CPU사용률을 비교 – CPU 수행시간이 4시간이상 프로세스 중 사용률이 20% 이상, 메모리 사용률 2G 이상 If ((sngProcessTime > 18000 And CPUUSage(objProcess.ProcessId) > 20) Or objProcess.WorkingSetSize /1024/1024 > 2000 ) then Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("파일경로", ForAppending)
'Application 에서 teminate function을 사용할 경우 적용가능 'objProcess.Terminate()
'그렇지 않을 경우 CMD 명령어로 해당 프로세스 Kill Rem------------------------------------------------ Set wshShell = WScript.CreateObject ("WSCript.shell") wshshell.run "cmd /c taskkill /f /pid " & objProcess.ProcessID Set wshshell = nothing Rem ------------------------------------------------------------- objFile.WriteLine now & " " & objProcess.Name & " ProcessTime:" & sngProcessTime & " memory:" & objProcess.WorkingSetSize /1024 /1024 & " ProcessID : " & objProcess.ProcessID & " CPU Usage : " & CPUUSage(objProcess.ProcessID) 'objFile.WriteLine "cmd /c taskkill /f /pid " & objProcess.ProcessID objFile.Close End if
Function CPUUSage( ProcID ) On Error Resume Next Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2") For Each objInstance1 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N1 = objInstance1.PercentProcessorTime D1 = objInstance1.TimeStamp_Sys100NS Exit For Next WScript.Sleep(2000)
For Each perf_instance2 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N2 = perf_instance2.PercentProcessorTime D2 = perf_instance2.TimeStamp_Sys100NS Exit For Next
' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 Nd = (N2 - N1) Dd = (D2-D1) PercentProcessorTime = ( (Nd/Dd)) * 100 CPUUSage = Round(PercentProcessorTime ,0) End Function
지금 위와 같은 Script를 실행할 경우 결과 파일은 TXT 파일 형태로 떨어지게 된다. 만약 해당 내용을 Event Log에 뿌리고 싶다면 Event Log를 뿌리는 것을 Function으로 작성하여 Script 내에 넣으면 된다.
Function CPUUSage( ProcID ) On Error Resume Next Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2") For Each objInstance1 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N1 = objInstance1.PercentProcessorTime D1 = objInstance1.TimeStamp_Sys100NS Exit For Next WScript.Sleep(20)
For Each perf_instance2 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N2 = perf_instance2.PercentProcessorTime D2 = perf_instance2.TimeStamp_Sys100NS Exit For Next
' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 Nd = (N2 - N1) Dd = (D2-D1) PercentProcessorTime = ( (Nd/Dd)) * 100 CPUUSage = Round(PercentProcessorTime ,0) End Function
' User Name을 불러오는 Function
Function UserList(aServer, aSession)
On Error Resume Next Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\Citrix") Set colItems = objWMIService.ExecQuery( "SELECT * FROM MetaFrame_Process where ServerName = '" & aServer & "' and SessionID = '" & aSession & "' and ProcessName = '프로세스이름'")
For Each objItem in colItems username = objItem.UserName Next
UserList = username
End Function
' 수행결과를 Event Log로 뿌리는 Function
Function Critical()
Const EVENT_SUCCESS = 2 Set objShell = Wscript.CreateObject("Wscript.Shell") objShell.LogEvent EVENT_SUCCESS, _ "User : " & UserList(objProcess.CSName, objProcess.SessionID) & " 정상적으로 Logoff 하였습니다." End Function
프로세스 Kill Script 와 연관되어 작성한 User Logoff Script이다. Xen APP서버를 서비스 하는 경우 User에 대한 정보를 일반적인 OS상에 존재하는 WMI 값에서 가져올 수 없다. Xen APP은 RDP Session으로 접근하는것이 라는 ICA Session 자체로 표시되기 때문에 User Name값을 가져올 경우에는 Citrix WMI값을 이용하여 Function화 하면 쉽게 User Name을 가져올 수 있다.
또 아래부분을 보면 Event Log로 전달하는 부분이 Function을 참고하셔도 활용할 수 있는 범위가 많을 것이라 생각된다.
클라우드컴퓨팅 환경의 필수조건이라 생각되는 Virtualization 환경 구축, Server 및 Storage Consolidation, VDI, 등등…
올해 진행되야 하는 기술중에 가장 큰 축을 차지하고 있는 Solution들 같다. 이중 MS에서 후발주자로 야침차게 준비한 Hyper-V에 대한 기본적인 내용을 알아보려고 한다.
APIC – Advanced Programmable Interrupt Controller
A device which allows priority levels to be assigned to its interrupt outputs.
Child Partition – Partition that hosts a guest operating system
All access to physical memory and devices by a child partition is provided via the Virtual Machine Bus
(VMBus) or the hypervisor.
Hypercall – Interface for communication with the hypervisor
The hypercall interface accommodates access to the optimizations provided by the hypervisor.
Hypervisor – A layer of software that sits between the hardware and one or more operating systems.
Its primary job is to provide isolated execution environments called partitions. The hypervisor controls and
arbitrates access to the underlying hardware.
IC – Integration component
Component that allows child partitions to communication with other partitions and the hypervisor.
I/O stack – Input/output stack
MSR – Memory Service Routine
Root Partition – Manages machine-level functions such as device drivers, power management, and device hot
addition/removal. The root (or parent) partition is the only partition that has direct access to
physical memory and devices.
VID – Virtualization Infrastructure Driver
Provides partition management services, virtual processor management services, and memory
management services for partitions.
VMBus – Channel-based communication mechanism used for inter-partition communication and device enumeration
on systems with multiple active virtualized partitions. The VMBus is installed with Hyper-V Integration Services.
VMMS – Virtual Machine Management Service – Responsible for managing the state of all virtual machines in child
partitions.
VMWP – Virtual Machine Worker Process – A user mode component of the virtualization stack. The worker process
provides virtual machine management services from the Windows Server 2008 instance in the parent partition to
the guest operating systems in the child partitions. The Virtual Machine Management Service spawns a separate
worker process for each running virtual machine.
VSC – Virtualization Service Client – A synthetic device instance that resides in a child partition. VSCs utilize hardware
resources that are provided by Virtualization Service Providers (VSPs) in the parent partition. They communicate
with the corresponding VSPs in the parent partition over the VMBus to satisfy a child partitions device I/O requests.
VSP – Virtualization Service Provider – Resides in the root partition and provide synthetic device support to child
partitions over the Virtual Machine Bus (VMBus).
WinHv – Windows Hypervisor Interface Library - WinHv is essentially a bridge between a partitioned operating system’s
drivers and the hypervisor which allows drivers to call the hypervisor using standard Windows calling conventions
WMI – The Virtual Machine Management Service exposes a set of Windows Management Instrumentation (WMI)-based
APIs for managing and controlling virtual machines.
Windows 2008 64Bit에서 제공되는 Hyper-V의 기본적 Architecture는 위의 내용과 같다. 즉, 64Bit Machine이 반드시 필요하며, 4개의 Guest OS를 무료로 제공하기 때문에 사용량이 낮은 Box를 Hosting 통합할 때 유용하게 사용될 수 있다.
[필요 H/W 사양] – 64Bit 지원되면 OK!
반드시 64bit Machine이 지원되는 H/W BOX여야 한다. 64 Bit 지원은 Intel-VT, AMD-V 기술이 적용되어 있으면 설치가 가능한 장비가 되며, 단순히 테스트를 위한 용도라면 DL380, PE2950과 같은 장비면 충분할것이라 판단되며, 실제 운영을 생각한다면 앞에 말한 장비는 IO Slot의 제약을 받기 때문에 DL580, PE6850 이상급의 4Way 장비에 구축을 하는게 적절할 것이 생각된다.
정리해보면 CPU : 64Bit 지원이 가능한것, MEM : 최소 8G이상 (Windows 2008 의 경우 기본적으로 2G이상을 권고하기 때문에 적어도 테스트를 위해서라면 8G 이상은 되야 할것 같다), 메모리와 같은 경우 테스트 범위나 운영범위에서 결정되어야 하는 부분이기 때문에 목적에 따라 변화는 값이라 여기서 논하기에는 큰 의미가 없다고 생각된다.
[정말 Hyper-V 무료?]
기본적은 Windows 2008 64Bit를 이용하면 역할 추가를 통해 Hyper-V를 구현할 수 있다. 그렇기 때문에 무료로 제공되는 기능이 맞다고 볼수 있다. 단순히 파일서버 구축이나, MS Pakage로 된 단순 서버를 구축할때는 분명 이점이 있을 것이라 생각은 된다. 그러나 실제 운영서버에 올리기 위해서는 별도의 관리 Tool을 구매해야 한다. 즉, SCVMM이란 Tool을 구매해야 한다.
SCVMM을 이용하면 Virtual Server에 대한 이미지를 관리할 수 있으며, P2V, V2V와 같은 Consolidation에 대한 준비도 쉽게 진행할 수 있기 때문에 실제 운영을 위해서는 반드시 구매되어야 하는 패키지와 같은 느낌이 든다.
단일서비스 구축을 위해서 Hyper-V를 사용한다면 별도의 AD구축이 필요없다. 그러나 SCVMM을 이용하기 위해서는 반드시
AD를 구축해야 하며, 심지어 관리 SCVMM Console을 이용하기 위해 자신의 PC에 기능을 설치하려고 한다면, 해당 Client도 반드시 AD에 Join되어 있어야 한다. 즉, AD가 없는 환경이라면 AD구축또한 진행이 반드시 필요하다.
[Live P2V, V2V]
이번 내용은 Hyper-V에 대한 내용 임으로 타 vendor에 대한 비교는 생략하려고 한다. 실제로 P2V를 테스트로 수행해보았더니 시간도 적당하게 걸리면서 깔끔하게 Porting 되는것을 확인했다. 한가지 주의할 점은 P2V를 사용할 때 Physical Machine의 정보를 전달하기 위해 BITS(Backgroupd Intelligent Transfer Service) & SSL 을 이용하게 된다. IIS를 사용하고 있는 서버에서 Port충도로로 VM관리 및 P2V가 오류나는 경우도 있다. (이부분에 대해서는 향후 P2V 부분을 다룰때 언급할 예정) 또 한가지 중요한 사실이 Windwos 2003 SP2 이상의 경우에만 P2V가 가능하다는고 알고 있었는데....^^ 덧글에 달린 위시님의 말씀으로 " P2V는 윈도우2000 SP4 부터 정상적으로 됩니다. 단 윈도우2003이후는 온라인P2V가 되지만 윈도우2000 SP4는 오프라인P2V 를 통해 가능합니다. 즉 SCVMM 에이전트를 push한 이후 윈도우2000 sp4는 Win PE이미지부팅을 통해 P2V를 이행하게 됩니다.." 라고 지적해 주셨습니다...^^ 짧은 테스트로 글을 섰더니 잘못된 내용이 들어갔네요.^^Consolidation의 경우 예전에 구축된 단일 서버에 대한 통합을 목적으로 하는 경우가 많은데 In-House 개발된 Pakage나 Non-MS 제품의 Application이 운영되는 P2V에 대해서 얼마나 지원이 가능할지는 좀더 테스트를 해봐야 알 수 있을것 같다.