I’m attempting to configure WSO2 ESB/GREG in a High Availability configuration, as follows:
Two GREG-ESB pairs, installed/configured on two separate Solaris servers.
Each server has an instance of GREG 4.5.3 (port offset 0) and ESB 4.7.0 (port offset 1) installed in separate installation directories.
GREG installations are configured to use ORACLE with jdbc DataSource, both connecting to the same database/schema, so adding something to one GREG is visible in the other.
ESB installations are configured with remote GREGs from above (each on the same server) and pointing to the same ORACLE database/schema for configuration/governance registry artifacts.
Tribes synchronization is enabled on all 4 installations.
We plan to use our own Load Balancer to round-robin traffic to either one or the other ESB with the idea that if one of the Solaris servers is down, we still have the full functionality on the other.
I couldn’t find an example of such HA configuration in WSO2 documentation.
The questions are:
. did anyone attempt such configuration (did it work)?
. is it even possible?
You can refer this documentation for information on deploying a cluster of Governance Registry instances to achieve load balancing and high availability.
To avoid the risk of system downtime due to failure of the ELB, you can implement a fail-proof ELB deployment. This documentation explains how to implement failover using two identical ELB setups running in active and passive modes respectively.
Related
I am looking into clustering of the Wso2 IS in here.
Does it really serve the Failover case?
How many nodes are needed for a minimum load-balance scenario?
As per the documentation, clustering is configuration between 5.1 & 5.2. Isn't it possible to achieve with same versions / much older versions?
Documentation explains how to create two node cluster with active state (both nodes are active) and fronted by a load balancer.
If you need a failover scenario, you can have a node in active state (assuming one node can serve all of your requests) and one node in passive state. If active node fails, load balancer has to direct the traffic to the passive node. So this will serve the failover scenario. You don't need to do any configuration changes in IS level for this. This can be configured in the load balancer level.
Documentation explains clustering for IS 5.1.0 and 5.2.0 versions, but not between these 2 versions. Cluster can be created with only 1 version of server nodes, but not with nodes of different versions.
I have 2 servers. The first server has WSO2 APIM, BAM, BPS and GREG installed. These products are a MYSQL database. I would like to install APIM on the second server as well and utilize the same MYSQL database. How can I successful load balance the APIM without having a front-end load balancer? Is this a feasible solution?
Any help will be greatly appreciated!
In order to properly use computing resources of both of the physical servers you have to use a load balancer. If you are planning to use a software load balancer our recommendation is Nginx. Yes, you can utilize the same MySQL database server. When it comes to databases, there are some which can be shared among two API Manager instances. But you have to create few non-shared databases as well.
For more details about load balancing WSO2 API Manager, I would like to printout following articles.
WSO2 API Manager Scalable Deployment Patterns - Part 2
Clustering WSO2 ESB 4.9 with NginX
If you need further help regarding this issue please let me know.
Thanks,
Upul
So we are migrating to Azure from a traditional IIS hosted environment.
The situation with our current solution is that there are three web services hosted in IIS under one single site. The services are all accessible via http://api.example.com/ServiceName.svc
For backward compatibility we need the same availability from Azure, Cloud Web Services. If the services are deployed as separates then they have different DNS names. And if they are bundled together then they must operate on different ports. That is my understanding anyway, meaning we are snookered.
Is it possible to get around this at all?
One solution I had was to create a very light proxy/router service that accepted requests for the three services and then routed to the appropriate internal service based on the full URL and not just the host.
I'm very new to Azure so perhaps there is something under the bonnet that can help with all of this.
Thanks
If your services are all under a single project, you should have no issue deploying them to a single cloud service (and thus, a single host name/port).
We are planning to try out WSO2 Greg and wanted to know if we use external hardware load balancer, do we still need to configure manager + worker node configuration or we can start two standalone instances connecting to same back end i.e. oracle database and load balance it via front end external load balancer?
Thanks
You can use a third-party load balancer for WSO2 GREG cluster. You do not have to use manager/worker configuration for Axis2 clustering (subDomain property) as we use with WSO2 ELB.
You will still have to configure Axis2 clustering without subDomain property. I would recommend you to use wka membership scheme and nominate few nodes as wka members in the cluster.
I want to make a cluster of Data Services Servers(DSS), and use an Enterprise Service Bus (ESB) as load balancer. In this deployment, what is the purpose of having a manager DSS in the cluster, and if there is a manager, is it a single point of failure?
These are the references which I used for load balancing and DSS clustering:
Dynamic load balancing between 3 nodes
How to install WSO2 Carbon cluster management feature?
The dynamic load balancing mechanism in WSO2 ESB, discovers the DSS members in an application group using a group communication framework and shares the load in runtime.
Load balancer is not bound or coupled to any cluster manager - it will simply distribute the load among nodes in applicationDomain.
So - in runtime - cluster manager doesn't create any single point of failure.
If you want you can setup a DSS cluster even without a cluster manager and distribute the load among the nodes via ESB.
The cluster manager - which is a component installed only to manage your cluster...
This is an extension to Prabath's answer.
DSS can be configured to work in a cluster. So that all DSS nodes act as members in a single cluster. This facilitates sharing session among each of the nodes.
Or else, you can have all DSS nodes running in isolation (using the same configuration), fronted by a load balancer (LB). Unlike the previous approach, this method does not support share sessions between DSS nodes. Thus only supports stateless services.
WSO2 ESB can act as a LB. But having a single instance of LB will make it a SPoF. And, LB can be configured to run in a cluster as well.
I don't know what's behind the decision of using an ESB instead of an ELB for LB, but it's up to you which one to use.
The manager is not a single point of failure, it's just a way to manage the entire cluster from a single management console (with limitations), and can be configured to be a worker at the same time.
Regarding the LB layer, you can use keepalived to avoid having a SPoF in the ESB acting as a LB, the same way it's done for WSO2 ELB's.
Take a look on that Failover for ELB with keepalived