Deploying in Microsoft Azure
Introduction
Running ScaleOut StateServer in a Microsoft Azure environment allows for the creation of highly-scalable in-memory data grids and takes full advantage of cloud environment benefits such as minimal IT overhead, zero upfront hardware costs, and on-demand scaling. Usage of ScaleOut StateServer in Microsoft Microsoft Azure uses subscription-based licensing and requires a purchase of a valid ScaleOut StateServer license.
Terminology
The following terms defined by Microsoft Azure are used in this help file and defined here for your convenience:
Microsoft Azure Portal: The secure Web portal that allows users to manage their Microsoft Azure resources. It provides a graphical user interface (GUI) and command-line experience.
Azure Subscription: A logical unit of Azure services that are linked to an Azure account. It is used to manage various technical resources, billing, and access control.
Resource Group: A logical container within Microsoft Azure that allows you to group related resources together, like virtual machines, virtual networks, storage accounts, application services, etc. By managing them as a single unit, it makes them easier to deploy, update, and delete them together based on their lifecycle and security needs.
Virtual Machine Scale Set (VMSS): A Microsoft Azure service that allows you to create and manage groups of virtual machines (VMs). VMSS can automatically scale the number of VMs up or down based on demand, rules or a schedule. ScaleOut StateServer is deployed as a set of VMs in a VMSS.
Proximity Placement Group: A logical grouping of Azure compute resources that are physically colocated in the same data center. Placement groups are used to reduce network latency between resources.
Azure Virtual Network (VNet): A cloud service that allows users to create and manage private networks. A virtual network is a logical isolation of the Azure cloud that is dedicated to your subscription.
Azure Network Security Group (NSG): A security group that contains a list of security rules that allow or deny inbound or outbound network traffic to resources connected to Azure Virtual Network.
Public IP Prefix: A range of contiguous public IP addresses that can be used to assign public IP addresses to Azure resources.
Accelerated Networking: A feature that improves the networking performance of virtual machines.
Azure CLI: The Azure command-line interface (Azure CLI) is a set of commands used to create and manage Azure resources.
Prerequisites
- Azure subscription
To deploy ScaleOut StateServer (SOSS) in a Microsoft Microsoft Azure environment, begin by visiting https://azure.microsoft.com/ and signing up for a Microsoft Azure subscription.
- Azure CLI
ScaleOut StateServer is deployed to Azure as a set of virtual machines running as a VMSS resource. It can be deployed from a local on-premises computer. This machine needs to have Azure CLI installed. You can install the Azure CLI on Linux, macOS, or Windows computers. For downloading and installing Azure CLI, please visit the How to install the Azure CLI page.
- PowerShell 5.1
The ScaleOut StateServer deployment script requires PowerShell 5.1 or later. PowerShell 5.1 is included with Windows 10 and Windows Server 2016. For other operating systems, you can download and install PowerShell 5.1 from the PowerShell 5.1 download page.
- Required Azure Permissions
To deploy a StateServer cluster to Azure, you need access to all operations on the Microsoft.Resources/deployments resource type and the write access on the following deployed resources:
Microsoft.Resources/deployments/*
Microsoft.Network/virtualNetworks/write
Microsoft.Network/virtualNetworks/subnets/write
Microsoft.Network/networkSecurityGroups/write
Microsoft.Compute/virtualMachineScaleSets/write
Microsoft.Storage/storageAccounts/write
Microsoft.Compute/proximityPlacementGroups/write
For a list of roles and permissions, see Azure built-in roles.
Deployment
The deployment package consists of two sets of files, local and remote. The local files are used by the administrators or DevOps engineers to deploy and manage ScaleOut clusters in their Azure subscription from a local on-premises machine. These files are located in the ScaleOut StateServer installation directory under the “Cloud/Azure” subfolder. You can also download them as a separate zip package from the ScaleOut Software’s website here. The remote files are used by the Azure cloud deployment process and are hosted by ScaleOut Software with public read access permissions.
Local files:
soss_deployment_arm_template.json
soss_deployment_arm_template.parameters.json
DeploySOSSAz.ps1
RemoveSOSSAz.ps1
UpgradeSOSSAz.ps1
Remote files:
CreateVMSS.json
SetUpRBAC.json
ConfigureScaleSetInstance.ps1
SOSS MSI installer
Azure Watchdog MSI installer
Deployment Parameters
The following table lists all deployment-related parameters that can be set in the soss_deployment.parameters.json file:
Parameter Name |
Type |
Description |
Default Value |
Required? |
resourceGroup |
string |
The name of the Azure resource group where the ScaleOut StateServer store will be deployed together with other resources, such as virtual network, security group, etc. |
SOSS-RG |
No |
location |
string |
Region in Azure where a new ScaleOut StateServer store needs to be deployed. |
(for example, WestUS) |
Yes |
deploymentName |
string |
A short deployment name, e.g. TestDeployment, SOSSStore, etc. |
SOSSStore |
No |
virtualNetworkName |
string |
Name of the virtual network to be used by ScaleOut StateServer store. If it does not exist in the specified Azure resource group, it will be created with the specified default value. |
SOSS-VNet |
No |
virtualNetworkAddress |
string |
Virtual Network address range. If empty, default value is 10.10.0.0/16. |
10.10.0.0/16 |
No |
clientAppSubnet |
string |
The CIDR notation of the client subnet where the client App Service code can be running in. |
10.10.1.0/24 |
No |
deploymentSubnet |
string |
The CIDR notation of a new subnet where the SOSS VM instances will be running. |
10.10.2.0/16 |
No |
networkSecurityGroupName |
string |
The name of Azure security group to manage access rules for SOSS-related resources. If it does not exist, it will be created with the default name SOSS-NSG. |
SOSS-NSG |
No |
vmSize |
string |
The size of the ScaleOut StateServer VM instance to create. If not specified, the Standard_D4as_v5 size will be used. |
Standard_D4as_v5 |
No |
numberOfSOSSInstances |
int |
The number of ScaleOut StateServer VM instances in the cluster’s scale set. |
2 |
No |
useProximityPlacementGroup |
bool |
Indicates whether to use Proximity Placement Group for ScaleOut VM scale set. |
true |
No |
adminUsername |
string |
The admin-level user’s name for each scale set VM instance that runs SOSS service. |
sossadmin |
No |
adminPassword |
string |
The password for the admin-level user account for each scale set VM instance that runs SOSS service. |
Yes |
|
publicIPUsage |
string enum |
Specifies whether ScaleSet VM instances should utilize public IPs and, if so, how to allocate them. Allowed values: DoNotUse, AllocateNew, AllocateFromPIPPrefix. |
AllocateNew |
No |
PIPPrefixName |
string |
The name of existing Public IP Prefix (PIP) resource. It is only required when the PublicIPUsage value is set to AllocateFromPIPPrefix. |
MyPIPPrefix |
No |
usePrivateGateway |
bool |
if set to true (recommended), ScaleOut StateServer will be configured to use private IPs for hosts gateways. To use public IPs for gateways, it needs to be set to false and publicIPUsage parameter should also be set to AllocateNew or AllocateFromPIPPrefix. |
true |
No |
artifactsPublicUrl |
string |
The public URL for the location where remote deployment files are hosted (linked ARM templates, SOSS installer and VM start-up script). Set to “” for customized deployment scenario when all remote deployment files are hosted in a customer’s environment. |
https://www. scaleoutsoftware.com/ pkg/azure_artifacts |
No |
sossInstallerFileName |
string |
The name of the SOSS installer file to deploy. |
soss_setup64.msi |
No |
sossLicenseKey |
string |
The license key for ScaleOut StateServer instances in the corresponding scale set. |
Yes |
|
sossPorts |
string |
The range of TCP ports to be used by SOSS (e.g. 720-724). |
720-724 |
No |
enableAcceleratedNetworking |
bool |
If set to true (default), improves the networking performance by allowing network traffic to bypass the host, which reduces latency and CPU usage. |
true |
No |
installLatestSOSSVersion |
bool |
If set to true (default), the script will download and install the latest version of StateServer from scaleoutsoftware.com. |
true |
No |
priorityOrderForNSGRules |
int |
The priority order level for SOSS deployment-related security rules, e.g. 200, or 300, etc. |
200 |
No |
artifactsResourceGroup |
string |
Only for advanced customized deployments The name of the Azure resource group where deployment artifacts storage account is located. All remote deployment files should be hosted in a customer’s Azure environment. |
“” |
No |
artifactsStorageAccountName |
string |
Only for advanced customized deployments The name of the Azure storage account where deployment artifacts are located. |
“” |
No |
artifactsContainerName |
string |
Only for advanced customized deployments The name of the Azure BLOB container where remote deployment files (SOSS installer, the startup script, ARM templates) are located. |
“” |
No |
deploymentUniqueId |
string |
A unique deployment identifier to combine all deployment-related resources together. |
utcNow(‘yyyy-MM-dd’) |
No |
Deploying a new ScaleOut cluster
Open a command prompt window and set the current directory to the location where ScaleOut StateServer deployment files are located.
Set desired values for all deployment-related parameters in the soss_deployment.parameters.json configuration file.
Run the powershell script file DeploySOSSAz.ps1. The script file has no parameters, but it uses many deployment configuration parameters from the soss_deployment.parameters.json file.
Example:
[path to folder]/>.\DeploySOSSAz.ps1
Upgrading an existing ScaleOut cluster
Open a command prompt window and set the current directory to the location where ScaleOut StateServer deployment files are located.
Run the powershell script file UpgradeSOSSAz.ps1. The script file has 1 optional parameter:
The flag that indicates whether to download and install the latest version of StateServer. If set to “true”, the script will download and install the latest version of SOSS from scaleoutsoftware.com. Otherwise, the target SOSS installer will be obtained either from the public URL or the Azure storage account specified in the soss_deployment.parameters.json configuration file.
The script also uses other deployment configuration parameters from the local soss_deployment.parameters.json configuration file.
Run the powershell script file UpgradeSOSSAz.ps1.
Example:
[path to folder]/>.\UpgradeSOSSAz.ps1
Deleting a ScaleOut cluster
Open a command prompt window and set the current directory to the location where ScaleOut StateServer deployment files are located.
Run the powershell script file RemoveSOSSAz.ps1. The script file has 5 optional parameters:
The name of SOSS deployment that needs to be removed.
Unique deployment identifier.
Azure Resource Group where ScaleOut StateServer store is running.
Short deployment name that was used when the store was deployed.
Unique deployment identifier that was used when the store was deployed.
If no arguments are specified, the parameters’ values will be retrieved from the local soss_deployment.parameters.json configuration file.
Run the powershell script file RemoveSOSSAz.ps1.
Example:
[path to folder]/>.\RemoveSOSSAz.ps1
Connecting a client application to the ScaleOut cluster
Depending on the deployment parameters that were used to deploy the ScaleOut StateServer cluster, you can connect your client applications using public or private ScaleOut VM IP addresses. If your application is running in Azure as an App Service, we recommend using the virtual network integration (VNet integration) feature to connect using the ScaleOut cluster’s private IPs. When a ScaleOut cluster is deployed, you have a choice of creating a new Azure virtual network or using an existing one, where ScaleOut-related scale set VMs need to be running in a dedicated subnet (defined by the deploymentSubnet parameter above). Using a VNet integration will allow your Azure App Service run in the same virtual network where ScaleOut StateServer is deployed, enabling your application to access the cluster via private IPs. The name of the subnet where the App Service application is planning to run should be defined via the clientAppSubnet deployment parameter above.
There are 2 ways to connect a client App Service application to the ScaleOut cluster in Azure:
Using private IPs for ScaleOut VMs and App Service with VNet integration: In this scenario, the ScaleOut store is configured to expose private IPs to applications to connect, and a client App Service is configured to run in a dedicated clientAppSubnet of the same virtual network that is used by the ScaleOut store.
- Deployment considerations:
The name of the virtual network should be specified via the virtualNetworkName parameter. You can either use an existing virtual network for the deployment or specify the name of a new virtual network. If the virtual network referenced via the virtualNetworkName parameter does not exist, it will be created in the specified Azure resource group.
The virtual network address range should be specified via the virtualNetworkAddress parameter.
The subnet where ScaleOut VM instances will be running should be specified via the deploymentSubnet parameter.
The name of the client application subnet should be specified via the clientAppSubnet parameter.
The usePrivateGateway parameter should be set to true.
By using the Azure VNet integration feature, the client App Service needs to be configured to run in the same virtual network where the ScaleOut hosts are deployed. To learn how to enable virtual network integration for App Service, please read the Azure App Service documentation.
Using public IPs for ScaleOut VMs: In this scenario, ScaleOut VMs are configured to expose public IPs to client applications by setting the usePrivateGateway deployment parameter to false. The App Service client applications will be accessing the ScaleOut store via their hosts’ public IPs. Using public IPs for connecting to ScaleOut VMs is not recommended for production environments since the data transfer between your applications and ScaleOut cluster might incur some additional costs.
- Deployment considerations:
You can either use an existing Azure virtual network or let the deployment script create a new one. The name of the virtual network should be specified via the virtualNetworkName parameter.
The virtual network address range should be specified via the virtualNetworkAddress parameter.
The subnet where ScaleOut VM instances will be running should be specified via the deploymentSubnet parameter.
The usePrivateGateway parameter should be set to false.
Regardless of how your application is going to connect to the ScaleOut cluster, we recommend allocating a public IP address for each ScaleOut host to enable remote management and monitoring of the cluster. To allocate a new public IP, set the publicIPUsage parameter to AllocateNew or AllocateFromPIPPrefix. If AllocateFromPIPPrefix is used, specify the name of the existing Public IP Prefix Azure resource via the PIPPrefixName parameter.