Neutron/LBaaS/HowToRun
从 Queens OpenStack 版本开始,neutron-lbaas 和 neutron-lbaas-dashboard 已被弃用。请参阅 Neutron/LBaaS/Deprecation
获取代码
LBaaS 引入了对以下模块的更改:(目前所有更改都在 master 分支中)
- neutron
- python-neutronclient
- horizon
- devstack
Devstack 设置
将以下行添加到您的 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
然后运行 stack.sh
stack.sh 完成后,您将能够通过 CLI 工具和 Horizon 管理您的负载均衡器
Ubuntu 软件包设置
使用您喜欢的发行版安装 octavia
pip install octavia
并编辑 neutron.conf 中 [DEFAULT] 部分的 service_plugins 以启用该服务
sudo sed -i.bak "s/\#\ service_plugins\ \=/service_plugins = neutron.plugins.services.agent_loadbalancer.plugin.LoadBalancerPluginv2/g" /etc/neutron/neutron.conf最后,通过编辑来启用 Horizon 中的负载均衡器部分
/etc/openstack-dashboard/local_settings.py并更改
OPENSTACK_NEUTRON_NETWORK = {
'enable_lb': False
}
to
OPENSTACK_NEUTRON_NETWORK = {
'enable_lb': True
}
完成后,重新启动 Neutron 服务和 Apache 即可开始使用。
拓扑设置
启动三个虚拟机,两个作为服务器,一个作为客户端。
nova boot --image <image-uuid> --flavor 1 server1 nova boot --image <image-uuid> --flavor 1 server2 nova boot --image <image-uuid> --flavor 1 client
获取私有子网的 UUID。
neutron subnet-list
创建负载均衡器
neutron lbaas-loadbalancer-create --name lb1 private-subnet
创建监听器
neutron lbaas-listener-create --loadbalancer lb1 --protocol HTTP --protocol-port 80 --name listener1
创建池
neutron lbaas-pool-create --lb-algorithm ROUND_ROBIN --listener listener1 --protocol HTTP --name pool1
创建成员(使用 server1 和 server2 的 IP)
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
创建健康监视器并将其与池关联
neutron lbaas-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3 --pool pool1
记下地址以备后用。
验证
我们现在有两个指向负载均衡器的主机,但这些主机没有提供任何 HTTP 内容。
一个简单的技巧是在主机上使用 netcat 来实现一个简单的网络服务器。例如,运行
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
将 <servername> 替换为 "server1" 和 "server2"。服务器启动后,您将看到传入的 HTTP GET 请求......这就是负载均衡器健康检查的作用!
如果安装了 python,您还可以创建一个包含文本 "server1" 或 "server2" 的 index.html,然后在同一目录下运行
sudo python -m SimpleHTTPServer 80
最后,要测试真实的负载均衡,请从客户端使用 wget 确保您的请求按预期在 server1 和 server2 之间进行负载均衡。
wget -O - http://<server1-ip> wget -O - http://<server2-ip>
然后使用 wget 连续多次访问负载均衡器 IP (VIP IP)。您应该会在看到 server1 和 server2 之间切换。
wget -O - http://<vip-ip> wget -O - http://<vip-ip> wget -O - http://<vip-ip> wget -O - http://<vip-ip>
如果您在 curl vip-ip 时遇到一些问题,可以尝试以下方法
sudo ip netns list qdhcp-xxx qrouter-xxx
sudo ip netns exec qrouter-xxx curl -v <vip-ip>
LBaaS CLI 命令的完整列表可在 Quantum/LBaaS/CLI 获得
故障排除
LBaaS 的实现类似于使用命名空间的 L3 + DHCP。您可以使用 "ip netns list" 找到名为 qlbaas-<pool_id> 的命名空间,然后从该命名空间测试连接性。
使用 "screen -x stack" 查看 q-svc、q-lbaas、o-cw、o-api 选项卡以查找错误。
在 syslog 中 grep "Octavia" 以查看来自 Octavia 的消息(尽管它们非常隐晦!)