Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

A simple load balancer module for ping, tcpTCP, and udp UDP flows. This module is accessed via a REST API defined close to the OpenStack Quantum LBaaS (Load-balancer-as-a-Service) v1.0 API proposal. See http://wiki.openstack.org/Quantum/LBaaS. Since the proposal has not been final, no efforts have yet been made to confirm compatibility at this time.

The code is not considered complete at this time, but it supports basic creation and use of load balancer for icmpICMP, tcpTCP, and udp UDP services.

Limitations:

  • client records and static flows not purged after use, will exhaust switch flow tables over time
  • round robin policy among servers based on connections, not traffic volume
  • health monitoring feature not implemented yet

...

To try out the basic features:
1. Obtain floodlight master (as of 12/12/2012) or v1.0 and up.
2. Confirm net.floodlightcontroller.loadbalancer.LoadBalancer is enabled in floodlight.defaultproperties.
3. Start floodlight.
4. Start mininet with at least 8 hosts, e.g:

...


5. In mininet do 'pingall'
6. In any linux console set up the load balancer vips, pools, and members using a script such as the following:

Code Block
#!/bin/sh

curl -X POST -d '{"id":"1","name":"vip1","protocol":"icmp","address":"10.0.0.100","port":"8"}' http://localhost:8080/quantum/v1.0/vips/
curl -X POST -d '{"id":"1","name":"pool1","protocol":"icmp","vip_id":"1"}' http://localhost:8080/quantum/v1.0/pools/
curl -X POST -d '{"id":"1","address":"10.0.0.3","port":"8","pool_id":"1"}' http://localhost:8080/quantum/v1.0/members/
curl -X POST -d '{"id":"2","address":"10.0.0.4","port":"8","pool_id":"1"}' http://localhost:8080/quantum/v1.0/members/

curl -X POST -d '{"id":"2","name":"vip2","protocol":"tcp","address":"10.0.0.200","port":"100"}' http://localhost:8080/quantum/v1.0/vips/
curl -X POST -d '{"id":"2","name":"pool2","protocol":"tcp","vip_id":"2"}' http://localhost:8080/quantum/v1.0/pools/
curl -X POST -d '{"id":"3","address":"10.0.0.5","port":"100","pool_id":"2"}' http://localhost:8080/quantum/v1.0/members/
curl -X POST -d '{"id":"4","address":"10.0.0.6","port":"100","pool_id":"2"}' http://localhost:8080/quantum/v1.0/members/

curl -X POST -d '{"id":"3","name":"vip3","protocol":"udp","address":"10.0.0.150","port":"200"}' http://localhost:8080/quantum/v1.0/vips/
curl -X POST -d '{"id":"3","name":"pool3","protocol":"udp","vip_id":"3"}' http://localhost:8080/quantum/v1.0/pools/
curl -X POST -d '{"id":"5","address":"10.0.0.7","port":"200","pool_id":"3"}' http://localhost:8080/quantum/v1.0/members/
curl -X POST -d '{"id":"6","address":"10.0.0.8","port":"200","pool_id":"3"}' http://localhost:8080/quantum/v1.0/members/

7. In mininet, do 'h1 ping -c1 10.0.0.100', then do 'h2 ping -c1 10.0.0.100'. Both pings should succeed while they should have been handled by two different real hosts (10.0.0.3 and 10.0.0.4) in turn.