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 来实现一个简单的 Web 服务器。例如,运行
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 选项卡以查找错误。
Grep syslog 以查找 "Octavia" 以查看来自 Octavia 的消息(尽管它们非常晦涩!)