Hi Swapnil, +1 for the approach.Yeah you can create a forwarding rule with the external IP and associate with the target pool.
Thanks, Gayan On Tue, Apr 21, 2015 at 6:59 PM, Swapnil Patil <[email protected]> wrote: > Hi Gayan, > > Thank you for your thoughts. > > Okay. So if no HA Proxy to be used, my approach would be as follows. > > Whenever topology change event is received this new load balancer > extension will do following things. > > for each service > for each cluster of the service > if a target pool is not created for this cluster > then > create a target pool > add all members of the cluster to target pool > add ID of target pool to the map say 'clusterTargetPool' > else > get ID of the target pool using map 'clusterTargetPool' > add/remove instances from target pool as necessary to match with cluster > members > > create a forwarding rule with an external IP and associate the above > target pool to this forwarding rule > > for each hostname in this cluster > add DNS entry or /etc/hosts entry to use the exterrnal IP of forwarding > rule for this hostname > done > > add this forwarding rule to a map say 'clusterForwardingRules' > done > done > > Remove unnecessary target pools and forwarding rules. > > Could you please provide feedback on this approach? > > Thanks and Regards, > Swapnil > > On Tue, Apr 21, 2015 at 4:02 PM, Gayan Gunarathne <[email protected]> wrote: > >> Hi Swapnil, >> >> IMO also we don't need HAProxy to do the port switching. As we are using >> target pool for each cluster and you can assign the IP address to a >> forwarding rule which is associate with the thread pool. Whenever you >> access the service attach with the IP, it will forward the traffic into one >> of these instances. >> But you can refer the extension API of the HAProxy load balancer [1].That >> would help you to fetch the topology information in real time and update >> the configuration accordingly. >> >> As Imesh mention additionally we can map external IP address to a >> hostname by using the /etc/host or DNS entry. >> >> [1] >> https://github.com/apache/stratos/tree/master/extensions/load-balancer/haproxy-extension >> >> Thanks, >> Gayan >> >> >> On Tue, Apr 21, 2015 at 11:31 AM, Swapnil Patil <[email protected]> >> wrote: >> >>> Hi Imesh, >>> >>> Thank you for your input. >>> >>> Yes, I agree that we should create a target pool for each cluster. But >>> as far as I know, we can't assign IP address to a target pool. We can >>> assign IP address to a forwarding rule and a target pool will be associated >>> with a forwarding rule. Also forwarding rule can filter requests based on >>> the port number. >>> >>> Yes, we could map external IP of forwarding rule to a hostname by using >>> DNS entry or by using /etc/hosts. >>> >>> But I have one doubt, each service has a port and proxy port. Now I >>> assume that 'proxy port' is used while contacting a load balancer and load >>> balancer will send the request on port value 'port' of an instance. Please >>> correct me if I am wrong here. >>> >>> If this port-proxy port scenario I have assumed is correct, then I am >>> not sure which component will do this switching of port value of requests >>> if we don't use HA Proxy. >>> >>> Could you please let me know if I have misinterpreted anything or this >>> port switching can be done even if we don't use HA Proxy? >>> >>> Thanks and Regards, >>> Swapnil Patil >>> IIIT Hyderabad >>> >>> On Mon, Apr 20, 2015 at 11:05 PM, Imesh Gunaratne <[email protected]> >>> wrote: >>> >>>> Hi Swapnil, >>>> >>>> Thanks for your response on this. IMO we could achieve this >>>> functionality without having to use a haproxy instance. >>>> >>>> The concept we have here is to group all the members of a cluster and >>>> use a hostname to load balance incoming requests among them. With GCE what >>>> we can do is to create a target pool for each cluster and either have a >>>> dedicated external IP address for each target pool or use different ports >>>> on the same external IP address to access them. >>>> >>>> As an additional step we could map the external IP address to a >>>> hostname by using a DNS entry or by using /etc/hosts. >>>> >>>> Thanks >>>> >>>> On Mon, Apr 20, 2015 at 9:57 PM, Swapnil Patil <[email protected]> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> I have proposed a solution for the project on $subject where I am >>>>> using an HA Proxy between incoming request and Google Compute Engine (GCE) >>>>> load balancing components. >>>>> >>>>> I have been advised to provide more description regarding why I am >>>>> using HA Proxy in my proposed solution. >>>>> >>>>> Please find below the reason for the same. >>>>> >>>>> Stratos needs to route traffic based on the hostname field of the >>>>> incoming request. I have proposed to use Network Load Balancing of Google >>>>> Compute Engine (GCE) which does not provide any central component that >>>>> makes routing decisions based on the hostname field of the request. >>>>> >>>>> GCE network load balancing has following concepts >>>>> 1. Target pool - a set of instances. In Stratos, a cluster can be >>>>> treated as target pool. >>>>> 2. Forwarding rule - A forwarding rule has an external IP, a port >>>>> range, a target pool. Whenever a request is made to this external IP with >>>>> port numbers specified in the port range, the request is routed to the >>>>> specified target pool. >>>>> >>>>> As GCE network load balancing does not have any mechanism to route >>>>> traffic based on hostname, I proposed to use HA Proxy between incoming >>>>> requests and GCE load balancing components. >>>>> >>>>> If we use HA Proxy, we can add a rule saying which forwarding rule >>>>> should be used for a particular combination of hostname, protocol and >>>>> port. >>>>> So forwarding rules of GCE load balancing will act as backend instances of >>>>> HA Proxy. >>>>> >>>>> So overall flow would be as follows >>>>> 1. HA Proxy decides which backend (forwarding rule) to use based on >>>>> the incoming request. >>>>> 2. Request is delegated to the GCE forwarding rule associated with >>>>> that backend. >>>>> 3. Forwarding rule of GCE routes the incoming request to the target >>>>> pool which is specified in the rule. >>>>> 4. Target pool routes the incoming request to a particular instance in >>>>> the pool i.e. an instance in the cluster. >>>>> >>>>> This is what I thought would be an appropriate solution. I would >>>>> appreciate if anybody has any thoughts on this. >>>>> >>>>> Thanks and Regards, >>>>> Swapnil Patil >>>>> IIIT Hyderabad >>>>> >>>> >>>> >>>> >>>> -- >>>> Imesh Gunaratne >>>> >>>> Technical Lead, WSO2 >>>> Committer & PMC Member, Apache Stratos >>>> >>> >>> >> >> >> -- >> >> Gayan Gunarathne >> Technical Lead >> WSO2 Inc. (http://wso2.com) >> email : [email protected] | mobile : +94 766819985 >> >> > > -- Gayan Gunarathne Technical Lead WSO2 Inc. (http://wso2.com) email : [email protected] | mobile : +94 766819985
