A recent project I was on had a catastrophic issue in a lower environment because compaction was not enabled and the server simply ran out of disk. Don’t let this happen to you!
Compacting Servers
AEM requires offline compaction for these versions, so this will require downtime. I’ve found the easiest way to do this is to schedule an automatic job to run off-hours to stop AEM, run the compaction and then restart AEM when complete.
To do this, I created a script, compact.sh which will automatically stop the AEM server, perform the compaction, and restarting AEM. This script is based on others I’ve seen online, however, the advantage here is that this one will stop the AEM server and fully wait until it is stopped before starting the compaction. In order to use the script, you should:
- Create a folder help as a sibling to crx-quickstart
- Download the appropriate oak-run.jar into the help folder
- Download the compact.sh into the help folder
- Add a cron trigger to run the script periodically, here we do it at 5:00 AM on Saturdays:
Check out compact.sh on GitHub
Compacting a Whole Environment
So how do you run compaction across an entire environment without causing downtime? To do this, I created a script that will sequentially stop the instances in an environment and the associated dispatchers, ensuring the load balancer will direct traffic to the alternate instance during the compaction process.
This script is set up to run in a 2-publish, single-author environment, but you could adapt it to more significant buildouts. To use the script, deploy the compaction script to all of the servers, then replace the relevant server information in the ssh commands below for your particular environment.
So how do you run compaction across an entire environment without causing downtime? To do this, I created a script that will sequentially stop the instances in an environment and the associated dispatchers, ensuring the load balancer will direct traffic to the alternate instance during the compaction process.
This script is set up to run in a 2-publish, single-author environment, but you could adapt it to more significant buildouts. To use the script, deploy the compaction script to all of the servers, then replace the relevant server information in the ssh commands below for your particular environment.
#!/bin/bash cat << EOF WARNING!!! ------- This script will run compaction on the Prod environment. During the course of this operation, the Author and Publish AEM Instances will not be available. Please ensure before starting appropriate backups have been taken! EOF read -p "Do you want to continue? (y/n) " CONT if [ $CONT = "y" ]; then echo "Starting compaction of Prod environment..." echo "Stopping Author Dispatcher..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-author.prod.client.com 'sudo service httpd stop' echo "Running compaction script in Author..." ssh -i ~/.ssh/client-prod.pem -t user@aem-author.prod.client.com 'sudo su - aem /opt/aem/help/compact.sh' echo "Stopping Publish Dispatcher 1..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-publish-01.client.com 'sudo service httpd stop' echo "Running compaction script in Publish 1..." ssh -i ~/.ssh/client-prod.pem -t user@aem-publish-01.client.com 'sudo su - aem /opt/aem/help/compact.sh' echo "Starting Publish Dispatcher 1..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-publish-01.client.com 'sudo service httpd start' echo "Waiting for ELB resumption..." sleep 5m echo "Stopping Apache 2..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-publish-02.client.com 'sudo service httpd stop' echo "Running compaction script in Publish 2..." ssh -i ~/.ssh/client-prod.pem -t user@aem-publish-02.client.com 'sudo su - aem /opt/aem/help/compact.sh' echo "Starting Apache 2..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-publish-02.client.com 'sudo service httpd start' echo "Starting Author Dispatcher..." ssh -i ~/.ssh/client-prod.pem -t user@dispatcher-author.prod.client.com 'sudo service httpd start' echo "Prod Compacted!" fiCompacting a Local Instance
I also updated the aem-mgr.sh script I described in
Managing Multiple AEM Instances to add a new compaction option.
This script will not stop and start AEM but will run compaction on your local author and publish instances. In order to enable compaction, update every local
the instance you would want to compact with the following:
- Create a folder help as a sibling to crx-quickstart
- Download the appropriate oak-run.jar into the help folder
Looking forward to AEM 6.3
With the upcoming release of AEM 6.3, we anticipate support for online compaction. This will significantly ease the maintenance of AEM by eliminating the need for offline compaction. In the meantime, I hope this article is helpful for anyone using AEM 6.0, 6.1 or 6.2.
With the upcoming release of AEM 6.3, we anticipate support for online compaction. This will significantly ease the maintenance of AEM by eliminating the need for offline compaction. In the meantime, I hope this article is helpful for anyone using AEM 6.0, 6.1 or 6.2.
No comments:
Post a Comment
If you have any doubts or questions, please let us know.