Skip to content
jinlmsft edited this page Mar 3, 2016 · 19 revisions

This document describes the basics on Prajna deployment.

Introduction

Machine provision, deployment, and launch the client

The essential of Prajna deployment to a cluster (or just a set of machines) is to copy and launch the Prajna client to each properly provisioned machine.

A Prajna client is going to use

  • a port for accepting job requests
  • a range of ports for jobs

So the most basic requirement for a machine is to open these ports. Thereafter, the Prajna client can be launched using these ports. Of course, these machines need to be accessible from the machine where user runs Prajna applications.

The client is called "PrajnaClient.exe"

  • For user of the Nuget package, when the Prajna package is installed, the client and its dependencies are located in subfolder "tools\Client"
  • For user of the GitHub source code, after the source tree is built, the client and its dependencies are located in subfolder "bin\ReleaseX64\Client" or "bin\DebugX64\Client"

To launch the client, use the following arguments:

-port 1005 -jobports 1250-1300

An extra argument can be provided if request authentication is desired:

-pwd somepasswd

Depending on the environment and user preference, the way to provision, deploy, and launch the client can vary. A section below shows an example of using powershell scripts to deploy to a set of domain joined Windows machines.

Cluster List File

Once the client is deployed to a set of machines. User needs to construct a cluster list file that the Prajna application will use.

It is a plain-text file with an ".lst" extension. An example looks like

MyCluster,1005
Machine0
Machine1
Machine2

The first line specifies "ClusterName,Port,Password". ClusterName is a unique identifier of the cluster that the runtime will use. Port is what specified by "-job" argument during client launch. If the client is launched with a "-pwd" argument, please also specify the password, thus the first line becomes

MyCluster,1005,somepasswd

Because currently Prajna uses ClusterName as an identifier and caches cluster's information, when the nodes (or its port) in the cluster changes, please make sure to use a different ClusterName. Otherwise, some strange behavior may happen.

Prajna may use a cluster each different port used by each node. In such a case, the cluster file became:

MyCluster,1005
Machine0,port0
Machine1,port1
Machine2,port2

Prajna may also use a cluster with multiple daemon run on each node. This is typically used for situation when there are multiple physical resources on one node. For example, in a GPU cluster, a physical machine may have multiple GPUs, a Prajna daemon can be started for each GPU.

Verify the deployment

Use a tool called PrajnaClusterStatus.exe

  • For user of the Nuget package, it is located in subfolder "tools\ClusterStatus"
  • For user of the GitHub source code, after the source tree is built, it is located in subfolder "bin\ReleaseX64\ClusterStatus" or "bin\DebugX64\ClusterStatus"

If the tool is able to show the disk usages etc on the target machines, it means the deployment is successful.

Use the Cluster

Prajna applications can construct the cluster object by supplying the path to this list file (with C#):

var cluster = new Cluster(pathToLstFile);

Deployment to Windows Cluster

This section describes how to use provided Powershell scripts to deploy and launch the Prajna client on a cluster of windows domain-joined machines.

Scripts

  • For user of the Nuget package, the scripts are located in "tools\Scripts\WindowsDomainCluster"
  • For user of the GitHub source code, the scripts are located at "scripts\WindowsDomainCluster"

Prerequisites

For all target machines

  1. User needs to have a credential with admin privilege
  2. PowerShell remote execution is enabled
  3. The ports that will be used by the client are opened

The scripts like "Deploy-Clients.ps1" assumes user has the same credential for all target machines, and uses the same ports and the same deployment location for all machines.

Deployment

In PowerShell, cd to the folder where the scripts locate, and invoke "Deploy-Clients.ps1"

PS>  .\Deploy-Clients.ps1 -ComputerNames @("Machine1", "Machine2", "Machine3") -SourceLocation ..\..\Client -ClientLocation C:\Deployment\PrajnaClient -Port 1005 -JobPortRange 1250-1299
  • -ComputerNames specifies an array of target machines
  • -SourceLocation specifies the absolute or relative path to the folder that contains the client
  • -ClientLocation specifies the path to put the client on target machines
  • -Port specifies the port for the client to accept job requests
  • -JobPortRange specifies the range of ports to be used by the client

To enable authentication, add an extra "-Password" parameter to pass in a string of desired password.

If an explict credential is required for executing powershell command on remote machines,

PS> $Cred = Get-Credential

It will prompt a dialog for input the credential. Here also assumes that the credential is the same for all remote machines. Then

PS> .\Deploy-Clients.ps1 -ComputerNames @("Machine1", "Machine2", "Machine3") -SourceLocation ..\..\Client -ClientLocation C:\Deployment\PrajnaClient -Port 1005 -JobPortRange 1250-1299 -Cred $Cred

Once the deployment is done, user can construct a Cluster List File, verify the deployment, and construct a cluster object in code by referencing the cluster list file.

Other scripts

  • Start-Clients.ps1 : start clients on machines by specify the location of the clients on the machines, for example
PS> .\Start-Clients.ps1 -ComputerNames @("Machine1", "Machine2", "Machine3") -ClientLocation C:\Deployment\PrajnaClient -Port 1005 -JobPortRange 1250-1299 -ShutdownRunningClients $true
  • Stop-Clients.ps1: stop clients on machines by specify the location of the clients on the machines
PS> .\Stop-Clients.ps1 -ComputerNames @("Machine1", "Machine2", "Machine3") -ClientLocation C:\Deployment\PrajnaClient
  • Start-Client.ps1 : start the client on a single machine
  • Stop-Client.ps1: stop the client on a single machine