Upgrade Aerospike Backup Service
For the complete documentation index see: llms.txt
All documentation pages available in markdown.
Use this task to replace Aerospike Backup Service (ABS) 3.x with a later ABS 3.x release. Before you replace ABS, update the configuration for every intervening release. The replacement process rescans backup history from storage when routine names, storage roots, credentials, and persistent mounts remain unchanged.
Applies to
- Product: Aerospike Backup Service (ABS) 3.x.
- Audience: operators who run ABS on Linux, Docker, or Kubernetes with Helm.
- Outcome:
/versionreports the target version, routines are loaded, and the next scheduled backup runs on time.
For an ABS 2.x deployment managed by Aerospike Kubernetes Operator (AKO), follow Upgrade Aerospike Backup Service on Kubernetes. For other ABS 2.x deployments, contact Aerospike Support to confirm a supported migration path, then read Breaking changes in ABS 3.0.
Prerequisites
- You know the current ABS version from
/version. - The target release documentation supports upgrading from your current ABS release.
- The target package or image is published and, for Helm, you know its matching published chart version.
- You know the configured listener base URL, including the scheme, port, and
context-path. - Local backup storage, configuration, certificates, and credentials use persistent mounts that you can attach to the replacement process.
- A Helm deployment uses one replica with autoscaling disabled during the upgrade.
- You reviewed every breaking change between the current version and the target version in Breaking changes by version.
Upgrade ABS
-
Record the current version.
Set
BASE_URLto the configured listener URL andcontext-path. The following value is the default:Terminal export BASE_URL=http://localhost:8080Terminal curl --silent --show-error --fail-with-body "$BASE_URL/version"Note the reported version so you know which breaking changes apply.
-
Save protected rollback information.
Save the configuration with permissions that restrict access to your account.
Terminal install -m 600 /etc/aerospike-backup-service/aerospike-backup-service.yml "$HOME/abs-config-backup.yml"Keep the earlier package until the rollback window closes.
Keep the Compose file or original
docker runcommand, including environment variables, networks, restart policy, resource limits, security options, secrets, volume mounts, and port mappings. Save the current container definition in a protected file:Terminal umask 077docker inspect backup-service > "$HOME/backup-service-inspect.json"Back it up separately (replace
/path/to/aerospike-backup-service.ymlwith the host path):Terminal install -m 600 /path/to/aerospike-backup-service.yml "$HOME/abs-config-backup.yml"Export all installed values and the rendered manifest, not only
backupServiceConfig.Terminal umask 077helm get values abs --namespace aerospike --all > "$HOME/abs-values-backup.yaml"helm get manifest abs --namespace aerospike > "$HOME/abs-manifest-backup.yaml"helm history abs --namespace aerospikeRecord the revision that you can restore with
helm rollback. -
Pause routines and drain running jobs.
Stop clients from submitting on-demand backup and restore requests. Disable each routine to prevent a scheduled job from starting while you replace ABS.
Terminal curl --silent --show-error --fail-with-body \-X PUT "$BASE_URL/v1/config/routines/ROUTINE_NAME/disable"Set
disabled: trueon every routine inbackupServiceConfig. Also setautoscaling.enabled: falseandreplicaCount: 1inabs-values.yaml. Apply the paused configuration with the chart version that is already installed:Terminal helm upgrade abs aerospike/aerospike-backup-service \--namespace aerospike \--values abs-values.yaml \--version CURRENT_CHART_VERSION \--wait \--timeout 10mhelm history abs --namespace aerospikeCURRENT_CHART_VERSIONis the chart version shown byhelm history. Record this paused revision for rollback. Keep routines disabled inabs-values.yamlduring the target upgrade.On Linux and Docker, the
disableendpoint also cancels any backup that the routine is running. To let a running backup finish, wait for it to reach a terminal state before you disable the routine. Wait until every backup and restore reaches a terminal state. See Back up data with ABS and Restore data with ABS. -
Update the configuration for breaking changes.
Apply every entry between the current version (exclusive) and the target version (inclusive) in Breaking changes by version. Do not enable new optional fields yet. Upgrade first, then opt in. Validate the edited file against the target release’s
config.schema.jsonwhen it is available. Startup still performs the definitive storage, credential, Secret Agent, and cluster checks. -
Replace ABS with the target version.
Install the package for your distribution over the existing installation. The package manager preserves the configuration file.
For Debian:
Terminal dpkg -i aerospike-backup-service_3.7.0_amd64.debFor RPM:
Terminal rpm -U aerospike-backup-service-3.7.0-1.x86_64.rpmsystemctl enable --now aerospike-backup-serviceThe explicit
systemctlcommand protects against earlier package removal scripts that can leave the service stopped and disabled during an RPM upgrade.Pull the target image.
Terminal docker pull aerospike/aerospike-backup-service:3.7.0Stop and retain the old container for rollback:
Terminal docker stop backup-servicedocker rename backup-service backup-service-rollbackRun the recorded Compose or
docker rundefinition with the target image. Preserve every runtime option and mount. Local backup paths and other persistent paths must use bind mounts or named volumes. See Run ABS in Docker for the base command.Verify that local storage and log volumes are writable by UID 65532. Confirm that the installed revision has disabled routines, one replica, and no Horizontal Pod Autoscaler. The chart’s default rolling strategy can otherwise run old and new schedulers at the same time. Scale the Deployment to zero and wait for the old Pod to exit:
Terminal kubectl scale deployment/abs-aerospike-backup-service \--namespace aerospike \--replicas=0kubectl wait \--namespace aerospike \--for=delete pod \--selector=app=abs-aerospike-backup-service \--timeout=5mRefresh the chart repository and upgrade with the chart version that corresponds to the target ABS release.
TARGET_CHART_VERSIONis the chart’sversion, which is distinct from the ABS image tag.Terminal helm repo updatehelm upgrade abs aerospike/aerospike-backup-service \--namespace aerospike \--values abs-values.yaml \--version TARGET_CHART_VERSION \--set-string image.tag=3.7.0 \--set replicaCount=1 \--atomic \--timeout 10m
Verify
-
Confirm that the replacement process is running.
Terminal systemctl is-active aerospike-backup-servicesystemctl is-enabled aerospike-backup-serviceTerminal docker ps --filter name=backup-serviceTerminal kubectl rollout status deployment/abs-aerospike-backup-service \--namespace aerospike \--timeout=10mkubectl get pods \--namespace aerospike \--selector=app=abs-aerospike-backup-serviceConfirm that exactly one replacement Pod is running.
-
Confirm the version and the
/healthendpoint using the configured listener andcontext-path.Terminal curl --silent --show-error --fail-with-body "$BASE_URL/version"curl --silent --show-error --fail-with-body "$BASE_URL/health"The version response reports the target ABS version, and
/healthreturnsOk. -
Confirm that routines loaded and history was rescanned.
Terminal journalctl -u aerospike-backup-service --since "10 minutes ago" --followTerminal docker logs --since 10m --follow backup-serviceTerminal kubectl logs \--namespace aerospike \deployment/abs-aerospike-backup-service \--since=10m \--followFollow the logs until they show
History synchronization completedand aLast existing backupentry for every expected routine, then pressCTRL+C. Investigate any storage, credential, or configuration errors before you resume schedules. -
Enable each routine:
Terminal curl --silent --show-error --fail-with-body \-X PUT "$BASE_URL/v1/config/routines/ROUTINE_NAME/enable"Set
disabled: falseon each routine inabs-values.yaml, then apply the values with the target chart:Terminal helm upgrade abs aerospike/aerospike-backup-service \--namespace aerospike \--values abs-values.yaml \--version TARGET_CHART_VERSION \--set-string image.tag=3.7.0 \--wait \--timeout 10m -
Observe the next scheduled backup.
Confirm that it starts on time, reaches a successful terminal state, and appears in backup history. An on-demand full backup can invoke retention, so use an isolated routine and storage prefix if you need an immediate canary. See Verify a backup.
Breaking changes by version
ABS has no automatic configuration migration. Read every section between your current version (exclusive) and your target version (inclusive), and apply all of them before you restart. The listed ABS 3.x patch releases add no further breaking changes.
Breaking changes in ABS 3.7.0
See the Aerospike Backup Service 3.7.0 release notes for details.
- Configuration API redacts secrets.
GETresponses replace literal secrets with"[secret]". Aerospike Secret Agent references (secrets:...) are returned unchanged. If you retrieve configuration withGET, edit it, and update it withPUT, leave"[secret]"in unchanged secret fields. Sending"[secret]"for a new entity is invalid. Prefer editing the YAML file and applying it withPOST /v1/config/apply. See API secrets. - Configuration endpoints return
404and409. Endpoints that create, update, or delete routines, storage, clusters, and policies, and the routineenableanddisableendpoints, return404 Not Foundfor an entity that does not exist. They return409 Conflictfor a name that is already taken, or when you delete an entity that a routine still references. A malformed body or failed validation still returns400 Bad Request. Update clients that branch on400or match response text. - Configuration paths must be canonical. ABS validates local, S3, GCP, and Azure storage paths, restore
backup-data-path, password paths, TLS and HTTPS files, encryption-key files, GCP key files, Secret Agent TLS files, and log file paths. Paths must not contain.., start with~, contain redundant separators, end with/, or use a non-canonical prefix such as./. Relative storage paths must stay under their storage root. - Names must be usable as a path segment. Routine, storage, cluster, policy, and Secret Agent names cannot be
.or.., contain/,\, or a NUL byte, start with~, or start or end with whitespace. Namespace names in routines and restore requests must be at most 31 bytes of Latin letters, digits,_,-, and$, and cannot benull. - Compression and encryption blocks require
mode. Setmodein everycompressionandencryptionblock in backup policies and restore requests.ZSTDcompression requireslevelfrom -1 to 22, andNONEmust not setlevel. To turn off compression or encryption, setmode: NONEor omit the block. - An empty rate-limiter
white-listlimits every client. To disable rate limiting for all clients, use0.0.0.0/0, which represents all IPv4 addresses in Classless Inter-Domain Routing (CIDR) notation. A value such as0.0.0.0without/0is not a full exemption. See HTTP server. - Linux packages run ABS as an unprivileged account. The
.deband.rpmpackages create theaerospike-backup-serviceaccount and run ABS under a systemd sandbox. Most of the following problems appear only when ABS first uses the path or file, so check them before you upgrade:- Only
/etc/aerospike-backup-service,/var/lib/aerospike-backup-service, and/var/log/aerospike-backup-serviceare writable. For alocal-storagepath anywhere else, add it toReadWritePathswithsystemctl edit aerospike-backup-service, and makeaerospike-backup-servicethe owner of the directory. The package installs an example drop-in at/usr/share/doc/aerospike-backup-service/local-storage-path.conf.example. /rootand/homeare hidden. Move cloud credentials such as~/.aws/credentialsunder/var/lib/aerospike-backup-service, or set them in/etc/default/aerospike-backup-service(Debian) or/etc/sysconfig/aerospike-backup-service(RPM).- Cluster and HTTPS TLS files and
password-pathfiles must be mode0600with owneraerospike-backup-service. - A listener on a port below 1024 needs
CAP_NET_BIND_SERVICE, granted withAmbientCapabilitiesandCapabilityBoundingSetin a drop-in. - The log file moves to
/var/log/aerospike-backup-service/aerospike-backup-service.log. If you customized the configuration file, updateservice.logger.file-writer.filename, because ABS refuses to start when it cannot write its log file. - The unit file moves to
/usr/lib/systemd/system. The package renames an edited unit file in/etc/systemd/systemtoaerospike-backup-service.service.pre-hardening.bak. Reapply its changes as a drop-in. - The RPM upgrade to 3.7.0 leaves ABS stopped and disabled. The
systemctl enable --nowcommand in Upgrade ABS restarts it.
- Only
- Local backup files are owner-only. In every deployment,
local-storagebackups are created with file mode0600and directory mode0700, owned by the account ABS runs as. A tool that reads local backups as another user, such asasrestorerun from a separate account, must run as the ABS account, or you must restore through the REST API. - The Helm chart is hardened. The container runs as non-root UID 65532 with a read-only root filesystem, drops all capabilities, and does not automount the service account token. Local disk storage or a log file on disk needs an extra writable volume. See Install ABS on Kubernetes with Helm.
- List fields reject empty and duplicate values. The
namespaces,set-list,bin-list,node-list, and rate-limiterwhite-listfields fail validation on empty strings or duplicates. The rate-limitertpsandsizevalues must be positive. - Secret Agent references validate at load. A malformed
secrets:path, or a reference without a configured agent, fails configuration load or apply. New jobs that need a referenced secret fail when Secret Agent is unreachable. Running jobs keep the values they already resolved. - New listener timeouts apply by default. The
read-timeout(30 seconds),write-timeout(60 seconds), andidle-timeout(120 seconds) values take effect when omitted. - Set indexes are backed up. On Database 8.1.2 and later, a namespace backup now includes set indexes unless the policy sets
no-indexes. When a namespace has a set index, ABS writes the backup metadata in ASB protocol version 3.3, which ABS 3.6.2 and earlier,absctl1.1.1 and earlier, andasrestorecannot read. See Roll back a failed upgrade.
Breaking changes in ABS 3.6
ABS 3.6.0 introduced these changes. They are documented in the Aerospike Backup Service 3.6.1 release notes. ABS 3.6.1 and ABS 3.6.2 add no further breaking changes.
- Restore job
statusis lowercase. Values arerunning,success,failure, andcanceled. The previous values wereRunning,Done,Failed, andCanceled. Update integrations that compare these values. - The default log level is
INFO. Setservice.logger.level: DEBUGexplicitly to keep verbose logging. - The default cloud
min-part-sizeis 50 MiB. This applies to S3, Azure, and GCP storage. At the defaultparallel-writevalue of 8, chunk buffers can use about 400 MiB per active namespace. Seemin-part-sizetuning. - Chunk-count validation can reject cloud storage. Configurations that need 10,000 or more chunks per backup file fail validation. Increase
min-part-sizeor decreasefile-limit. Afile-limitof0disables the check. parallelis enforced per routine. The total concurrent primary index (PI) queries across all namespaces in a routine cannot exceedparallel. Confirm backup duration still fits the schedule window.parallelcannot exceedmax-parallel-scans. When the source cluster sets that limit, an explicitparallelvalue above it fails validation at startup and on configuration change.restore_in_progresscounts active jobs only. Update queries or alerts that relied on completed jobs in this gauge.- Startup checks storage permissions in more detail. Missing read or list permission on S3, GCS, or Azure prevents startup. Write or delete failures warn at startup and can fail backups or cleanup later.
Breaking changes in ABS 3.5
- Startup checks cloud storage connectivity. ABS checks configured S3, GCS, and Azure resources when it starts. An inaccessible bucket or container, invalid credentials, or a connectivity failure can prevent startup.
ABS 3.5.1 adds no further breaking changes.
Breaking changes in ABS 3.4.0
See the Aerospike Backup Service 3.4.0 release notes for details.
prefer-racksmoved to the cluster. Configure it underaerospike-clusters, not underbackup-routines. The old location fails validation. See Rack awareness: prefer-racks vs rack-list.- Backup retry delays increase by default. The default
retry-policy.multiplierchanged from1to1.5. Set it to1explicitly to retain the constant retry delay from ABS 3.3.1.
Breaking changes in ABS 3.3.0
See the Aerospike Backup Service 3.3.0 release notes for details.
- TLS validation is strict. Incomplete or inconsistent TLS settings fail startup. Review certificate, key, and CA parameters.
- Restore-by-timestamp reads storage from the routine. Do not include storage configuration in the request. ABS 3.6 added optional
sourceandsource-nameoverrides for cross-region restores. - Default restore concurrency is lower. The default restore-policy
parallelvalue changed from20to8. Setparallel: 20explicitly to retain the previous concurrency after checking that the target cluster and ABS host have sufficient capacity.
Breaking changes in ABS 3.2.0
See the Aerospike Backup Service 3.2.0 release notes for details.
namespacesis mandatory. Omitting it no longer backs up all namespaces. Usenamespaces: []for a whole-cluster backup.- Restore
bandwidthis MiB/s. Convert bytes-per-second values. The minimum is 8 MiB/s. - The
partition-listdefault isnull. The effect is unchanged: all partitions are backed up. - The
aerospike_backup_service_restore_progress_pctmetric is removed. Poll/v1/restore/status/{jobId}for restore progress.
Breaking changes in ABS 3.1.0
See the Aerospike Backup Service 3.1.0 release notes for details.
- Remaining parameters use
kebab-case. Renamemax_async_connectionstomax-async-connectionsandmin_part_sizetomin-part-size. Thes3-log-levelfield already usedkebab-case. - Validation is strict at startup. Invalid configurations prevent the service from starting.
- Default backup concurrency is higher. The default backup-policy
parallelvalue changed from1to8. Setparallel: 1explicitly to retain the previous cluster, network, memory, and storage load.
Breaking changes in ABS 3.0
This section applies when you upgrade from ABS 2.x through a migration path confirmed by Aerospike Support or AKO documentation. See the Aerospike Backup Service 3.0.0 release notes for details.
- Parameters use
kebab-case. Renamesnake_casekeys, exceptmax_async_connectionsandmin_part_size, which changed in 3.1.0. secret-agentis nowsecret-agents.- Storage uses per-type blocks. Replace the unified
typefield with one oflocal-storage,s3-storage,azure-storage, orgcp-storage. Only one type is allowed per storage entry. - S3
bucketandpathare separate fields. Split eachs3://BUCKET/PATHvalue into separatebucketandpathfields. - Path-based restore requires
backup-data-path. Requests to/v1/restore/fulland/v1/restore/incrementaluse this field. TheStorage.pathfield is the storage root only. - Configuration API changes apply immediately. The separate apply step is gone. Each update saves to the file and applies to the runtime. Invalid updates are rejected. The
applyendpoint remains for reloading a file edited outside the API. remove-filesis nowretention. Useretention.fullandretention.incrementalcounts instead ofKeepAll,RemoveAll, andRemoveIncremental.
After you upgrade
New-version features are opt-in. Existing configurations that omit the new fields keep UTC schedules, differential incrementals, and HTTP-only listen behavior. Enable only the features you need.
| Optional change | Why |
|---|---|
service.https | Terminate TLS on ABS. Set service.http.disabled: true for TLS-only. Mount certs at stable paths so rotation does not require a restart. For mutual TLS, set client-auth and client-ca-file. Add crl-file to revoke client certificates (require-and-verify only). |
incr-mode: cumulative | Shorter restore-by-timestamp chains. Each incremental copies everything changed since the last full backup, so storage and query cost grow until the next full. |
schedule-timezone | Evaluate cron in Local or an IANA zone. Omit the field to keep UTC. Set the host TZ only if you use Local. Backup folder names stay UTC. |
filter-exp | Partial backups of records that match a Base64 filter expression. Mutually exclusive with a multi-set set-list. |
Roll back a failed upgrade
Roll back if the replacement process does not start or cannot load its routines and history after you correct configuration, storage, and credential errors.
ABS 3.6.2 and earlier cannot restore a backup that ABS 3.7.0 or later took of a namespace that has a set index.
ABS 3.7.0 writes the metadata of that backup in ASB protocol version 3.3, which asrestore and absctl 1.1.1 and earlier cannot read either.
Keep those backups after you roll back. ABS 3.7.0 and later and absctl 1.2.0 and later can read version 3.3 metadata.
-
Disable routines and stop clients from submitting on-demand jobs.
-
Stop the replacement process.
-
Restore the earlier release.
Stop ABS and restore the protected configuration before the earlier package’s post-install script starts the service:
Terminal systemctl stop aerospike-backup-servicecp "$HOME/abs-config-backup.yml" /etc/aerospike-backup-service/aerospike-backup-service.ymlFor Debian, install the earlier package:
Terminal dpkg -i OLD_DEB_PACKAGETo roll back from ABS 3.7.0 and later to an earlier Debian package, purge the package first, because the earlier package’s post-install script fails otherwise. Purging removes the configuration file and the
aerospike-backup-serviceaccount, but keeps backup data. Restore the configuration after you install the earlier package:Terminal apt-get purge -y aerospike-backup-servicedpkg -i OLD_DEB_PACKAGEsystemctl stop aerospike-backup-servicecp "$HOME/abs-config-backup.yml" /etc/aerospike-backup-service/aerospike-backup-service.ymlsystemctl start aerospike-backup-serviceFor RPM, permit installation of the earlier package:
Terminal rpm -U --oldpackage OLD_RPM_PACKAGEsystemctl enable --now aerospike-backup-serviceStop the replacement container, restore the earlier configuration to
HOST_CONFIG_PATH, restore the retained container name, and start it:Terminal docker stop backup-servicedocker rm backup-servicecp "$HOME/abs-config-backup.yml" HOST_CONFIG_PATHdocker rename backup-service-rollback backup-servicedocker start backup-servicePrevent Pod overlap, wait for the replacement Pod to exit, then restore the paused revision recorded before the upgrade:
Terminal kubectl scale deployment/abs-aerospike-backup-service \--namespace aerospike \--replicas=0kubectl wait \--namespace aerospike \--for=delete pod \--selector=app=abs-aerospike-backup-service \--timeout=5mhelm rollback abs PAUSED_REVISION \--namespace aerospike \--wait \--timeout 10m -
Repeat the version, response, log, history, and scheduled-backup checks in Verify.
Troubleshoot
- The process exits at startup with a field error. The message names the unknown or invalid field, such as
prefer-racksunder a routine or atypefield under storage. Fix the YAML per Breaking changes by version and restart. - Startup reports storage permission errors. ABS 3.5 and later check S3, GCS, and Azure connectivity during startup. ABS 3.6 adds specific read, list, write, and delete permission checks. Grant the required permissions and restart.
- A Helm Pod cannot write local backups or logs. Verify that the volume is mounted read-write and grants UID 65532 or a compatible
fsGroupwrite access. - Backups run longer after the upgrade. ABS 3.6 enforces
parallelper routine instead of per namespace. Retune reader parallelism. See Aerospike Backup Service performance tuning. - Monitoring alerts changed behavior. Restore status values, the
restore_in_progressgauge, and the removedrestore_progress_pctmetric affect dashboards carried from earlier versions. Update queries as described in Breaking changes in ABS 3.6 and Breaking changes in ABS 3.2.0.