Configuring Clustering on Azure with TCP Protocol
Overview
Clustering on Azure requires using the TCP protocol with the AZURE_PING discovery mechanism. The default UDP protocol experiences issues resolving node physical addresses on the Azure network stack, making TCP the recommended approach for Azure deployments.
This configuration is specifically required for Azure environments. Standard on-premise deployments can continue using the default UDP protocol.
Prerequisites
Before configuring the CData Virtuality Server cluster on Azure, ensure that you have:
CData Virtuality Server v25.3 or more recent;
Azure VMs for CData Virtuality Server nodes deployed in the same Azure Virtual Network/Subnet;
Shared PostgreSQL database accessible by all nodes;
Azure Storage Account with appropriate permissions.
Configuration Steps
Step 1: Create Azure Blob Container for Cluster Discovery
The Azure Blob container serves as a shared registry for cluster nodes to discover each other.
1.1 Storage Account Setup
# Using Azure CLI
az storage account create \
--name <storage_account_name> \
--resource-group <resource_group> \
--location <azure_region> \
--sku Standard_LRS
1.2 Create Blob Container
# Create container for cluster discovery
az storage container create \
--name <container_name> \
--account-name <storage_account_name> \
--public-access off
Example container name: cluster-blob
1.3 Retrieve Access Credentials
# Get Storage Account Key
az storage account keys list
--account-name <storage_account_name>
--resource-group <resource_group>
--query '[0].value'
--output tsv {code}
Save these credentials:
Storage Account Name:
<storage_account_name>Storage Access Key:
<key_from_above_command>Container Name:
<container_name>
Step 2: Start CData Virtuality Nodes with Azure TCP Configuration
Run each server node using the azure_tcp JGroups protocol stack with the following command:
./standalone.sh
--server-config=dvserver-standalone-cluster.xml
-b <VM_HOSTNAME_IP>
-Djboss.node.name=<NODE_NAME>
-Djboss.jgroups.ee.stack=azure_tcp
-Djboss.jgroups.azure_ping.storage_account_name=<STORAGE_ACCOUNT_NAME>
-Djboss.jgroups.azure_ping.storage_access_key=<STORAGE_ACCESS_KEY>
-Djboss.jgroups.azure_ping.container=<BLOB_CONTAINER_NAME>
Parameter Reference
Parameter | Description | Example |
|---|---|---|
| Bind address - IP\Name |
|
| Unique identifier for the node |
|
| JGroups protocol stack (must be |
|
| Azure Storage Account name |
|
| Storage Account access key |
|
| Blob container name |
|
Example: 3-Node Cluster Configuration
Node 1:
./standalone.sh
--server-config=dvserver-standalone-cluster.xml
-b 10.0.1.4
-Djboss.node.name=cdv-node-1
-Djboss.jgroups.ee.stack=azure_tcp
-Djboss.jgroups.azure_ping.storage_account_name=cdvstorage
-Djboss.jgroups.azure_ping.storage_access_key=abc123def456...==
-Djboss.jgroups.azure_ping.container=cluster-blob
Node 2:
./standalone.sh
--server-config=dvserver-standalone-cluster.xml
-b 10.0.1.5
-Djboss.node.name=cdv-node-2
-Djboss.jgroups.ee.stack=azure_tcp
-Djboss.jgroups.azure_ping.storage_account_name=cdvstorage
-Djboss.jgroups.azure_ping.storage_access_key=abc123def456...==
-Djboss.jgroups.azure_ping.container=cluster-blob
Node 3:
./standalone.sh
--server-config=dvserver-standalone-cluster.xml
-b 10.0.1.6
-Djboss.node.name=cdv-node-3
-Djboss.jgroups.ee.stack=azure_tcp
-Djboss.jgroups.azure_ping.storage_account_name=cdvstorage
-Djboss.jgroups.azure_ping.storage_access_key=abc123def456...==
-Djboss.jgroups.azure_ping.container=cluster-blob
Ensure that all CData Virtuality Server nodes are deployed within the same Azure Virtual Network and Subnet for proper cluster communication.
The azure_tcp JGroups protocol stack is available since v25.3