Getting the Code
LBaaS introduces changes in the following modules: (currently all changes are in master branch)
Add the following lines to your localrc:
enable_service q-lbaas Q_SERVICE_PLUGINS=quantum.plugins.services.agent_loadbalancer.plugin.LoadBalancerPlugin
Then run stack.sh
Horizon LBaaS support
- AFTER stack.sh finishes, copy the local_settings file and restart the web server to load the new local_settings.
cd /opt/stack/horizon/openstack_dashboard/local cp local_settings.py.example local_settings.py sudo service apache2 restart
Now you can access the Load Balancer panel to create, view, and delete pools, vips, members and monitors.
Spin up three VMs, two to be servers, and one to be a client.
nova boot --image <image-uuid> --flavor 1 server1 nova boot --image <image-uuid> --flavor 1 server2 nova boot --image <image-uuid> --flavor 1 client
Get the UUID of the private subnet.
Create a Pool:
quantum lb-pool-create --lb-method ROUND_ROBIN --name mypool --protocol HTTP --subnet-id <subnet-id>
Create Members (using the IPs of server1 and server2):
nova list quantum lb-member-create --address <server1-ip> --protocol-port 80 mypool quantum lb-member-create --address <server2-ip> --protocol-port 80 mypool
Create a Healthmonitor and associated it with the pool:
quantum lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3 quantum lb-healthmonitor-associate <healthmonitor-uuid> mypool
Create a VIP
quantum lb-vip-create --name myvip --protocol-port 80 --protocol HTTP --subnet-id <subnet-id> mypool
note the address for use below.
We now have two hosts with a load balancer pointed at them, but those hosts are serving up any HTTP content.
A simple trick is to use netcat on the hosts to implement a simple webserver. For example, run:
while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\n<servername>' | sudo nc -l -p 80 ; done
replacing <servername> with "server1" and "server2" as appropriate. Once the server is started, you'll see incoming HTTP GET requests.. that's the load balancer health check in action!
If you have python installed, you can also create an index.html with the text "server1" or "server2" then in the same directory run: python -m SimpleHTTPServer)
Finally, to test real load balancing, from your client, use wget to make sure your requests are load-balanced across server1 and server2 as expected.
wget -O - http://<server1-ip> wget -O - http://<server2-ip>
Then use wget to hit the VIP IP several times in succession. You should bounce between seeing server1 and server2.
wget -O - http://<vip-ip> wget -O - http://<vip-ip> wget -O - http://<vip-ip> wget -O - http://<vip-ip>
Full list of LBaaS CLI commands is available at Quantum/LBaaS/CLI
LBaas is implemented similar to L3 + DHCP using namespaces. You can use "ip netns list" to find the namespace named qlbaas-<pool_id>, and then test connectivity from that namespace.
Use "screen -x stack" to view the q-svc and q-lbaas tabs for errors.
Grep syslog for "haproxy" to see messages from Haproxy (though they are quite cryptic!)