Automating 3PAR Upgrades

Some of the ground work you have to do when planning a 3PAR upgrade can be quite time consuming, so I have been looking at ways to automate the process and make it quicker. Today’s post focuses on using scripts to speed things up.  This will form part of a series on upgrades so don’t forget to connect with me on LinkedIn and Twitter to ensure you don’t miss any posts.

 

Check multipath policy

As a pre-upgrade step you will need to check that all Windows 2008 hosts using the MS MPIO driver have their multipath policy set to round robin. I used a script to make this step quicker.

The script uses Psexec to connect to a list of hosts and run mpclaim –s –d from the command line to check the current multipath policy. You can download Psexec from here .

The steps to check the host multipathing on multiple hosts via a single script are as follows:

1 Choose the server you want to run the script from and create a folder on it called C:scripts. Copy psexec to this folder

2 In C:scripts create a file called 3par_servers.txt Populate this with a list of the servers you wish to check for multipath configuration

3 Also in C:scripts create a batch file called mpclaim.bat and enter the following command line into it:

mpclaim -s -d

4 Finally, open a command line on the machine from which you wish to run the script, change directory to C:scripts and then enter

psexec -c -f @C:scripts3par_servers.txt C:scriptsmpclaim.bat

5 You should then see the window populate with the information you require. An example of the output is below:

PsExec v1.71 - Execute processes remotely
Copyright (C) 2001-2006 Mark Russinovich
Sysinternals - www.sysinternals.com
\Server1
C:Windowssystem32>mpclaim -s -d
For more information about a particular disk, use 'mpclaim -s -d #' where # is the MPIO disk number.
MPIO Disk    System Disk  LB Policy    DSM Name
-------------------------------------------------------------------------------
MPIO Disk4   Disk 5       RR           Microsoft DSM
MPIO Disk3   Disk 4       RR           Microsoft DSM
MPIO Disk2   Disk 3       RR           Microsoft DSM
MPIO Disk1   Disk 2       RR           Microsoft DSM
MPIO Disk0   Disk 1       RR           Microsoft DSM

 

Check LB policy appears as RR for all volumes.

 

Compatibility Check

Before you upgrade your 3PAR system you need to check the compatibility of all the components in the SAN, this can be time consuming particularly in a large environment. One component that can be particularly lengthy is gathering information on all the attached hosts.  In order to make gathering the host information as easy as possible in conjunction with my colleague  Rafal Kozaczek we have taken a PowerShell script (SystemInfo_(Excel).ps1) written by Amol Patil and modified it so that all the host information required to check host compatibility is gathered automatically for Windows servers.

I have included the modified version of the script at the end of this post. As ever you are welcome to use the script, but please check it is suitable for use in your environment and you do so entirely at your own risk.

You will need to run the script from a workstation with PowerShell and Excel installed.

1 Copy the PowerShell script found at the bottom of this post into Notepad and then save as 3PAR_Hosts.ps1 to the location C:scripts on the machine you wish to run the script from

 

2 Open PowerShell as an administrator and change directory to c:scripts

cd c:scripts

3 Choose to run the script you just saved

3PAR_Hosts.ps1

1 powershell select

4 Select option 1 to run the script against a list of hosts in a text file.  When prompted enter the host list you created earlier 3par_servers.txt

The resulting spreadsheet will deliver all the information you need to complete the host checks. Columns A – I are the ones you will need, the other info was already pulled by the original script so I just left it in there.

2 excel

The PowerShell code is in full below.  You are free to use it but you do so entirely at your own risk, please also take the time to read through it before you run it so you fully understand what it does.

[code language="powershell"]
 #@=============================================
 #@ FileName: SystemInfo_(Excel).ps1
 #@=============================================
 #@ Script Name: SystemInfo_(Excel)
 #@ Created: [DATE_DMY] 20/03/2013
 #@ Author: Amol Patil
 #@ Email: [email protected]
 #@ Edited by 3ParDude (Richard Arnold) / Rafal Kozaczek to gather host information for 3PAR upgrade. http://3ParDude.com
 #@ Web:
 #@ Requirements:
 #@ OS:
 #@ Keywords:
 #@ Version History:
 #@=============================================
 #@ Purpose:
 #@ To collect System Information local/remote
 #@
 #@=============================================

#@================Code Start===================

# ==============================================================================================
 # Function SysInfo - collects information using WMI and places results in Excel Sheet
 # ==============================================================================================
 Function SysInfo {

foreach ($StrComputer in $colComputers){

$GenItems1 = gwmi Win32_ComputerSystem -Comp $StrComputer
 $GenItems2 = gwmi Win32_OperatingSystem -Comp $StrComputer
 $SysItems3 = gwmi Win32_WmiSetting -Comp $StrComputer
 $MemItems1 = gwmi Win32_PhysicalMemory -Comp $StrComputer
 $MemItems2 = gwmi -class MSFC_FCAdapterHBAAttributes -Comp $StrComputer -Namespace "rootWMI"
 $MemItems3 = Invoke-Command -ComputerName $StrComputer -ScriptBlock {(Get-Command c:windowssystem32driversmpio.sys).FileVersionInfo}
 $NetItems = gwmi Win32_NetworkAdapterConfiguration -Comp $StrComputer  | where{$_.IPEnabled -eq "True" -and $_.DNSHostName -ne $NULL}

# Populate General Sheet(1) with information

foreach ($objItem in $GenItems1){

#$Sheet1.Cells.Item($intRow, 1) = $StrComputer
 $Sheet1.Cells.Item($intRow, 1) = $objItem.Name
 $Sheet1.Cells.Item($intRow, 15) = $objItem.Domain
 $Sheet1.Cells.Item($intRow, 2) = $objItem.Manufacturer
 $Sheet1.Cells.Item($intRow, 3) = $objItem.Model
 $Sheet1.Cells.Item($intRow, 16) = $objItem.SystemType
 $Sheet1.Cells.Item($intRow, 10) = $objItem.TotalPhysicalMemory / 1024 / 1024

}

foreach ($objItem in $GenItems2){

$Sheet1.Cells.Item($intRow, 4) = $objItem.Caption
 $Sheet1.Cells.Item($intRow, 11) = $objItem.BuildNumber
 $Sheet1.Cells.Item($intRow, 5) = $objItem.CSDVersion
 $Sheet1.Cells.Item($intRow, 9) = $objItem.Version
 $Sheet1.Cells.Item($intRow, 12) = $objItem.OSArchitecture

}
 foreach ($objItem in $NetItems){

$Sheet1.Cells.Item($intRowNet, 13) = $objItem.IPAddress

}

foreach ($objItem in $MemItems2){

$Sheet1.Cells.Item($intRow, 6) = $objItem.Model
 $Sheet1.Cells.Item($intRow, 7) = $objItem.DriverVersion
 $Sheet1.Cells.Item($intRow, 8) = $objItem.FirmwareVersion

}

foreach ($objItem in $MemItems3){

$Sheet1.Cells.Item($intRow, 14) = $objItem.ProductVersion

}

$intRow = $intRow + 1
 $intRowNet = $intRowNet + 1

}

}

#@=============================================

# ========================================================================

# Function Name 'HostList' - Enumerates Computer Names in a text file

# Create a text file and enter the names of each computer. One computer

# name per line. Supply the path to the text file when prompted.

# ========================================================================

Function HostList {
 $strText = Read-Host "Enter the path for the text file"
 $colComputers = Get-Content $strText
 }

# ========================================================================

# Function Name 'Host' - Enumerates Computer from user input

# ========================================================================

Function Host {

$colComputers = Read-Host "Enter Computer Name or IP"

}
 # ========================================================================

# Function Name 'LocalHost' - Enumerates Computer from user input

# ========================================================================

Function LocalHost {

$colComputers = $env:computername

}

#@=================================================================================================================================
 #Gather info from user input.

Write-Host "********************************"               -ForegroundColor Green
 Write-Host "System Information Inventory"                   -ForegroundColor Green
 Write-Host "by: Amol Patil "                                -ForegroundColor Green
 Write-Host "********************************"               -ForegroundColor Green
 Write-Host " "

Write-Host "Which computer resources would you like in the report?"   -ForegroundColor Green

$strResponse = Read-Host "
 [1] Computer Names from a File.
 [2] Enter a Computer Name manually.
 ------OR------
 [3] Local Computer.

"

If($strResponse -eq "1"){. HostList}
 elseif($strResponse -eq "2"){. Host}
 elseif($strResponse -eq "3"){. LocalHost}
 else{Write-Host "You did not supply a correct response, `

Please run script again." -foregroundColor Red}

Write-Progress -Activity "Getting Inventory" -status "Running..." -id 1
 #@=================================================================================================================================

#New Excel Application

$Excel = New-Object -Com Excel.Application

$Excel.visible = $True

# Create 2 worksheets

$Excel = $Excel.Workbooks.Add()

# Assign each worksheet to a variable and

# name the worksheet.

$Sheet1 = $Excel.Worksheets.Item(1)

$Sheet2 = $Excel.WorkSheets.Item(2)

$Sheet1.Name = "SysInfo"

$Sheet2.Name = "Software"

#Create Heading for General Sheet

$Sheet1.Cells.Item(1,1) = "Host Name"
 $Sheet1.Cells.Item(1,2) = "Manufacturer"
 $Sheet1.Cells.Item(1,3) = "Server Model"
 $Sheet1.Cells.Item(1,4) = "Operating_System"
 $Sheet1.Cells.Item(1,5) = "ServicePack"
 $Sheet1.Cells.Item(1,6) = "HBA-Model"
 $Sheet1.Cells.Item(1,7) = "HBA-DriverVersion"
 $Sheet1.Cells.Item(1,8) = "HBA-FirmwareVersion"
 $Sheet1.Cells.Item(1,9) = "MS MPIO Version"
 $Sheet1.Cells.Item(1,10) = "Memory"
 $Sheet1.Cells.Item(1,11) = "BuildNumber"
 $Sheet1.Cells.Item(1,12) = "OSArchitecture"
 $Sheet1.Cells.Item(1,13) = "IPAddress"
 $Sheet1.Cells.Item(1,14) = "ProductVersion"
 $Sheet1.Cells.Item(1,15) = "Domain"
 $Sheet1.Cells.Item(1,16) = "SystemType"

$colSheets = ($Sheet1, $Sheet2)

foreach ($colorItem in $colSheets){

$intRow = 2

$intRowDisk = 2

$intRowSoft = 2

$intRowNet = 2

$WorkBook = $colorItem.UsedRange

$WorkBook.Interior.ColorIndex = 40

$WorkBook.Font.ColorIndex = 11

$WorkBook.Font.Bold = $True

}

If($credResponse -eq "y"){SysInfoCrd}

Else{SysInfo}

#Auto Fit all sheets in the Workbook

foreach ($colorItem in $colSheets){

$WorkBook = $colorItem.UsedRange

$WorkBook.EntireColumn.AutoFit()

#clear

}

Write-Host "@*******************************@" -ForegroundColor Green

Write-Host "The Report has been completed."  -ForeGroundColor Green

Write-Host "@*******************************@" -ForegroundColor Green

#@================Code End=====================
 [/code]

If you have found a way to speed up the process that you use, please let us all know in the comments.

 

Threshold Alerts

Threshold Alerts is one of my favourite new features in SSMC and allows alerts to be configured based on defined metrics. These alerts can be defined against logical components such as virtual volumes or physical components such as disks. An alert is triggered when a defined threshold is exceeded, for example you may choose to alert when ports are over 75% busy. Threshold Alerts are integrated with the service processer and will trigger an e-mail being sent. You will see triggered alerts within SSMC from the dashboard view, the below screenshot shows 2 systems with no active alerts if an alert was triggered the donut would turn yellow.

1a alert dashboard

To make setting up Threshold Alerts easier they can be configured through pre-defined templates. Different templates exist for different components and each one can be customised as required. To use threshold alerts the system must be licenced for System Reporter.

To configure a Threshold Alert you need to complete the following steps within SSMC:

1 Select from the Main Menu Threshold Alerts

1 Threshold menu

2 Select the Create threshold alert button

2a create threshold alert

3 In the general section select the system and choose the alert template. Below shows an example of the alerts types you can work with they include ports, disks, nodes plus logical objects such as VV’s and priority optimization.

2 Alert template objects

You will also need to choose the alerting level resolution which is how often the data will be sampled to see if the alert has been triggered. Remember choosing a higher resolution may result in more alerts being generated when there are spikes, to ensure the alert condition is sustained choose a longer sample time. Choose the severity you would like to associate with the alert you are configuring.

3 general

4 In the objects section you can filter against which objects alerts are generated. If for example you only want to monitor certain ports or VV’s this is where you can narrow them down by selecting filter by objects radio button and then clicking add objects button.

4 objects

The screenshot below show an example of objects you can filter on when creating a port alert.

5 add object

5 Finally chose the metric you wish to measure on.

5a metrics

The following screenshot is again for the port objects, you can chose to measure on metrics such as % busy, bandwidth and service time.

6 add metrics

 

Metrics can be combined so that multiple conditions must be met. For example the following alert will only trigger if service time is over 40ms and IOPs are greater than 1000.

7 combine metrics

Up to 64 alerts can be configured and it’s worth noting the alert will be centrally monitored by HP and could trigger support cases. Alerts can also be configured via the CLI using the command createsralertcrit, more on this another time.

If you missed any of my other posts introducing SSMC don’t forget to check them out:

SSMC 2.1 – What’s new?

Installing 3PAR SSMC

The SSMC Administrator Console

Newbies Guide to The 3PAR SSMC

 

Installing 3PAR SSMC

The 3PAR SSMC (StoreServ Management Console) is now the go to management tool for 3PAR systems.  In this how to guide we will be covering how to download and install the 3PAR StoreServ Management Console. If you are working with an older system running 3PAR OS 3.1.3 you will need to use the 3PAR Management Console.  Be sure to checkout my post on installing the 3PAR Management Console to get up and running.

StoreServ Management Console Requirements

As above first assure your system is running 3PAR OS 3.1.3 or above. SSMC is a web based console which requires you to install the SSMC server on either a Linux or Windows based server. This post will deal with the procedure to get SSMC installed on a Windows server.

First ensure your SSMC server meets the following requirements taken from the HPE SSMC release notes 3.1.

Supported host platforms

Supported browsers

  • Microsoft Internet Explorer
  • Microsoft Edge
  • Google Chrome
  • Mozilla Firefox

The minimum physical requirements
• Two logical processors
• 4 GB RAM
• 2 GB free disk space
• Supported 64-bit operating system

Whilst the above is the minimum recommended specs for installation.  The table below shows the recommended specs depending on the scale of your 3PAR infrastructure.

Table showing specifications for different sized 3PAR estates

Port 8443 on the SSMC server must be open to inbound connections.

SSMC Install

Before you begin you will need to download SSMC from the 3PAR Software Depot

1 Double click the setup file to begin

SSMC Install Welcome Screen

2 Read through the introduction and click next

Introduction screen

3 Agree to the license agreement

Accepting the HPE license agreement

4a If you are upgrading from a previous version of SSMC, a box will pop up advising that a previous version was detected just click OK. If you are not upgrading skip to step 7.

detected existing version requesting upgrade

4b You will then see a screen informing you the old version is being removed

removing old version

4c Next you are given the option to use existing SSMC data which preserves the connections to existing systems. If you are upgrading move to step 7, for a fresh install read on.

confirming using existng ssmc data

5 If you are not upgrading next you will select the install location. Just leave it at default unless you have reason to change it and choose next

Confirming installation folder

6 The default port is 8443, leave it at this unless you have a specific reason to change it

Setting access port to 8443

7 You will see a summary screen of your options just click install

Pre-installation screen showing settings selected

8 You will then see a screen reminding you that inbound connections to port 8443 need to be open

Port 8443 warning

Finally you will see the install summary screen followed by the install complete screen

Next you will need to add your 3PAR systems to SSMC. I have covered this in my SSMC Administrator Console post.

If you wish to install any of the other 3PAR management tools check out these related posts:

Installing The 3PAR Management Console

Installing The 3PAR CLI

Finally you can read more about the SSMC install process and more in the HPE 3PAR StoreServ Management Console Administrator Guide