Difference between revisions of "Neutron/LBaaS/HowToRun"
(→System Setup) |
|||
(30 intermediate revisions by 18 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Warning|header='''Warning - Deprecated'''|body='''As of the Queens OpenStack release cycle neutron-lbaas and neutron-lbaas-dashboard are now deprecated. Please see [[Neutron/LBaaS/Deprecation]]'''}} | ||
== Getting the Code == | == Getting the Code == | ||
− | + | LBaaS introduces changes in the following modules: (currently all changes are in master branch) | |
− | * | + | * neutron |
− | * python- | + | * python-neutronclient |
− | * devstack | + | * horizon |
+ | * devstack | ||
== Devstack Setup == | == Devstack Setup == | ||
Add the following lines to your localrc: | Add the following lines to your localrc: | ||
+ | <pre>enable_plugin neutron-lbaas https://github.com/openstack/neutron-lbaas.git | ||
+ | </pre> | ||
+ | <pre>enable_plugin octavia https://github.com/openstack/octavia.git | ||
+ | </pre> | ||
+ | <pre>ENABLED_SERVICES+=,q-lbaasv2 | ||
+ | </pre> | ||
+ | <pre>ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api | ||
+ | </pre> | ||
− | <pre> | + | Then run stack.sh |
− | + | ||
+ | After stack.sh completes you'll be able to manage your Load Balancer via the CLI tools and within Horizon | ||
+ | |||
+ | ==Ubuntu Packages Setup== | ||
+ | |||
+ | Install octavia with your favorite distribution: | ||
+ | |||
+ | <pre>pip install octavia </pre> | ||
+ | |||
+ | And edit the service_plugins in [DEFAULT] section in neutron.conf to enable the service: | ||
+ | <pre>sudo sed -i.bak "s/\#\ service_plugins\ \=/service_plugins = neutron.plugins.services.agent_loadbalancer.plugin.LoadBalancerPluginv2/g" /etc/neutron/neutron.conf</pre> | ||
+ | |||
+ | Finally enable the Load Balancer section in Horizon by editing <pre>/etc/openstack-dashboard/local_settings.py</pre> and changing: | ||
+ | |||
+ | <pre> | ||
+ | OPENSTACK_NEUTRON_NETWORK = { | ||
+ | 'enable_lb': False | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | to | ||
+ | |||
+ | <pre> | ||
+ | OPENSTACK_NEUTRON_NETWORK = { | ||
+ | 'enable_lb': True | ||
+ | } | ||
+ | </pre> | ||
− | + | Once done restart your Neutron services and Apache to start using. | |
== Topology Setup == | == Topology Setup == | ||
Line 27: | Line 63: | ||
Get the UUID of the private subnet. | Get the UUID of the private subnet. | ||
− | <pre> | + | <pre>neutron subnet-list</pre> |
− | Create a | + | Create a Loadbalancer: |
− | <pre> | + | <pre>neutron lbaas-loadbalancer-create --name lb1 private-subnet</pre> |
− | Create | + | Create a Listener: |
+ | <pre>neutron lbaas-listener-create --loadbalancer lb1 --protocol HTTP --protocol-port 80 --name listener1</pre> | ||
− | + | Create a Pool: | |
− | + | <pre>neutron lbaas-pool-create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1 </pre> | |
− | |||
− | Create | + | Create Members (using the IPs of server1 and server2): |
− | + | <pre> | |
− | <pre> | + | neutron lbaas-member-create --subnet private-subnet --address <server1-ip> --protocol-port 80 pool1 |
− | + | neutron lbaas-member-create --subnet private-subnet --address <server2-ip> --protocol-port 80 pool1</pre> | |
− | Create a | + | Create a Healthmonitor and associate it with the pool: |
− | <pre> | + | <pre>neutron lbaas-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3 --pool pool1</pre> |
− | note the address for use below. | + | note the address for use below. |
== Validation == | == Validation == | ||
− | We now have two hosts with a load balancer pointed at them, but those hosts are serving up any HTTP content. | + | We now have two hosts with a load balancer pointed at them, but those hosts are not serving up any HTTP content. |
A simple trick is to use netcat on the hosts to implement a simple webserver. For example, run: | A simple trick is to use netcat on the hosts to implement a simple webserver. For example, run: | ||
− | <pre>while true; do echo -e 'HTTP/1.0 200 OK\r\n\r\n<servername>' | sudo nc -l -p 80 ; done </pre> | + | <pre>while true; do echo -e 'HTTP/1.0 200 OK\r\nContent-Length: 8\r\n\r\n<servername>' | sudo nc -l -p 80 ; done </pre> |
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! | 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 | + | If you have python installed, you can also create an index.html with the text "server1" or "server2" then in the same directory run |
+ | |||
+ | <pre>sudo python -m SimpleHTTPServer 80</pre> | ||
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. | 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. | ||
Line 69: | Line 107: | ||
wget -O - http://<server2-ip> </pre> | wget -O - http://<server2-ip> </pre> | ||
− | Then use wget to hit the VIP IP several times in succession. You should bounce between seeing server1 and server2. | + | Then use wget to hit the load balancer IP(VIP IP) several times in succession. You should bounce between seeing server1 and server2. |
<pre>wget -O - http://<vip-ip> | <pre>wget -O - http://<vip-ip> | ||
Line 75: | Line 113: | ||
wget -O - http://<vip-ip> | wget -O - http://<vip-ip> | ||
wget -O - http://<vip-ip> </pre> | wget -O - http://<vip-ip> </pre> | ||
+ | |||
+ | If you get some trouble to curl vip-ip, can try the following method: | ||
+ | <pre>sudo ip netns list | ||
+ | qdhcp-xxx | ||
+ | qrouter-xxx | ||
+ | </pre> | ||
+ | <pre>sudo ip netns exec qrouter-xxx curl -v <vip-ip> </pre> | ||
Full list of LBaaS CLI commands is available at [[Quantum/LBaaS/CLI]] | Full list of LBaaS CLI commands is available at [[Quantum/LBaaS/CLI]] | ||
Line 82: | Line 127: | ||
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. | 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 | + | Use "screen -x stack" to view the q-svc ,q-lbaas, o-cw, o-api tabs for errors. |
− | Grep syslog for " | + | Grep syslog for "Octavia" to see messages from Octavia (though they are quite cryptic!) |
Latest revision as of 00:22, 4 April 2019
As of the Queens OpenStack release cycle neutron-lbaas and neutron-lbaas-dashboard are now deprecated. Please see Neutron/LBaaS/Deprecation
Contents
Getting the Code
LBaaS introduces changes in the following modules: (currently all changes are in master branch)
- neutron
- python-neutronclient
- horizon
- devstack
Devstack Setup
Add the following lines to your localrc:
enable_plugin neutron-lbaas https://github.com/openstack/neutron-lbaas.git
enable_plugin octavia https://github.com/openstack/octavia.git
ENABLED_SERVICES+=,q-lbaasv2
ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
Then run stack.sh
After stack.sh completes you'll be able to manage your Load Balancer via the CLI tools and within Horizon
Ubuntu Packages Setup
Install octavia with your favorite distribution:
pip install octavia
And edit the service_plugins in [DEFAULT] section in neutron.conf to enable the service:
sudo sed -i.bak "s/\#\ service_plugins\ \=/service_plugins = neutron.plugins.services.agent_loadbalancer.plugin.LoadBalancerPluginv2/g" /etc/neutron/neutron.confFinally enable the Load Balancer section in Horizon by editing
/etc/openstack-dashboard/local_settings.pyand changing:
OPENSTACK_NEUTRON_NETWORK = { 'enable_lb': False }
to
OPENSTACK_NEUTRON_NETWORK = { 'enable_lb': True }
Once done restart your Neutron services and Apache to start using.
Topology Setup
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.
neutron subnet-list
Create a Loadbalancer:
neutron lbaas-loadbalancer-create --name lb1 private-subnet
Create a Listener:
neutron lbaas-listener-create --loadbalancer lb1 --protocol HTTP --protocol-port 80 --name listener1
Create a Pool:
neutron lbaas-pool-create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1
Create Members (using the IPs of server1 and server2):
neutron lbaas-member-create --subnet private-subnet --address <server1-ip> --protocol-port 80 pool1 neutron lbaas-member-create --subnet private-subnet --address <server2-ip> --protocol-port 80 pool1
Create a Healthmonitor and associate it with the pool:
neutron lbaas-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3 --pool pool1
note the address for use below.
Validation
We now have two hosts with a load balancer pointed at them, but those hosts are not 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\nContent-Length: 8\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
sudo python -m SimpleHTTPServer 80
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 load balancer IP(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>
If you get some trouble to curl vip-ip, can try the following method:
sudo ip netns list qdhcp-xxx qrouter-xxx
sudo ip netns exec qrouter-xxx curl -v <vip-ip>
Full list of LBaaS CLI commands is available at Quantum/LBaaS/CLI
Troubleshooting
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 ,q-lbaas, o-cw, o-api tabs for errors.
Grep syslog for "Octavia" to see messages from Octavia (though they are quite cryptic!)