This post explains on setting up a WSO2 Enterprise Integrator (WSO2 EI)'s 2 node non worker manager cluster in 5 simple steps.
1. Setting up database
2. Configuring datasource, reqistry and user-mgt
3. Enabling clusting in axis2.xml
4. Configuring Node 2
5. Configure a common deployment directory
I will be using WSO2 EI 6.1.1 and MySQL 5.7 as the database.
I will be using WSO2 EI 6.1.1 and MySQL 5.7 as the database.
1. Setting up database
Creating the database and tables
create database WSO2_EI_611_REG_DB; use WSO2_EI_611_REG_DB; source /path-to-<EI-HOME>/dbscripts/mysql5.7.sql; create database WSO2_EI_611_UM_DB; use WSO2_EI_611_UM_DB; source /path-to-<EI-HOME>/dbscripts/mysql5.7.sql;
Adding the MySQL driver
Add the MySQL driver jar to <EI-HOME>/lib directory
2. Configuring datasource, reqistry and user-mgt
master-datasources.xml
Update the <EI-HOME>/conf/datasources/master-datasources.xml with following data source configuration (You may need to modify the username / password / URL
Update the <EI-HOME>/conf/user-mgt.xml with following. Remove the existing dataSource property and add the following property to UserManger/Realm/Configuration<datasource> <name>WSO2_SHARED_REG_DB</name> <description>The datasource is used for shared config and governance registry</description> <jndiConfig> <name>jdbc/WSO2SharedDB</name> </jndiConfig> <definition type="RDBMS"> <configuration> <url>jdbc:mysql://localhost:3306/WSO2_EI_611_REG_DB</url> <username>user</username> <password>password</password> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <maxActive>50</maxActive> <maxWait>60000</maxWait> <testOnBorrow>true</testOnBorrow> <validationQuery>SELECT 1</validationQuery> <validationInterval>30000</validationInterval> </configuration> </definition> </datasource> <datasource> <name>WSO2_UM_DB</name> <description>The datasource is used for user management</description> <jndiConfig> <name>jdbc/WSO2UmDB</name> </jndiConfig> <definition type="RDBMS"> <configuration> <url>jdbc:mysql://localhost:3306/WSO2_EI_611_UM_DB</url> <username>user</username> <password>password</password> <driverClassName>com.mysql.jdbc.Driver</driverClassName> <maxActive>50</maxActive> <maxWait>60000</maxWait> <testOnBorrow>true</testOnBorrow> <validationQuery>SELECT 1</validationQuery> <validationInterval>30000</validationInterval> </configuration> </definition> </datasource>
registry.xml
Update the <EI-HOME>/conf/registry.xml with following
(Please keep the existing dbConfig as it is and add the following as new)<dbConfig name="sharedregistry"> <dataSource>jdbc/WSO2SharedDB</dataSource> </dbConfig> <remoteInstance url="https://localhost:9443/registry"> <id>instanceid</id> <dbConfig>sharedregistry</dbConfig> <readOnly>false</readOnly> <enableCache>true</enableCache> <registryRoot>/</registryRoot> </remoteInstance> <mount path="/_system/config" overwrite="true"> <instanceId>instanceid</instanceId> <targetPath>/_system/esbnodes</targetPath> </mount> <mount path="/_system/governance" overwrite="true"> <instanceId>instanceid</instanceId> <targetPath>/_system/governance</targetPath> </mount>
user-mgt.xml
<Property name="dataSource">jdbc/WSO2UmDB</Property>
3. Enabling clusting in axis2.xml
By editing the following in <EI-HOME>/conf/axis2/axis2.xml enable the nonWokerManger cluster
(4100 is previous node(Node 1)'s, local port number)
Edit the <EI-HOME>/conf/carbon.xml as follows (eg: 2 as offset) <Offset>2</Offset>
node2:repository$> rm -r deployment/
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">
<parameter name="clusteringPattern">nonWorkerManager</parameter>
<parameter name="localMemberHost">ei.wso2.com</parameter>
ei.wso2.com has to be added to /etc/hosts. Giving the local IP address (127.0.0.1) as the localMemberHost is not recommended.
Updating the member list
<members> <member> <hostName>ei.wso2.com</hostName> <port>4200</port> </member> </members>
In this setup both the nodes are in the same machine, that's why the member's hostname and the localMemberHost are same. If you are setting up the cluster in a different machine please add the correct host name.
4. Configuring Node 2
Take a copy of the configured EI611 pack (can be name the copy as node2), And configure the following
Configure member list
Update the local member port (4200 is what we configured in the previous node(Node 1)'s, known member list)<parameter name="localMemberPort">4200</parameter>Update the member list as follows
(4100 is previous node(Node 1)'s, local port number)
<members> <member> <hostName>ei.wso2.com</hostName> <port>4100</port> </member> </members>
Configure the port offset
If the cluster is in a same machine, then the port offset must be configured inorder to avoid the port binding conflictsEdit the <EI-HOME>/conf/carbon.xml as follows (eg: 2 as offset) <Offset>2</Offset>
5. Configure a common deployment directory
Since we do not recommend the deployment synchronizer. Here we are using a file share to share the artifacts between the 2 nodes. For the other available options kindly have a look at https://docs.wso2.com/display/EI611/Clustering+the+ESB+Profile, Deploying artifacts across the nodes First remove the existing deployment directory from node2 and create a soft link to the node1's deployment directorynode2:repository$> rm -r deployment/
node2:repository$> ln -s <path-to-node1>/reposository/deployment deployment
No comments:
Post a Comment