Apache Ignite
Overview
Apache Ignite is a distributed in-memory database and compute grid. It keeps the hot dataset in RAM for memory-speed reads and writes, and it persists data durably to disk.
This SecureAnyCloud image runs a single Ignite node with native persistence enabled, so your data survives restarts on a dedicated Azure data disk. It installs Apache Ignite 2.16.0 (the official Apache binary release into /opt/ignite) and runs it on OpenJDK 11 as a dedicated ignite system user. Ignite authentication is enabled, and a unique password is rotated into the cluster on first boot. You manage the node with the bundled control.sh and sqlline.sh CLIs and the thin-client SQL port.
What you get:
- Apache Ignite 2.16.0 from the official Apache binary release, on OpenJDK 11.
- Native persistence (work directory, persistence store and WAL) on a dedicated 40 GiB Azure data disk at
/var/lib/ignite. - A unique per-VM password generated on first boot, with no shared default credential.
- Ignite authentication enabled, with the node bound to
127.0.0.1only. - The thin-client and JDBC SQL port
10800on loopback, not exposed publicly. - 24/7 SecureAnyCloud support.
Ignite listens on 127.0.0.1 only. There is no web console. GridGain Control Center is a separate commercial product and is not shipped. The SQL port is not opened to the internet. Connect locally on the VM or over an SSH tunnel.
Prerequisites
You need:
- An active Azure subscription, an SSH key pair, and a VNet and subnet in the target region.
- A VM size of Standard_B4ms (4 vCPU / 16 GiB RAM) as a good starting point, because Ignite is memory-hungry.
- A network security group (NSG) rule that allows inbound
22/tcpfrom your management network. No inbound application ports are needed, because you reach Ignite over the SSH tunnel.
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal and choose Create a resource. Search the Marketplace for Apache Ignite by SecureAnyCloud, and select Create.
On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) only. Then choose Review + create, then Create.
Step 2 - Deploy from the Azure CLI
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:apache-ignite-ubuntu-24-04:default:latest
az vm create \
--resource-group <your-rg> \
--name apache-ignite \
--image sac1647283583153:apache-ignite-ubuntu-24-04:default:latest \
--size Standard_B4ms \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku StandardStep 3 - Connect to your VM
ssh azureuser@<vm-public-ip>Step 4 - Confirm Apache Ignite is installed and running
ls /opt/ignite/libs | grep -oE 'ignite-core-[0-9.]+' systemctl is-active igniteThe output shows the Ignite 2.16.0 core jar and active:
ignite-core-2.16.0 activeStep 5 - Confirm the cluster state and persistence directory
The node activates automatically on first boot. Confirm that the SQL and thin-client port is listening on loopback only, and that native persistence lives on the dedicated data disk:
ss -tln | grep 10800 findmnt -no SOURCE,TARGET /var/lib/ignite
sudo ls /var/lib/igniteLISTEN 0 50 [::ffff:127.0.0.1]:10800 *:* /dev/sda /var/lib/ignite lost+found store wal walarchive workThe work, store and wal directories on /var/lib/ignite are the native persistence store on the dedicated Azure data disk, so the keyspace and cluster metadata survive reboots.
Step 6 - Retrieve your per-VM password
Each VM generates its own Ignite password on first boot and writes it to a root-only credentials file:
sudo cat /root/ignite-credentials.txtThe file contains IGNITE_USERNAME (ignite), IGNITE_PASSWORD, the SQL connection details and the SSH tunnel instructions. Store the password in your secrets manager.
In the steps below, <IGNITE_PASSWORD> stands for the value of IGNITE_PASSWORD.
Step 7 - Run SQL with sqlline
Apache Ignite ships a JDBC SQL CLI, sqlline.sh. Connect as the ignite user with your per-VM password. Run this command in your shell, and substitute the real password for <IGNITE_PASSWORD>:
/opt/ignite/bin/sqlline.sh -u 'jdbc:ignite:thin://127.0.0.1/' -n ignite -p '<IGNITE_PASSWORD>'
At the sqlline prompt, create a table, insert rows and query them:
0: jdbc:ignite:thin://127.0.0.1/> CREATE TABLE city (id INT PRIMARY KEY, name VARCHAR); 0: jdbc:ignite:thin://127.0.0.1/> INSERT INTO city (id, name) VALUES (1, 'London'), (2, 'Paris'); 0: jdbc:ignite:thin://127.0.0.1/> SELECT name FROM city ORDER BY id; +--------+ | NAME | +--------+ | London | | Paris | +--------+ 0: jdbc:ignite:thin://127.0.0.1/> !quitStep 8 - The authentication wall
Ignite authentication is enabled. The default ignite/ignite credential is rotated to a unique per-VM password on first boot. Neither the default password nor any wrong password authenticates. Only the per-VM password in your credentials file works.
To see the rejection, attempt a connection with a wrong password (substitute any wrong value). Ignite refuses the connection with an authentication error, while the per-VM password from Step 6 connects successfully.
Step 9 - Inspect the cluster with control.sh
The bundled control.sh utility reports cluster state and topology. Authentication is enabled, so pass your per-VM credentials. Substitute the real password for <IGNITE_PASSWORD>:
/opt/ignite/bin/control.sh --state --user ignite --password '<IGNITE_PASSWORD>'
The output shows the cluster ID, the tag and the state, which is ACTIVE.
Step 10 - Connect remotely over an SSH tunnel
Ignite listens on 127.0.0.1 only (ports 10800, 47500, 47100). It is not exposed publicly, which is the secure default. To reach the SQL port from your workstation, open an SSH tunnel and point a local JDBC client (or a local sqlline) at localhost:10800:
# On your workstation:
ssh -L 10800:127.0.0.1:10800 azureuser@<vm-public-ip>
# In another terminal, point a thin-client / JDBC tool at:
# jdbc:ignite:thin://127.0.0.1:10800/ user=ignite password=<IGNITE_PASSWORD>For remote access without a tunnel, bind Ignite to a private NIC and protect it with TLS. Never expose 10800 to the internet without transport encryption.
Maintenance
- Persistence. The work directory, persistence store and WAL live on the dedicated data disk at
/var/lib/ignite. The cluster state survives reboots, and you can resize the volume independently. - Password. Rotate it from a
sqllinesession withALTER USER "ignite" WITH PASSWORD '<new-password>';, then update your credentials store. - Configuration. Edit
/etc/ignite/ignite-config.xml(data region sizes, ports, persistence paths) and the JVM options in/etc/ignite/ignite-env.sh. Then runsudo systemctl restart ignite. - Cluster control. Use
/opt/ignite/bin/control.shfor state, baseline and topology operations. Pass--userand--password. - Security patches. unattended-upgrades stays enabled, so the OS keeps receiving security updates automatically.
Support
SecureAnyCloud provides 24/7 expert support for this image. Contact sales@secureanycloud.com.
Apache Ignite and Apache are trademarks of the Apache Software Foundation. This image is provided by SecureAnyCloud and is not affiliated with or endorsed by the Apache Software Foundation. GridGain Control Center is a commercial product and is not included.
Deploy on Azure
Launch Apache Ignite on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Overview
This image runs Apache Ignite, the open source distributed in-memory database and compute grid. Ignite stores data as key-value entries and queryable SQL tables spread across a cluster, and it serves reads and writes at memory speed with an optional durable store on disk. Ignite is the only workload on the image, so the platform stays lean and predictable.
What you get:
- Apache Ignite 2.16.0. It is installed from the official Apache binary release under
/opt/igniteand runs on OpenJDK 11. - Security hardening from the first boot. Ignite authentication is enabled, and every data-grid port binds to the loopback address only. On the first boot of your instance, a one-shot service activates the cluster and generates a fresh, strong password for the built-in
igniteuser, unique to that instance. The service applies the password to the Ignite authentication subsystem and writes it to/root/ignite-credentials.txt, a file that only the root user can read. The defaultignite/ignitecredential that Apache Ignite ships with is rotated away, so it no longer works. No shared or default database credential ships in the image. - Native persistence on a dedicated volume. The work directory, the persistence store and the write-ahead log live on a dedicated storage volume mounted at
/var/lib/ignite. You can grow, snapshot and back up the storage independently of the operating system disk, and the cluster state survives restarts. - A single-node cluster by default. The final section of this guide explains how to expand it.
- A headless image. Ignite has no bundled web console. GridGain Control Center is a separate commercial product and is deliberately not shipped. You administer the node over SSH with the
sqlline.shSQL shell and thecontrol.shcluster utility, both covered below.
The loopback-only security model
A data grid is dangerous when left open. With its default configuration, Ignite accepts unauthenticated connections on the thin-client, discovery and communication ports. Anyone who can reach those ports can read and write the grid or run compute tasks against it. This image closes that exposure in two ways:
- Authentication is on. Every connection must present the per-instance credential generated on first boot.
- Every data-grid port is bound to loopback (
127.0.0.1) only. The thin-client and JDBC SQL port10800, the discovery port47500and the communication port47100are reachable from the instance itself and are never exposed on the network. The security group only needs inbound port22for SSH.
To reach Ignite from your workstation, open an SSH tunnel (shown in step 8) or bind Ignite to a private address inside your VPC. Do not open port 10800 to the internet without TLS in front of it.
Prerequisites
Before you deploy this image, you need:
- An Amazon Web Services account where you can launch EC2 instances.
- IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products.
- An EC2 key pair in the target Region for SSH access to the instance.
- A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network.
- The AWS CLI (version 2) installed locally, if you plan to deploy from the command line.
Recommended instance type: m5.large (2 vCPU, 8 GB RAM) or larger. Ignite holds the hot dataset in memory, so choose an instance whose RAM comfortably exceeds your working set. Memory-optimized instances suit larger datasets.
Launch the instance from the AWS Marketplace
Sign in to the AWS Management Console, open the EC2 service, and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for Apache Ignite. Select the SecureAnyCloud listing and choose Select, then Continue on the subscription summary.
Pick an instance type of m5.large or larger. Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, and either create or select a security group that allows inbound port 22 from your management network. Leave the root volume at the default size or larger. The Ignite data volume is attached automatically from the image.
Select Launch instance. First-boot initialization activates the cluster and generates the per-instance password. It takes a minute or two after the instance state becomes Running and the status checks pass.
Launch the instance from the AWS CLI
The following command launches an instance from the SecureAnyCloud Apache Ignite Marketplace AMI into an existing subnet and security group. Replace <ami-id> with the AMI ID shown on the Marketplace listing. Replace <key-name> with your EC2 key pair name, <subnet-id> with your subnet ID, and <security-group-id> with a security group that opens inbound port 22.
aws ec2 run-instances \
--image-id <ami-id> \
--instance-type m5.large \
--key-name <key-name> \
--subnet-id <subnet-id> \
--security-group-ids <security-group-id> \
--metadata-options HttpTokens=required \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=ignite-01}]'On success, the command prints a JSON document. Note the instance ID. When the instance is running, retrieve its public address with aws ec2 describe-instances --instance-ids <instance-id> --query "Reservations[].Instances[].PublicIpAddress" --output text.
Connect over SSH
Connect over SSH with the key pair you selected and the public IP address from step 2. The SSH login user depends on the operating system of the AMI variant you launched:
AMI variant SSH login user
Apache Ignite 2.16 on Ubuntu 24.04 ubuntu
ssh <login-user>@<public-ip>Wait until the instance has passed both EC2 status checks before you connect. The first-boot service runs before the SSH daemon is ready, so Ignite is initialized by the time you can log in.
Retrieve the generated password
The first-boot service generates a fresh password for the ignite user on this instance and writes it, with the connection details, to /root/ignite-credentials.txt. Only the root user can read the file. Display it from your SSH session:
sudo cat /root/ignite-credentials.txtThe file looks like this, with a password unique to your instance:
IGNITE_USERNAME=ignite IGNITE_PASSWORD=<your generated password> IGNITE_HOST=127.0.0.1 IGNITE_SQL_PORT=10800 IGNITE_PUBLIC_IP=<your instance public IP>The default ignite / ignite account that ships with Apache Ignite is rotated away during first boot, so it no longer works. Use the generated password for every connection.
Confirm the service and the listener
Ignite runs under systemd as the ignite service and starts automatically on boot. Confirm that it is active:
systemctl is-active igniteThe command prints active. Next, confirm that the thin-client and SQL connector is listening. Ignite binds to the loopback address 127.0.0.1 on port 10800, so it is reachable from the instance itself:
ss -tln | grep 10800The output shows a listening socket on 127.0.0.1:10800. The discovery (47500) and communication (47100) ports are bound to loopback in the same way.
Run SQL with sqlline
Ignite bundles sqlline.sh, a SQL shell that connects over the thin-client JDBC driver. Open an interactive session against the local node with the generated password. Replace <password> with the value from /root/ignite-credentials.txt:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 /opt/ignite/bin/sqlline.sh -u 'jdbc:ignite:thin://127.0.0.1/' -n ignite -p '<password>'The screenshot below shows a complete session that creates a table, inserts rows and reads them back on the running node.
An authenticated Ignite thin-client SQL session creating a table, inserting rows and reading them back.
The following command runs a full create, insert and read round trip in a single non-interactive invocation. It creates a table, inserts two rows, reads them back and drops the table. Replace <password> with the value from /root/ignite-credentials.txt:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 IGNITE_HOME=/opt/ignite printf '%s\n' \
"CREATE TABLE IF NOT EXISTS demo (id INT PRIMARY KEY, name VARCHAR, qty INT);" \
"INSERT INTO demo (id, name, qty) VALUES (1, 'widget', 42);" \
"INSERT INTO demo (id, name, qty) VALUES (2, 'gadget', 17);" \
"SELECT id, name, qty FROM demo ORDER BY id;" \
"DROP TABLE demo;" \
"!quit" \
| /opt/ignite/bin/sqlline.sh --silent=true --showHeader=true --outputformat=csv \
-u 'jdbc:ignite:thin://127.0.0.1/' -n ignite -p '<password>'The SELECT returns the two rows you inserted, which confirms the authenticated data path end to end.
Check cluster state with control.sh
control.sh is the cluster administration utility. Authentication is enabled, so pass the ignite user and the generated password. Report the cluster state, which is ACTIVE on this image:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 IGNITE_HOME=/opt/ignite /opt/ignite/bin/control.sh --user ignite --password '<password>' --stateThe screenshots below show the service active with every data-grid port bound to loopback, and the default credential rejected while native persistence lives on the dedicated volume.
The Ignite service active, the thin-client, discovery and communication ports bound to loopback only, and the Apache Ignite 2.16.0 core library.
The default ignite credential rejected after first-boot rotation, and native persistence on a dedicated data volume with a per-instance credential file.
Reach Ignite from your workstation over an SSH tunnel
The thin-client port is loopback only, so connect a remote SQL client or application by forwarding the port over SSH. From your workstation, replace <login-user> and <public-ip> with your instance's values:
ssh -L 10800:127.0.0.1:10800 <login-user>@<public-ip>While that tunnel is open, point any Ignite thin-client, JDBC tool or application at 127.0.0.1:10800 on your workstation. It reaches the node securely and authenticates with the generated password. For a production deployment, bind Ignite to a private address inside your VPC and control access with security groups instead of a tunnel.
The Ignite data volume
Ignite native persistence, the work directory and the write-ahead log are stored under /var/lib/ignite, which is a dedicated EBS volume separate from the operating system disk. Confirm the mount:
findmnt /var/lib/igniteThe output shows /var/lib/ignite is its own ext4 filesystem on a separate device. Because the data directory is on its own volume, you can take an Amazon EBS snapshot of it on its own schedule and grow it independently of the root volume. Check the available space at any time with:
df -h /var/lib/igniteManage the Ignite service
systemd manages Ignite, and the service starts automatically on boot.
Check the service status:
systemctl status ignite --no-pagerStop, start and restart the service when needed:
sudo systemctl stop ignite
sudo systemctl start ignite
sudo systemctl restart igniteBecause native persistence is enabled, the cluster state and all persisted data survive a restart. The node comes back up ACTIVE with your data intact. Ignite writes its log under the work directory on the data volume and to the systemd journal. Review the log when you diagnose a startup or runtime problem:
sudo journalctl -u ignite --no-pager | tail -n 100Backups
/var/lib/ignite is a dedicated EBS volume, so the simplest durable backup is an Amazon EBS snapshot of that volume. The snapshot captures the persistence store, work directory and write-ahead log as a point-in-time copy. Schedule snapshots with Amazon Data Lifecycle Manager or AWS Backup.
For a file-level archive, stop the service first so the store is quiesced, then archive the data directory:
sudo systemctl stop ignite
sudo tar -czf /var/backups/ignite-$(date +%F).tgz -C /var/lib/ignite .
sudo systemctl start igniteIgnite also supports its own snapshot feature through control.sh --snapshot create <name> for consistent online backups of persisted caches. Consult the Ignite documentation for restore procedures.
Expand to a multi-node cluster
This image runs Ignite as a single-node cluster, which suits development, testing and smaller production workloads. Ignite is designed to scale horizontally by adding nodes. To build a multi-node cluster:
- Launch additional instances from this same AMI, one per node, in the same VPC.
- Allow inbound TCP ports
47500(discovery) and47100(communication) between the nodes, and10800from your application tier. - On every node, edit
/etc/ignite/ignite-config.xmland changelocalHostfrom127.0.0.1to the node's own private IP address. List the private addresses of the cluster in theTcpDiscoveryVmIpFinderaddresses. - Restart Ignite on each node. Confirm with
control.sh --statethat the cluster isACTIVEwith the expected number of server nodes.
The Apache Ignite documentation at https://ignite.apache.org/docs/latest/ covers clustering, data partitioning, SQL, compute and performance tuning in depth.
Support
SecureAnyCloud provides 24/7/365 expert technical support for this image, with a guaranteed response within 24 hours and a one-hour average for critical issues. Contact sales@secureanycloud.com.
For general Apache Ignite administration questions, consult the official documentation at https://ignite.apache.org/docs/latest/.
Deploy on AWS
Launch Apache Ignite on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com