For your cluster to perform correctly, all nodes must have the same configurations. For example, in an ESB cluster, if node 1 does not have a proxy service that the other nodes have, any time the ELB routes a request for that proxy service to node 1, an error will be returned. This inconsistency of status across the nodes breaks the clustering model where all nodes are viewed virtually as a single system.
To prevent this problem, all Carbon-based products use Deployment Synchronizer (DepSync) to ensure the same status is maintained across all nodes in the cluster. It maintains a central repository of the <PRODUCT_HOME>/repository/deployment/server
folder, which is where deployment configurations are stored for all Carbon-based products, and uses that repository to synchronize the nodes. This page describes how to configure DepSync in the following sections:
Setting up the repository
The DepSync is of two types as follows:
Registry-based DepSync
<Coming up soon!>
SVN-based DepSync
This section describes how to set up the DepSync repository in Subversion (SVN). Although DepSync can use the Subversion package installed on the local server, it is not recommended for production, so use the SVNKit instead as described in the following steps. If you want to learn more about installing Subversion specifically on Fedora 18/17 and CentOS/Red Hat (RHEL), see http://www.if-not-true-then-false.com/2010/install-svn-subversion-server-on-fedora-centos-red-hat-rhel/.
- Download and install SVNKit (
svnClientBundle-1.0.0.jar
) from http://dist.wso2.org/tools/svnClientBundle-1.0.0.jar to the<PRODUCT_HOME>/repository/
components/dropins
folder. - In a console window, enter the following command to create a new repository:
svnadmin create <PathToRepository>/<RepoName>
For example:
svnadmin create ~/depsyncrepo Open
<PathToRepository>/<RepoName>
/conf/svnserve.conf
and set following lines to configure authentication for the new repository.
anon-access = none
(Specifies what kind of access anonymous users have; in this case, none)
auth-access = write
(Specifies what authenticated users can do; in this case, they can write, which also includes reading)
password-db = passwd
(Specifies the source of authentication; in this case, the file namedpasswd
, which resides in the same directory assvnserve.conf
)Open
<PathToRepository>/<RepoName>/conf/passwd
and add the following line in the format of<username>:<password>
to add a new user:
repouser:repopassword
The SVN repository is now available with the user credentials you specified. If you want test and further configure the repository, see the following references:
- http://queens.db.toronto.edu/~nilesh/linux/subversion-howto/
- https://help.ubuntu.com/community/Subversion
- http://www.civicactions.com/blog/2010/may/25/how_set_svn_repository_7_simple_steps
After you have created the repository, the next step is to enable DepSync on the manager and worker nodes.
Enabling DepSync on the manager node
You configure DepSync in the <PRODUCT_HOME>/repository/conf/carbon.xml
file on the manager node by making the following changes in the <DeploymentSynchronizer>
tag:
- Enable the DepSync feature:
<Enabled>true</Enabled>
- Automatically commit local repository changes to the central repository (only enable this on the manager node, which is the node that receives server admin requests as per our deployment pattern):
<AutoCommit>true</AutoCommit>
- Automatically update the local repository with changes from the central repository:
<AutoCheckout>true</AutoCheckout>
- Specify the repository type (in this case, Subversion):
<RepositoryType>svn</RepositoryType>
- Specify the location of the repository with the access protocol:
<SvnUrl>file://<PathToRepository>/<RepoName>/</SvnUrl>
- Specify the user name you defined in the last section:
<SvnUser>repouser</SvnUser>
- Specify the password you defined in the last section:
<SvnPassword>repopassword</SvnPassword>
- Enable tenant-specific configurations if needed:
<SvnUrlAppendTenantId>true</SvnUrlAppendTenantId>
The final configuration for the management node should be similar to the following:
<DeploymentSynchronizer> <Enabled>true</Enabled> <AutoCommit>true</AutoCommit> <AutoCheckout>true</AutoCheckout> <RepositoryType>svn</RepositoryType> <SvnUrl>https://svn.example.com/depsync.repo/</SvnUrl> <SvnUser>repouser</SvnUser> <SvnPassword>repopassword</SvnPassword> <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId> </DeploymentSynchronizer>
Now that we have completed configuring DepSync on the manager node, we will configure it on the worker nodes.
Enabling DepSync on the worker nodes
You enable DepSync on the worker nodes the same way as on the manager node, with one change: set <AutoCommit>false</AutoCommit>
, since worker nodes do not handle server admin requests.
Therefore, the final configuration for worker nodes will be as follows:
<DeploymentSynchronizer> <Enabled>true</Enabled> <AutoCommit>false</AutoCommit> <AutoCheckout>true</AutoCheckout> <RepositoryType>svn</RepositoryType> <SvnUrl>https://svn.example.com/depsync.repo/</SvnUrl> <SvnUser>repouser</SvnUser> <SvnPassword>repopassword</SvnPassword> <SvnUrlAppendTenantId>true</SvnUrlAppendTenantId> </DeploymentSynchronizer>
You have now configured DepSync for the cluster, which will ensure that all nodes in the cluster will have the same configurations.