System Management¶
Assemblyline Major Upgrades¶
Pause Processing¶
If upgrading the framework version (4.X → 4.Y, where X < Y) starting from Release 4.2.0.121+ or if performing another major change that affects Assemblyline, it's strongly recommended to pause the Ingester and Dispatcher and allow services to complete what's currently been tasked to them. This can be done by:
- Changing the state(s) using the
/api/v4/system/status/<component>/
API and setting the variableactive=false
- Using the toggle found in the Dashboard and switching Dispatcher/Ingester to the disabled state.
This ensures that if there are any breaking changes between the core and services during a major upgrade (ie. framework), the services will complete their tasks with what they were compatible with.
This also gives an extended period to upgrade services to the compatible framework version before resuming processing.
Danger
Systems upgrading before Release 4.2.0.121 are strongly advised to upgrade to that release at a minimum and pause the Ingester/Dispatcher before proceeding to upgrade to later releases. Alternatively, you can stop submitting files to your system and let existing submissions complete and then perform the upgrade.
Upgrade Deployment (Core)¶
At this stage, you're ready to upgrade the core system and you shouldn't have any services actively processing.
Depending on the type of deployment (Kubernetes/Docker), the method of upgrading differs:
- Docker: Update
SERVICE_VERSION
in .env file if necessary, then:docker-compose pull && docker-compose up -d
- Kubernetes: Update
release
in values.yaml if necessary, then:helm upgrade <deployment_name> /path/to/assemblyline-helm-chart/assemblyline -f /path/to/al_deployment/values.yaml -n <deployment_namespace>
(Optional) Upgrade Services to Compatible Framework¶
At this stage, your deployment has been successfully upgraded and your core components should be upgraded to a newer framework release.
While the system is still paused, on the Services page you should find that all your services are in a disabled state as they're assumed to be incompatible with the rest of the system. If using public services, there should be advertisements to upgrade to the latest compatible version.
If an advertisement doesn't appear for a service, it implies that there is no release tagged with a compatible version and requires a rebuild of the service using the more recent stable/dev tag.
Once all services are upgraded, you can resume processing by toggling the Dispatcher/Ingester back to an active status or changing the state using the API and setting active=true
Assemblyline Minor Upgrades (4.X → 4.X)¶
This implies the changes should have little to no impact on systems within the same framework version.
Setting the system to a paused state before upgrading isn't required.
Single Node Elasticsearch Maintenance¶
When running Elasticsearch in a single node deployment, it will sometimes drop to a yellow
status without a real issue.
This typically occurs when an index has (because of templating or defaults), its number_of_replicas
set to more than zero.
Since the single node deployment can't create a redundant replica, this forces the node to a yellow status.
The details on the settings around this can be a little different depending on which version of Elasticsearch you are using, but the following should be true for versions 7 and 8.
To check if this is the case for your Elasticsearch node, running the following command will reset the replicas to zero for all indices:
curl -XPUT -k -u "${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}" https://localhost:9200/_all/_settings -H 'Content-Type: application/json' -d '{"index" : {"number_of_replicas" : 0}}'
https
with http
depending on your other settings. If your Elasticsearch doesn't return to a green status within a few minutes of running the command you may have other issues and should look for support.
If the issue reoccurs often enough to be an issue for you, it should be preventable by ensuring no templates have a non-zero replica value set and creating an index template like the following to establish zero as the default value.
{
"index_patterns" : ["*"],
"order" : 0
"settings" : {
"number_of_replicas" : "0"
}
}