Upgrades
This section provides all necessary information to upgrade Apache Brooklyn for both the RPM/DEB and Tarball packages.
Backwards Compatibility
Apache Brooklyn version 0.12.0 onward runs primarily inside a Karaf container. When upgrading from 0.11.0 or below, this update changes the mechanisms for launching Brooklyn. This will impact any custom scripting around the launching of Brooklyn, and the supplying of command line arguments.
Use of the lib/dropins
and lib/patch
folders will no longer work (because Karaf does not support that kind of classloading).
Instead, code must be built and installed as OSGi bundles.
Upgrading Brooklyn
Use of RPM and DEB is now recommended where possible, rather than the tar.gz. This entirely replaces the previous install.
CentOS 7.x is recommended over CentOS 6.x (note: the RPM will not work on CentOS 6.x)
Upgrade from Apache Brooklyn 0.12.0 onward
Hint: in the top right of this page are buttons to select an installation method. Choose your installation method to see the most appropriate instructions here.
Upgrading an RPM or DEB package
Important! Backup persisted state and custom configuration, in case you need to rollback to a previous version.
By default, persisted state is located at
/var/lib/brooklyn
. ThepersistenceDir
andpersistenceLocation
are configured in the file/etc/brooklyn/org.apache.brooklyn.osgilauncher.cfg
. The persistence details will be logged in/var/log/brooklyn/brooklyn.info.log
at startup time.Configuration files are in
/etc/brooklyn
.
Upgrade Apache Brooklyn:
Download the new RPM/DEB package
Upgrade Apache Brooklyn:
# CentOS / RHEL sudo yum upgrade apache-brooklyn-xxxx.noarch.rpm # Ubuntu / Debian sudo dpkg -i apache-brooklyn-xxxx.deb
If there are conflicts in configuration files (located in
/etc/brooklyn
), the upgrade will behave differently based on the package you are using:- RPM: the upgrade will keep the previously installed one and save the new version, with the suffix
.rpmsave
. You will then need to check and manually resolve those. - DEB: the upgrade will ask you what to do.
- RPM: the upgrade will keep the previously installed one and save the new version, with the suffix
Start Apache Brooklyn:
# CentOS 7 / RHEL sudo systemctl start brooklyn # CentOS 6 and older sudo initctl start brooklyn # Ubuntu / Debian start brooklyn
Wait for Brooklyn to be running (i.e. its web-console is responsive)
Upgrading using a .tar.gz archive
Stop Apache Brooklyn:
./bin/stop brooklyn
If this does not stop it within a few seconds (as checked with
sudo ps aux | grep karaf
), then usesudo kill <JAVA_PID>
Important! Backup persisted state and custom configuration.
By default, persisted state is located at
~/.brooklyn/brooklyn-persisted-state
. ThepersistenceDir
andpersistenceLocation
are configured in the file./etc/org.apache.brooklyn.osgilauncher.cfg
. The persistence details will be logged in./log/brooklyn.info.log
at startup time.Configuration files are in
./etc/
. Any changes to these configuration files will need to be re-applied after reinstalling Brooklyn.
Install new version of Apache Brooklyn:
Download the new tarball zip package.
Install Brooklyn:
tar -zxf apache-brooklyn-xxxx.tar.gz cd apache-brooklyn-xxxx
Restore any changes to the configuration files (see step 2).
Validate that the new release works, by starting in "HOT_BACKUP" mode.
Before starting Brooklyn, reconfigure
./etc/org.apache.brooklyn.osgilauncher.cfg
and sethighAvailabilityMode=HOT_BACKUP
. This way when Brooklyn is started, it will only read and validate the persisted state and will not write into it.Start Apache Brooklyn:
./bin/start brooklyn
Check whether you have rebind ERROR messages in
./log/brooklyn.info.log
, e.g.sudo grep -E "WARN|ERROR" /opt/brooklyn/log/brooklyn.debug.log
. If you do not have such errors you can proceed.Stop Apache Brooklyn:
./bin/stop brooklyn
Change the
highAvailabilityMode
to the default (AUTO) by commenting it out in./etc/org.apache.brooklyn.osgilauncher.cfg
.
Start Apache Brooklyn:
./bin/start brooklyn
Wait for Brooklyn to be running (i.e. its web-console is responsive).
Update the catalog, using the br command:
Download the br tool.
Login with br:
br login http://localhost:8081 <user> <password>
.Update the catalog:
br catalog add /opt/brooklyn/catalog/catalog.bom
.
Upgrade from Apache Brooklyn 0.11.0 and below
Hint: in the top right of this page are buttons to select an installation method. Choose your installation method to see the most appropriate instructions here.
Upgrading an RPM or DEB package
Stop Apache Brooklyn:
# CentOS 7 / RHEL sudo systemctl stop brooklyn # CentOS6 and older sudo initctl stop brooklyn # Ubuntu / Debian stop brooklyn
If this does not stop it within a few seconds (as checked with
sudo ps aux | grep brooklyn
), then usesudo kill <JAVA_PID>
.Important! Backup persisted state and custom configuration.
By default, persisted state is located at
/opt/brooklyn/.brooklyn/
.. ThepersistenceDir
andpersistenceLocation
are configured in the file./etc/org.apache.brooklyn.osgilauncher.cfg
. The persistence details will be logged in./log/brooklyn.info.log
at startup time.Configuration files are in
./etc/
. Any changes to these configuration files will need to be re-applied after reinstalling Brooklyn.
Delete the existing Apache Brooklyn install:
Remove Brooklyn package:
# CentOS / RHEL sudo yum erase apache-brooklyn # Ubuntu / Debian sudo dpkg -r apache-brooklyn
On CentOS 7 run
sudo systemctl daemon-reload
.Confirm that Brooklyn is definitely not running (see step 1 above).
Delete the Brooklyn install directory:
sudo rm -r /opt/brooklyn
as well as the Brooklyn log directory:sudo rm -r /var/log/brooklyn/
Make sure you have Java 8. By default CentOS images come with JRE6 which is incompatible version for Brooklyn. If CentOS is prior to 6.8 upgrade nss:
yum -y upgrade nss
Install new version of Apache Brooklyn:
Download the new RPM/DEB package.
Install Apache Brooklyn:
# CentOS / RHEL sudo yum install apache-brooklyn-xxxx.noarch.rpm # Ubuntu / Debian sudo dpkg -i apache-brooklyn-xxxx.deb
Restore the persisted state and configuration.
Stop the Brooklyn service:
# CentOS 7 / RHEL sudo systemctl stop brooklyn # CentOS 6 and older sudo initctl stop brooklyn # Ubuntu / Debian stop brooklyn
Confirm that Brooklyn is no longer running (see step 1).
Restore the persisted state directory into
/var/lib/brooklyn
and any changes to the configuration files (see step 2). Ensure owner/permissions are correct for the persisted state directory, e.g.:sudo chown -r brooklyn:brooklyn /var/lib/brooklyn
Validate that the new release works, by starting in "HOT_BACKUP" mode.
Before starting Brooklyn, reconfigure
/etc/brooklyn/org.apache.brooklyn.osgilauncher.cfg
and sethighAvailabilityMode=HOT_BACKUP
. This way when Brooklyn is started, it will only read and validate the persisted state and will not write into it.Start Apache Brooklyn:
# CentOS 7 / RHEL sudo systemctl start brooklyn # CentOS 6 and older sudo initctl start brooklyn # Ubuntu / Debian start brooklyn
Check whether you have rebind ERROR messages in the Brooklyn logs, e.g.
sudo grep -E "Rebind|WARN|ERROR" /var/log/brooklyn/brooklyn.debug.log
. If you do not have such errors you can proceed.Stop Brooklyn:
# CentOS 7 / RHEL sudo systemctl stop brooklyn # CentOS 6 and older sudo initctl stop brooklyn # Ubuntu / Debian stop brooklyn
Change the
highAvailabilityMode
to the default (AUTO) by commenting it out in./etc/org.apache.brooklyn.osgilauncher.cfg
.
Start Apache Brooklyn:
# CentOS 7 / RHEL sudo systemctl start brooklyn # CentOS 6 and older sudo initctl start brooklyn # Ubuntu / Debian start brooklyn
Wait for Brooklyn to be running (i.e. its web-console is responsive).
Update the catalog, using the br command:
Download the br tool (i.e. from the "CLI Download" link in the web-console).
Login with br:
br login http://localhost:8081 <user> <password>
.Update the catalog:
br catalog add /opt/brooklyn/catalog/catalog.bom
.
Upgrading using a .tar.gz archive
Same instructions as above.
Rollback
This section applies only with you are using the RPM/DEB packages. To perform a rollback, please follow these instructions:
# CentOS / RHEL
yum downgrade apache-brooklyn.noarch
# Ubuntu Debian
dpkg -i apache-brooklyn-xxxx.deb
Note that to downgrade a DEB package is essentially installing a previous version therefore you need to download the version you want to downgrade to before hand.
How to stop your service
On systemd:
systemctl stop brooklyn
On upstart:
stop brooklyn
Web login credentials
User credentials should now be recorded in
brooklyn.cfg
.Brooklyn will still read them from both
brooklyn.cfg
and~/.brooklyn/brooklyn.properties
.Configure a username/password by modifying
brooklyn.cfg
. An example entry is:
brooklyn.webconsole.security.users=admin
brooklyn.webconsole.security.user.admin.password=password2
Persistence
If you have persisted state you wish to rebind to, persistence is now configured in the following files:
For example, to use S3 for the persisted state, add the following to brooklyn.cfg
:
brooklyn.location.named.aws-s3-eu-west-1:aws-s3:eu-west-1
brooklyn.location.named.aws-s3-eu-west-1.identity=<ADD CREDS>
brooklyn.location.named.aws-s3-eu-west-1.credential=<ADD CREDS>
To continue the S3 example, for the persisted state, add the following to org.apache.brooklyn.osgilauncher.cfg
:
persistenceLocation=aws-s3-eu-west-1
persistenceDir=<ADD HERE>
Apache Brooklyn should be stopped before this file is modified, and then restarted with the new configuration.
Note that you can not store the credentials (for e.g. aws-s3-eu-west-1) in the catalog because that catalog is stored in the persisted state. Apache Brooklyn needs to know it in order to read the persisted state at startup time.
If binding to existing persisted state, an additional command is required to update the existing catalog with the Brooklyn
0.12.0 versions. Assuming Brooklyn has been installed to /opt/brooklyn
(as is done by the RPM and DEB):
br catalog add /opt/brooklyn/catalog/catalog.bom
All existing custom jars previously added to lib/plugins (e.g. for Java-based entities) need to be converted to OSGi bundles, and installed in Karaf. The use of the "brooklyn.libraries" section in catalog.bom files will continue to work.
Upgrading Blueprints and Bundles
You can install and deploy new versions of blueprints at any time. Brooklyn tracks multiple versions of the blueprints you install, as can be seen in the catalog.
Defining and Forcing Upgrade Paths
Bundles can declare what bundles and types they can upgrade, and they can also force the removal of installed bundles and types on startup/rebind. Forcing can be useful when upgrading Brooklyn to replace any installed bundle not compatible with the newer version of Brooklyn.
To add these definitions, use the following headers in the bundle's OSGi META-INF/MANIFEST.MF
:
Brooklyn-Catalog-Force-Remove-Bundles
Brooklyn-Catalog-Force-Remove-Legacy-Items
Brooklyn-Catalog-Upgrade-For-Bundles
Brooklyn-Catalog-Upgrade-For-Types
The most common patterns are to indicate that a bundle can replace all previous versions of itself and all types therein with types in the current bundle of the same name, using:
Brooklyn-Catalog-Upgrade-For-Bundles: *
And you can indicate that previous bundles should be uninstalled, forcing the above upgrades, with:
Brooklyn-Catalog-Force-Remove-Bundles: *
The above items can also take a range syntax, e.g. "*:[1,2)"
when releasing a 2.0.0
to restrict to
versions equal to or greater than 1.0.0
but less than 2.0.0
. (Note that ranges must be quoted.)
Entries can also take comma-separated lists, and in the case of replacements, they can define
explicit renamed targets using sourceNameAndVersionRanges=targetNameAndVersion
entries.
These fields are defined in full in the
BundleUpgradeParser
's javadoc.
Upgrading the Version of Deployed Blueprints
New versions of blueprints are not automatically applied to existing deployments from older versions. This requires a rebind using the above techniques, or programmatic intervention: please ask on the mailing list for more information (and to help us identify the most common wishes in this area!).
Upgrading Systems Under Management
Blueprints can encode update processes for the systems they describe. The mechanisms for updating systems vary, depending whether it is stateless or stateful, whether following an immutable pattern (replacing components) or doing it on box (traditional, possibly taking systems out of action while upgrading), and whether applying an upgrade to many resources on a rolling fashion (repaving, blue-green). For this reason there is not a one-size-fits-all upgrade pattern to use in blueprints, but there are some common patterns that may be applicable:
- Defining an
upgrade
effector on nodes, and on a cluster to apply to all nodes - Using a config key such as
version
which can be updated and reapplied - Exposing a
deploy
effector to pass files that should be run, such as WAR files, and invoking this effector with newer versions of WAR files to install
There are many more, and if you've written some good pieces to share, please consider contributing them so others can take advantage of them!