류짱:Beyond MySelf

MSSQL Failover Cluster의 TempDB를 로컬 디스크로 변경 하는 방법

서비스중인  SQL Server 2012R2  Failover Cluster의 TempDB를 로컬 디스크로 변경하는 작업을 위한 가이드를 공유해봅니다.
아래 작업을 진행한 배경은 요기(http://ryuchan.kr/525)서 확인 가능합니다.

[사전 작업]
- 각 노드에 SSD 디스크 추가
- 반드시 사전에 양쪽 노드의 동일 한 위치에 Tempdb가 위치할 폴더를 생성 합니다.
 
[ 작업 절차 ]
SSD 추가 작업이 완료 된 후 각 노드의 동일한 위치에 Tempdb폴더가 생성 되었다는 가정하에..

1. 현재 SQL 소유권을 가지고 있는 Node 확인
-> node2


2. SQL 서버의 소유권을 가지고 있는 서버로 로그온 후 sql management 실행  Tempdb 위치 확인

SELECT name, physical_name AS CurrentLocation 
FROM sys.master_files 
WHERE database_id = DB_ID(N'tempdb'); 
GO

현재 Tempdb는 클러스터 공유 디스크(E 드라이브)에 연결 되어 있음을 확인

3. Alter database 명령어를이용해서 Tempdb 위치 변경

USE master; 
GO 
ALTER DATABASE tempdb  
MODIFY FILE (NAME = tempdev, FILENAME = 'c:\sql\temp\tempdb.mdf'); 
GO 
ALTER DATABASE tempdb  
MODIFY FILE (NAME = templog, FILENAME = ' c:\sql\temp \templog.ldf'); 
GO 

위 커멘드를 실행하면 아래 빨간 네모 박스와 같은 경고메시지가 발생합니다.
tempdb가 클러스터 디스크에서 로컬 디스크로 변경 된다는 경고이므로 참고만 합니다.

4. SQL service 재 시작


5. Tempdb 위치 확인


SQL Failover Test
기존 Node 2에서 Node1로 Failover 가 정상적으로 완료 됨을 확인 할 수 있습니다. 물론 Failback도 잘 되었습니다.

[참고 자료]
Local Tempdb with SQL Server 2012R2 Failover Cluster #1
http://ryuchan.kr/525

Local Tempdb with SQL Server 2012R2 Failover Cluster #2
http://ryuchan.kr/526

Move System Databases
https://docs.microsoft.com/en-us/sql/relational-databases/databases/move-system-databases


감사합니다.


저작자 표시 비영리 변경 금지
신고

Comment 0

Local Tempdb with SQL Server 2012R2 Failove Cluster #2

각 노드에 Failover Cluster가 구성 되었기 때문에 이번에는 해당 노드에 TempDB만 로컬 디스크를 이용하는
SQL Server 2012R2 Failover Cluster를 구성 하는 방법을 소개 합니다.

SQL 설치를 위해서는 해당 노드의 OS(Widows Server 2012R2)에 .NetFrameWork3.5가 설치 되어야 하는데 이게 기능 추가에서
잘 되지 않죠?
dism 명령어를 이용해서 추가 해 보았습니다.

Dism 명령어를 이용한 닷넷프레임워크 설치 방법의 자세한 내용은 예전 포스팅을 참고 부탁 드립니다.(여기)

SQL의 Failover Cluster 구성도 몇 번 공유 한적이 있기 때문에 간략하게 설치 과정을 소개하합니다.

아래 클러스터의 디스클 할당 하는 부분은 현재 TempDB만 로컬 디스크로 설정할 것이기 때문에 살펴 보겠습니다.
SQL 클러스터 구성 중 아래 화면에서 데이터의 디렉터리를 설정 하는 부분에서 TempDB의 디렉터리를 로컬 디스크로 설정합니다.

여기서 주의 할점은 TempDB가 위치할 폴더가 반드시 두 노드의 동일한 위치여야 한다는 것입니다.

TempDB가 로컬 디스크이기 때문에 경고 메시지가 발생 합니다.아래 메시지를 보시면 위에서 얘기한 각 노드에 동일한 위치에 Tempdb가
존재 하야 한다는 설명이 있습니다.

 Yes를 클릭 한 후 다음으로 넘어 갑니다.

TempDB가 로컬 디스크로 지정 되었음에도 첫 번째 노드에서 SQL Failover Cluster가 잘 구성 되었습니다.

이제 두번째 노드에서 SQL Failover Cluster를 설치 합니다.

두번째 노드에서도 문제 없이 설치가 완료 되었습니다.

SQL Failover Cluster 의 구성 완료 후 SQL관리 콘솔을 실행하여 다시 한번 TempdDB의 위치를 확인 해 보았습니다.

아래 그림에서 처럼 TempDB가 로컬 디스크에 위치 됨을 확인 할 수 있습니다.


이 상태에서 SQL Server의 Fail over를 테스트 합니다.


문제 없이 Failover가 진행 되었고 Node2에도 TempDB의 파일이 생성 됨을 확인 할 수 있습니다.


위 가이드는 SQL Failover Cluster를 새로 구성하는 과정에서 TempDB를 로컬 디스크로 할당 한 것이지만
실제 Failover Cluster로 운영 중인 서버에서도 로컬 디스크로의 변경이 잘 되며 다음에 그 방법을 포스팅 하겠습니다.

Move System Databases
https://docs.microsoft.com/en-us/sql/relational-databases/databases/move-system-databases

감사합니다.

[참고 자료]


저작자 표시 비영리 변경 금지
신고

Comment 0

Local Tempdb with SQL Server 2012R2 Failove Cluster #1

서비스 중인 PC 온라인 게임 서버의 DB 성능 이슈로 사용자 랙이 발생한다고 하여 오래 전에 해당 서버를 분석한 적이 있는데
해당 게임의 개발사는 그 게임은 TempDB를 많이 쓰는 구조라며 TempDB를 SSD로 변경해 줄것을 줄곧 요청 하고 있었던 상황이었습니다.

그러나 해당 서버가 Failover Cluster로 구성 되어 있어 SSD로 환경으로 DB 서버를 교체 하기가 매우 난감했었고, 다행히도
서버가 SQL 2012R2 버전이라 아래와 같이 TempDB만  클러스터 노드에 SSD를 추가하여 운영 해 볼 것을 제안 하였습니다.

아래 문서를 보시면 아시겠지만 SQL Server 2012부터는 TempDB가 로컬 디스크여도 Failover Cluster의 구성이 가능 합니다.

SQL Server failover cluster installation supports Local Disk only for installing the tempdb files.
https://msdn.microsoft.com/en-us/library/ms143506(v=sql.110).aspx
Storage Types for Data Files
The supported storage types for data files are:
 • Local Disk
 • Shared Storage
 • SMB File Share

TempDB만 로컬 디스크를 사용하는 SQL Server 2012R2 Failover Cluster를  VMware환경에 구성 한 후 문제 없이 Fail over가 진행 되는 것을

확인 하고 해당 방법을 공유해 봅니다.^^

[환 경]
 - SQL Server 2012R2 Failover Cluster on VMware single host

[구성 방법]

먼저 VMware vCenter에 접속해 MSCS 구성을 위한 VM 디스크를 생성합니다.
VMware에서 제공하는 아래 가이드를 참고 하시기 바랍니다.

Setup for Failover Clustering and Microsoft Cluster Service
https://docs.vmware.com/en/VMware-vSphere/6.0/vsphere-esxi-vcenter-server-601-setup-mscs.pdf

추가로 클러스터 구성 방법은 예전에도 많이 포스팅을 하였기 때문에 아래 가이드에는 많은 부분이 생략 되어 있음을
참고 부탁 드립니다.^^

첫번째 노드에 VMDK 디스크를 할당 하고

두번째 노드에는 첫번재 노드에 할 당한 디스크를 추가 합니다.


위 방법으로 2대의 노드에 SQL FCI 를 위한 디스크를 생성 한 후

각 노드의 디스크 관리자에서 디스크를 확인 한 후 디스크 포맷 및 드라이브 문자를 할당 합니다.

그 후 각 노드에 Failover Cluster 기능을 설치 한 후 유효성 검사를 실시합니다.

유효성 검사에서 Disk와 Network 등에 경고 메시지가 있긴 하지만 클러스터 구성엔 문제가 없기 때문에 아래와 같이
cluster20.local.loca이라는 이름으로 클러스터를 구성 하였습니다.

이제 클러스터가 구성이 되었기 때문에 다음에는 해당 클러스터 위에 SQL Server 2012R를 설치 하고 TemdDB만 로컬 디스크로 할당 하는 방법에 대해서
소개를 하겠습니다.

고맙습니다.



저작자 표시 비영리 변경 금지
신고

Comment 0

테스트 환경의 시스코 UCS 블레이드에  Windows Sever 2016 를 설치  Hyper-V Role 인스톨 후 최근 릴리즈 된 Window Server 2016 insider preview 16257을 Guest VM 으로 설치하고 해당 VM에 Windows Subsystem for Linux (WSL) 설치 후 Ubuntu를 설치 하는 방법을 정리합니다.
아래 MS 사이트에 설명이 잘 되어 있지만 저의 경우에는 호스트 머신과 Window Server 2016 insider preview  VM이 인터넷이 안되는 환경이라 Hyper-v 호스트 서버에 Window Server 2016 insider preview VM을 설치하고 인터넷이 되는 환경에서 우분투를 다운 받고 해당 파일을 VM으로 복사후 설치 하였으니 참고 부탁 드립니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server

[Window Server 2016 inside preview 16257버전에 Ubuntu 설치 하기]
1. 먼저 Hyper-v 호스트 서버에 Window Server 2016 inside preview 16257 설치 ISO파일을 다운로드 후 VM을 설치 합니다.
   VM 설치 방법은 워낙 간단하고 많이 알려져 있어서 간단하게 축약합니다.^^

Window Server 2016 inside preview 16257 Datacenter 버전을 선택하고 설치를 완료 합니다.

설치가 완료되면 패스워드 설정 후 해당 머신을 로그온 하여 IP 할당 및  Remote Management 등의 세팅을 완료 합니다.
Configure a Server Core installation of Windows Server 2016 with Sconfig.cmd
https://docs.microsoft.com/en-us/windows-server/get-started/sconfig-on-ws2016

그리고 Powershell을 실행 후 설치 된 VM의 버전을 확인 후

아래와 같은 커멘드로 Windows-subsystem-Linux Feature를 설치 합니다.

 

Windows-subsystem-Linux Feature의 설치가 완료되면 해당 VM은 인터넷이 안되는 환경이기 때문에 인터넷이 가능한 PC나 서버에서
Ubuntu설치 파일을 다운로드 합니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server
download Ubuntu app
Ubuntu

파워셀로 다운로 예

다운로드 한 Ubuntu설치 파일을 Hyper-v 호스트에 복사 후 해당 파일을 copy-vmfile 명령어를 이용해서 해당 VM으로 복사 합니다

VM에 copy된 Ubuntu 압축 파일을 폴더를 생성 한 후 expand-archive 명령어를 이용해서 압축을 해제 합니다.

압축을 푼 후 해당 폴더로 이동하여 Ubuntu.exe 파일을 실행하여 인스톨을 진행합니다.

인스톨이 완료 되면 root 패스워드를 입력하고 정상 동작 하는지 확인을 합니다.

SSH 커멘트를 이용해서 해당 VM의 gateway인 시스토 스위치에도 접속을 해 보고

Top 커멘드로 메모리 리소스 사용률도 확인하고

lscpu 커멘드로 CPU의 상태와 lsb_release -a 커멘드로 설치 된 우분투의 버전도 확인 해 보았습니다.

WSL의 동작 방식을 공부 좀 하고 포스팅 후
그 다음엔 해당 머신에 Ansible을 설치하고 구성 하고 공유해보겠습니다.

Usng Ansible through Windows 10's Subsystem for Linux
https://www.jeffgeerling.com/blog/2017/using-ansible-through-windows-10s-subsystem-linux

Windows Support
http://docs.ansible.com/ansible/latest/intro_windows.html

감사합니다.

[참고 자료]
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server


Copy-VMFile
https://technet.microsoft.com/en-us/itpro/powershell/windows/hyper-v/copy-vmfile

Details on How Linux Runs Natively on Windows
https://www.infoq.com/news/2016/04/linux-windows

Windows Subsystem for Linux: Architectural Overview
https://channel9.msdn.com/Blogs/Seth-Juarez/Windows-Subsystem-for-Linux-Architectural-Overview

저작자 표시 비영리 변경 금지
신고

Comment 0

Cisco UCS Blade 서버에 Windows Server 2016을 설치 해 보았습니다. 상세 그림이 없어서 시스템 구성이  한눈에 와 닿지 않을 수 있지만 외장 스토리지가 연결 되어있고 해당 외장 스토리지에 OS가 설치 되는 구조 입니다.

 

설치와 관련한 자세한 방법은 아래와 같습니다.

[ ]

  • Windows Server 2016 Ent on UCS blade Server

 

[구성 하드웨어]

  • XIO Storage
  • Cisco MDS 9148
  • UCS 관리용 Windows 2008R2
  • Cisco UCS 6410XP Fabric Interconnect
  • Cisco Nexus 5596UP
  • UCS B200 M3 Blade Server

 

[사전 준비 사항]

  • Windows Server 2016 ISO 파일
  • Cisco UCS Virtual Interface Card Drivers (UCS 펌웨어 확인 후 호환 가능한 파일 다운로드)
    시스코
    홈페이지  통해서 다운로드 가능하나 일반 사용자 계정으로는 다운로드 불가
    등록
    파트너사 계정으로 다운로드 가능!!
  • 블레이드 서버에 외장 스토리지의 LUN 할당

[설치 방법]

UCS manager 설치 관리 서버에 접속 UCS Manager 실행 접속

UCS manager에서 서버 Windows Server 2016 설치 UCS 서버를 선택 geneneral => KVM console

콘솔화면에서 Virtual Media탭을 선택하고 아래와 같이 미리 다운로드 받은 Windows 설치 이미지를 삽입 한 후 reset을 클릭 합니다.

Gracefully restart OS를 선택 하고 OK를 누릅니다.

아래와 같은 팝업이 뜨면 OK를 클릭합니다.

아래 그림 처럼 KVM 탭을 클릭하여 서버의 부팅 상태를 확인 합니다.

아래와 같은 부팅 화면에서 키보드의 F6을 눌러 부팅 메뉴로 들어갑니다.

부팅 디바이스 선택 화면에서 Cisco vKVM-Mapped DVD를 선택 합니다.
Windows ISO 를 연결 한 디바이스 입니다.

ISO가 연결 된 가상 DVD를 통해 Windows Server의 부팅 파일이  로딩됨을 확인 합니다. 

Windows Server 2016설치 화면에서 다음을 설치 언어와 국가등을 선택하고 다음을 클릭 합니다.

Install Now를 클릭하여 설치를 진행합니다.

설치를 원하는 OS의 유형을 선택합니다. 저는 GUI가 필요하여 아래와 같이 Desktop Experience를 선택 하였습니다.

Windows Setup 화면에서 Custom을 선택 한 후 다음을 클릭합니다.

일반적인 경우라면 아래화면에서 OS 설치가 가능한 Disk가 확인 되지만 UCS B200 M3 Blade Server  경우 서버 자체
내장 디스크가 없기 때문에 외장 SAN 스토리지가 연결 되어 있고 해당 스토리지를 OS가 인식 할 수 있도록
스토리지를 연결 할 드라이버의 설치가 필요 합니다.

이에 아래 그럼에서 처럼 Load driver를 선택 합니다.

 

미리 다운 받아 놓은 시스코 드라이버 팩을 가상 디스크로 연결 하고 드라이버를 선택 합니다.
어떤 드라이버가 필요 한지는 사전에 미리 확인이 필요하나 UCS 블레이드의 경우 스토리지 연결을 위해서
Fnic이 필요하며 현재 UCS의 펌웨웨 버전에서는 Windows Server 2012R2까지만 호환이 되기 때문에
저의 경우 Windows server 2016을 설치 하기위해서 2012R2 용 드라이버를 선택 하였으니 참고 부탁 드립니다.

아래와 같이 스토리지 연결을 위한 fnic 드라이브를 선택 합니다.

그리고 다음을 누르면 아래 그럼처럼 "Windows can't be installed on~" 메시지가 나타나면 다시 Load Driver를
선택 한 후 KVM 화면에서 Virtual Media탭을 선택 한 후 설치 ISO가 연결 된 드라이브를 선택 합니다.

위 단계에서 스토리지 드라이버의 설치를 위해서 가상 디스크에 ISO의 연결을 해지하고 스토리지 드라이버를
인식 시켰기 때문에 드라이버의 인식이 완료 된 후 다시 OS 설치 파일을 연결 한 것입니다.

Windows Server 2016 ISO파일이 다시 연결 된 후 외장 SAN 스토리지로 OS가 설치 됨을 확인 할 수 있습니다.

OS의 설치가 완료 된 후 해당 서버로 로그온 하여 시스템 정보를 확인 해 보았습니다.

감사합니다.

[참고 자료]
Cisco UCS Virtual Interface Card Drivers Installation Guide

http://www.cisco.com/c/en/us/td/docs/unified_computing/ucs/os-install-guides/3-1/b_Cisco_VIC_Drivers_Installation_Guide/b_Cisco_VIC_Drivers_Installation_Guide_chapter_01.html

 

 

저작자 표시 비영리 변경 금지
신고

Comment 0

조직에서 WSUS를 이용 하고 있다면  WUinstall이라는 툴을 이용하면 Windows update를 좀더 편하게 할 수 있습니다.
해당 프로그램을 작업 스케줄로 등록하여 자동으로 업데이트 파일 다운로드 및 설치, 재 시작이 가능 하며 ,
psexec를 이용한다면
작업 스케줄 등록이 아니더라도 Remote 서버의 업데이트를 관리 서버 한 대에서 일괄적으로 진행 할 수 있습니다.

WUinstall 프로그램은 아래사이트에서 다운로드가 가능 한데 현재 제공하는 버전은 Free Trial 과 구매 버전 밖에 없습니다.
https://wuinstall.com/

최신 Free trial 버전의 경우 일정 기간이 지나면 무료 이용이 불가능 합니다만 구글링을 조금해서 약간 오래 된 
Wuinstall 1.x 버전을 구하신다면 옵션에 제약이 있긴 하지만 기본적으로 업데이트를 search, download, install,reboot 하는 것이
가능 하니 굳이 최신 버전이 필요하지 않다면 조금의 구글링으로 이전 버전을 다운로드 후 테스트 해 보시기 바랍니다.

예전에는 아래 그림 처럼 Free 버전과 Pro버전으로 제공 되었는데 이게  Free Trial 버전과 구매 버전으로 바뀐 것 같습니다.


Wuinstall을 이용해서 Windows update를 작업 스케줄에 등록하여 업데이트의 설치 및 재 시작을 하는 상세 방법은 아래와 같습니다.

먼저 Wuinstall을 다운로드 받아 적당한 곳에 압축을 풉니다. 그럼 아래 그림에서 처럼 Wuinstall.exe 파일과 관련 문서 폴더가 있습니다. 



Wuisntall.exe파일을 적당한 곳에 옮겨 놓고 작업 스케줄 등록을 위한 스크립으를 만듭니다. Wuinsall의 이용 방법은
다운로드 받은 폴더의 docs를 이용하시면 됩니다.

cmd /c c:\tools\wuinstall\WUInstall.exe /install /reboot 10 >> c:\tools\wuinstall\insall.log 2>>&1

위 커멘드를 update.cmd로 저장합니다.

작업 스케줄을 실행하고 작업 스케줄을 실행할 계정과 권한을 적용하고 작업 스케줄 이름을 입력합니다.
만약 로그파일을 로컬이 아닌 원격 서버의 공유 폴더에 저장하고 싶을 경우에는 system 계정이 아닌 별도
계정을 적용하시면 됩니다만 해당 계정이 반드시 작업 스케줄이 실행되는 서버의 local admin 그룹에 포함 되어 있어야
Windows update가 가능 하니 참고 하시기 바랍니다.

Action탭에서 위에서 만든 실행 할 스크립트를 선택후 적용합니다.

스크립트와 작업 스케줄에서 정상 등록하는지 실행을 해 봅니다.
이 부분은 주의가 필요한데 최소 스크립트를 만들 때 위 에서처럼 /install 옵션이 아닌 /search 옵션만
준다면 search만 하므로 테스트가 용이하니 참고 하십시오.

위 스크립트처럼 install까지 테스트가 필요하다면 반드시 테스트 환경에서^^


여튼 위 작업을 실행하게 되면 로그를 통해서를 wuinstall이 /insall과 /reboot 10 옵션으로 실행 된 것을 확인 할 수 
있습니다.

미리 적영 되어 있는 WSUS를 찾아서 자동으로 업데이트를 시작하고 업데이트의 설치가 완료되면 10초 후 시스템을
재 시작 합니다.



테스트가 잘 되었다면 Trigger를 통해서 점검과 같은 특정 시간에 예약 스케줄을 등록하고 업데이트를 진행하시면 됩니다.


참고로 작업 스케줄을 각 서버마다 등록하고 한대의 서버에서 파워셀로 해당 작업을 실행하는 커멘드를 실행하거나
혹은 Psexec를 이용해서 특정 서버에서 원격 서버의 Windowus update도 가능하니 자세한 내용은 메뉴얼을 참고 하시기 바랍니다.

고맙습니다.

[참고자료]
Wuinstall
https://wuinstall.com/

Automatically updating a new windows installation
https://www.experts-exchange.com/articles/6852/Automatically-updating-a-new-windows-installation-scripted.html


저작자 표시 비영리 변경 금지
신고

Comment 0

VMWare Host에서 운영 중인 Windows Server의 NMI를 이용한 Hang dump 수집 방법

Widows server를 운영 중 Hang 증상이 발생 할경우 원인 분석을 위해서 키보드 덤프나 NMI를 이용한 메모리 덤프를 수집 하는 경우가 종종 있습니다. Hyper-v Host나 물리 머신의 경우도 마찬가지이지만  
VMWare Host에서 운영 중인 Windows 가상머신에 hang이 발생 했을 때 NMI를 이용하여 Hang dump를 수집이 가능합니다.

자세한 방법은 아래 글을 참고 하시기 바랍니다.


먼저 NMI덤프를 수집하기 위해서는 레지스트리에 아래 첫번 째 그림과 같이 NMI 키 값이 등록 되어있어야 합니다.
Windows Server 2012부터는 별도의 키값 생성 없이 NMI덤프가 생성 가능 하므로 아래 키는 Windows server 2008R2와 그 이하 OS 버전에만 적용 하시면 됩니다. Windows Server 2012이상 버전의 NMI 관련 글은아래 블로그 참고.

Coming soon: How to generate a kernel or a complete memory dump file in Windows Server 2012 and Windows Server 2012 R2

https://blogs.technet.microsoft.com/yongrhee/2015/04/05/coming-soon-how-to-generate-a-kernel-or-a-complete-memory-dump-file-in-windows-server-2012-and-windows-server-2012-r2/


본격적으로 NMI 덤프 수집을 위한 세팅을 해보겠습니다.

먼저 덤프 수집필요한 대상 서버로 로그온 후 명령프롬프트에서 아래와 같이 커멘드를 입력하고 NMI 키를 생성합니다. 레지스트리 적용을 위해서는 시스템 재 시작 필요합니다.

NMI 덤프 설정 커멘드

do Reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl /v NMICrashDump /t REG_DWORD /d 1 /f



가상머신의 덤프 설정이 완료되면 해당 서버를 운영 중인 VM Host서버에 접속을 합니다. 접속 방법은 따로 설명 드리지 않겠습니다.^^
호스트 접속 후 /sbin 경로로 이동 후 vmdumper -l 커맨드를 이용해서 해당 VM명과 wid를 확인 합니다. 그리고 
vmdumper wid명 nmi를 입력 합니다. 예) vmdumper 1653269 nmi


시스템이 재 시작 된 후 덤프가 Windows에 폴더에서 방금 생성한 메모리 덤프를 확인 할 수 있습니다.



이벤트 로그도 참고 하시면 좋겠네요^^


수집 된 덤프를 분석 합니다.


[참고자료]

How to send NMI to Guest OS on ESXi 6.x (2149185)

https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2149185

 

Coming soon: How to generate a kernel or a complete memory dump file in Windows Server 2012 and Windows Server 2012 R2

https://blogs.technet.microsoft.com/yongrhee/2015/04/05/coming-soon-how-to-generate-a-kernel-or-a-complete-memory-dump-file-in-windows-server-2012-and-windows-server-2012-r2/


감사합니다.

저작자 표시 비영리 변경 금지
신고

Comment 0

리소소를 더~ 적게, 효율적으로 나~노(눠) 쓸수 있는 나노서버. 최근에 알게 된 나노서버가 나오게 된 배경은 

다음에 포스팅 하기로 하고 일단 나노 서버를 Nano Server Image Builder를 이용하여 설치 하는 방법을

먼저 포스팅 해봅니다.

 

[사전 요구 사항]
  1.     Nano Server Image Builder 이미지 빌더
  2.     Windows Server 2016 설치 ISO
  3.     Windows 10 ADK
  4.     Hyper-V on Windows 10

 

[Nano Server  가상 머신 만드는 방법]

먼저 Nano server image builder 아래 사이트에서 다운로드 설치 합니다.

https://www.microsoft.com/en-us/download/details.aspx?id=54065




설치가 완료 되면 아래와 같이  Nano Server Image Builder 실행 합니다


이미지 빌더 실행 만약 해당 머신에 Windows ADK가 설치 되어 있지 않다면 아래와같이

ADK를 설치 하라는 팝업이 뜹니다. OK를 누르고 ADK를 설치합니다


메시지에서 Deployment tools WinPE  필요 하다고 하였으니 선택 후 설치를진행합니다.


Windows 10 ADK 설치가 완료되면 다시 Nano Server Image Builder 실행하여 아래와 같은 화면에서
Create a new Nano Server image 클릭합니다.



마운트 Windows Server 2016 설치 ISO 선택합니다.


라이선스 동의를 체크하고 다음을 진행합니다


가상머신 생성 위치와 파일명을 입력합니다.

여기서 주의 할점이 저는 가상 머신 파일을 vhd.로 만들었기 때문에

추후 가상 머신은 1세대로만 만들 수 있습니다물론 vhdx로도 만들 수 있습니다.


다음을 클릭 하고 아래 화면에서 나노 서버 Edition 설치 Role이나 기능 선택합니다


추가로 설치 드라이버가 없기 때문에 다음을 클릭합니다


가상 머신 이름과 계정 정보를 입력합니다


도메인 조인을 하지 않을 것이기 때문에 다음을 클릭합니다.


필요에 따라 미리 네트워크 설정을 진행합니다


이제 거의 마지막 단계입니다.

Create basic nano server image 클릭합니다.


최종 확인 Create를 클릭합니다



PC의 경우 Disk SATA라 이미지를 생성하는데 약 3분정도 소요 되었습니다



이제 이미지 생성이 완료 되었습니다.

Hyper-v를 실행하고 앞서 나노 서버 vhd vhdx가 아닌 vhd로 생성 하였기 때문에1세대 가상 머신을 만들어서 부팅을 합니다.

가상 머신 생성 방법은 생략합니다.



감사합니다.


[참고 자료]

Introducing the Nano Server Image Builder

https://blogs.technet.microsoft.com/nanoserver/2016/10/15/introducing-the-nano-server-image-builder/

Download Nano Server Image Builder (1.0.78)

https://blogs.technet.microsoft.com/ausoemteam/2016/11/07/download-nano-server-image-builder-1-0-78/

저작자 표시 비영리 변경 금지
신고

Comment 0

인터넷이 안되는 환경의 서버에서 Livekd를 이용한 Full dump 수집 방법

인터넷이 안되는 환경의 서버에서 간혹 LiveKD를 이용해서 메모리 덤프 수집을 해야 하는 경우가 간혹 있는데 예전에는 해당 머신과
동일 빌드 버전의 OS를 인터넷  환경에 설치하거나 인터넷이 연결 된 동일 환경 OS에서 Windbg 설치 후 LiveKD를 이용하여 심볼을
다운 받고 그 심볼을 인터넷이 안되는 환경에 복사 후 Livekd를 이용하여 Full dump를 수집 하였습니다.
그런데 인터넷이 안되는 환경과 인터넷이 되는 환경의 같은 OS도 빌드 버전이 보안 업데이트 설치 여부에 따라 달라지는 경우가 많아
같은 OS의 심볼을 받아도 LiveKD가 실행 되지 않는 경우가 다반사 였습니다.

최근 서버에서 online 중에 덤프 수집이 필요하여 여러번 삽집을 하면서 keyboard 나 NMI 혹은 notmyfault로 덤프 수집을 해야 하나
고민하다가 우연찮게...블로그를 발견해서.. 얼마나 고맙든지.. (오래 됬는데 왜 이제서야 알게 되었을까요? ㅎㅎ)

Livekd를 이용한 덤프 수집 방법은 http://ryuchan.kr/145 에 오래 전에 정리 해 두었었는데... windbg 파일 다운로드 링크는 업데이트가
좀 필요 하네요^^

여튼 방법은 이렇습니다.

먼저 LiveKD를 이용해서 덤프를 수집 할 인터넷이 안되는 환경의 서버에서 Kernel32.exe, Ntdll.dll, ntoskrnl.exe 파일을 복사하여
인터넷이 되는 PC에 복사를 합니다.
아래 예에서는 인터넷이 되는 제 PC에 D:\Testsymbols\system32 폴더를 만들고 온라인 덤프 수집이 필요한 서버의 해당 파일을 복사
하였습니다.


제 PC에는 Windows debugging tool이 설치 되어 있고 Livekd 또한 미리 복사 되어 있기 때문에 명령 프롬프트를 실행 후 해당 폴더로
이동을 합니다. 그리고 아래와 같은 명령어를 입력 합니다.

symchk /if d:\testsymbols\system32\*.* /s srv*d:\testsymbols*http://msdl.microsoft.com/download/symbols

명령어를 실행 하면 아래와 같이 tessymbols 폴더에 3개의 .pdb 폴더가 다운로드 됩니다.

제 PC에 다운로드 된 3개의 *.pdb 폴더를 인터넷이 안되는 덤프 수집이 필요한 서버에 복사합니다.
해당 서버에도 미리 Windows debugging tool설치하고 Livekd를 복사 해 놓았기 때문에 c:\testsysmbols라는 폴더에 해당 파일을 복사 하였습니다.

해당 서버에서 명령프롬프트를 실행하여 Windows debugging tool이 설치 된 , Livekd가 복사 된 폴더로 이동하여 Livekd.exe를 실행합니다.

정상적으로 라이브 커널 디버깅이 연결 된 것이 확인 됩니다. 이제 full dump 수집을 위해서 아래 명령어를 실행하고 덤프가 수집 되는 것을 확인 합니다. 

덤프 수집이 완료되면 q 명령어로 kernel debugging 연결을 끊고 수집 된 덤프를 분석 합니다.

[참고 자료]
Online Kernel Memory Dump using LiveKd.exe
https://blogs.technet.microsoft.com/carlh/2009/11/30/online-kernel-memory-dump-using-livekd-exe/


저작자 표시 비영리 변경 금지
신고

Comment 0

Windows Server 2012R2 로 구성 된 클러스터 된 파일 서버에서 Nonpaged Pool 사용률이 비 정상적으로 높아
어떤 녀석이 많은 메모리를 사용 중인지 확인 하기 위해서 Livekd를 이용해서 라이브 디버깅을 해 보았습니다. 

[환 경]
 OS : Fail Over Cluster File Server on Windows Server 2012R2

[증 상]
 Nonpaged Paginng Pool의 메모리 사용률이 비 정상적으로 높앞으며 시스템 프로세스가 사용하는 핸들 수 도 2만이 
 넘었음.


[확인 사항]

  • 파일 서버 이기 때문에 오픈 된 파일이나 연결 된 사용자 사세션이 많은 지 확인 해 보았으나 연결 된 세션이 많지 않았음
  • 각 노드의 TCP 커넥션 수 확인

  

원인 분석을 위해서
Windows debugging tool 설치 후 해당 설치 디렉터리에 Livekd 를 복사한다.

  

디버깅을 위한 심볼 Fix를 위해서

파일 서버에서 MS 심볼 서버로 접근 할 수 없기 때문에 로컬 컴퓨터(Windows 8.1)에서 widbg를 실행 후 덤프를 하나 열고
심볼을 받아서 해당 심볼 중 아래 두 폴더를 라이브 디브깅을 할 폴더로 복사한다.
 



분석을 진행 할 서버에서 명령 프롬프트를 이용해서 Windows debugging 폴더로 이동하여
Livekd -y c:\symbols 

명령어 입력 후
정상적으로 로컬 디비깅이 실행 되면 리소스 확인에 필요한 커멘드를 이용해서 리소스 사용률 확인
   

0: kd> !vm 4

*** Virtual Memory Usage ***

Physical Memory: 6288149 ( 25152596 Kb)
Page File: \??\C:\pagefile.sys
Current: 26214400 Kb Free Space: 25872832 Kb
Minimum: 26214400 Kb Maximum: 75497472 Kb
unable to get nt!MmSystemLockPagesCount
Error reading free nonpaged PTEs 0000000000000004
Available Pages: 1703176 ( 6812704 Kb)
ResAvail Pages: 2875193 ( 11500772 Kb)
Locked IO Pages: 0 ( 0 Kb)
Free System PTEs: 59377 ( 237508 Kb)
Free NP PTEs: 0 ( 0 Kb)
Modified Pages: 8080 ( 32320 Kb)
Modified PF Pages: 8089 ( 32356 Kb)
NonPagedPool 0 Used: 1455190 ( 5820760 Kb)
NonPagedPool 1 Used: 1651617 ( 6606468 Kb)
NonPagedPool Usage: 3250905 ( 13003620 Kb)
NonPagedPool Max: 4294967296 (17179869184 Kb)
PagedPool 0 Usage: 147291 ( 589164 Kb)
PagedPool 1 Usage: 42232 ( 168928 Kb)
PagedPool 2 Usage: 35308 ( 141232 Kb)
PagedPool Usage: 224831 ( 899324 Kb)
PagedPool Maximum: 4160749568 (16642998272 Kb)
Shared Commit: 348374 ( 1393496 Kb)
Special Pool: 0 ( 0 Kb)
Shared Process: 11828 ( 47312 Kb)
PagedPool Commit: 224941 ( 899764 Kb)
Driver Commit: 55834583195 (223338332780 Kb)
Committed pages: 4696802 ( 18787208 Kb)
Commit limit: 12841749 ( 51366996 Kb)

Nopaged Pool을 가장 많이 사용하는 top5 Pool tag 확인 

0: kd> !poolused /t5 2

Sorting by NonPaged Pool Consumed
Pool Used:
NonPaged Paged

Tag Allocs Used Allocs Used

MPP. 49781288 10354777664 0 0 UNKNOWN pooltag ' MPP', please update pooltag.txt
VoSm 3689 240181440 0 0 Bitmap allocations , Binary: volsnap.sys
Mdl 81341 170719024 0 0 Io, Mdls
ConT 387 140668928 0 0 UNKNOWN pooltag 'ConT', please update pooltag.txt
Cont 1112 106383968 0 0 Contiguous physical memory allocations for device dr
TOTAL 51007260 11496509728 604302 758159552


MPP 풀태그를 사용하는 시스템 드라이버 확인
   

C:\Windows\System32\drivers>findstr /l /m MPP *.sys

afd.sys
ClusDisk.sys
CsvFlt.sys
CsvFs.sys
ds4dsm.sys
ds4utm.sys
dxgkrnl.sys
FWPKCLNT.SYS
http.sys
mup.sys
ndis.sys
ndiswan.sys
pacer.sys
rassstp.sys
sdstor.sys
SerCx.sys... 등등


대부 분 MS에서 제공하는 드라이브 이나 Ds4dsm.sys와 Ds4utm.sys만 IBM 에서 제공한 모듈로 해당 모듈의 최신 버전 확인 필요
추가로 서치를 좀 해보니 해당 모듈에서 메모리 릭이 발생 한 사례가 있네요.

http://www-01.ibm.com/support/docview.wss?uid=ssg1S1005069


[참고자료]

http://ryuchan.kr/145

http://ryuchan.kr/344

http://blogs.technet.com/b/askperf/archive/2011/09/23/getting-to-know-the-mmst-pool-tag.aspx

https://windowsarchitecture.wordpress.com/2015/01/12/windows-2012-r2-poolmon/

   

   

   

  

신고

Comment 0