网络服务通过neutron-lbaas服务插件提供称为“LBaaS v2”的负载平衡器功能。
LBaaS v2将监听器的概念添加到LBaaS v1负载均衡器中。 LBaaS v2允许您在单个负载平衡器IP地址上配置多个侦听器端口。
有两个参考实现LBaaS v2。 一个是基于代理的实现与HAProxy。 代理处理HAProxy配置并管理HAProxy守护程序。 另一个LBaaS v2实现,Octavia,有一个单独的API和单独的工作进程,在由Compute服务管理的虚拟机管理程序的虚拟机内构建负载均衡器。 您不需要为Octavia设置代理。
目前,v1和v2负载平衡器之间不存在迁移路径。 如果您选择从v1切换到v2,则必须重新创建所有负载平衡器,池和运行状况监视器。
负载均衡器
负载均衡器占用Neutron网络端口,并具有从子网分配的IP地址。
侦听器
负载平衡器可以侦听多个端口上的请求。 这些端口中的每一个都由侦听器指定。
池
池包含通过负载均衡器提供内容的成员的列表。
成员
成员是为负载均衡器后面的流量提供服务的服务器。 每个成员由用于提供流量的IP地址和端口指定。
健康监视器
成员可能不时离线,健康监视器将流量从没有正确响应的成员转移。 运行状况监视器与池相关联。
LBaaS v2通过不同的服务插件具有多个实现。 两个最常见的实现使用代理程序或Octavia服务。 两个实现都使用LBaaS v2 API。
1.将LBaaS v2服务插件添加到/etc/neutron/neutron.conf中的service_plugins配置指令。 插件列表用逗号分隔:
service_plugins = [existing service plugins],neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
2.将LBaaS v2服务提供程序添加到/etc/neutron/neutron_lbaas.conf的[service_providers]部分中的service_provider配置指令:
service_provider = LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default
如果您有其他网络服务插件(例如VPNaaS或FWaaS)的现有服务提供商,请将[service_providers]部分中上面显示的service_provider行作为单独的行添加。 这些配置指令是可重复的,不能以逗号分隔。
3.在/etc/neutron/lbaas_agent.ini中选择管理虚拟接口的驱动程序:
[DEFAULT]
interface_driver = INTERFACE_DRIVER
用您环境中第2层代理使用的接口驱动程序替换INTERFACE_DRIVER。 例如,openvswitch用于Open vSwitch或linuxbridge用于Linux桥。
4.运行neutron-lbaas数据库迁移:
neutron-db-manage --subproject neutron-lbaas upgrade head
5.如果您已部署LBaaS v1,现在停止LBaaS v1代理。 v1和v2代理无法同时运行。
6.启动LBaaS v2代理:
neutron-lbaasv2-agent \
--config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/lbaas_agent.ini
7.重新启动网络服务以激活新配置。 您现在可以使用LBaaS v2代理创建负载平衡器。
Octavia为负载均衡器提供了额外的功能,包括使用计算驱动程序来构建作为负载均衡器运行的实例。 实验室指南 - 在东京的OpenStack峰会上安装和配置OpenStack Octavia会议提供了Octavia的概述。
DevStack文档提供了一种简单的方法来部署Octavia并使用冗余负载均衡器实例测试服务。 如果您已在您的环境中安装和配置Octavia,则可以将网络服务配置为使用Octavia:
1.将LBaaS v2服务插件添加到/etc/neutron/neutron.conf中的service_plugins配置指令。 插件列表用逗号分隔:
service_plugins = [existing service plugins],neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2
2.将Octavia服务提供程序添加到/etc/neutron/neutron.conf的[service_providers]部分中的service_provider配置指令:
service_provider = LOADBALANCERV2:Octavia:neutron_lbaas.drivers.octavia.driver.OctaviaDriver:default
确保从[service_providers]部分删除LBaaS v1和v2服务提供程序。 它们不与Octavia一起使用。 验证所有LBaaS代理是否已停止。
3.重新启动网络服务以激活新配置。 您现在可以使用Octavia创建和管理负载均衡器。
用于管理LBaaS v2的仪表板面板可从Mitaka发行版开始提供。
1.克隆neutron-lbaas-dashboard存储库,并查看与安装的Dashboard版本相匹配的发行版分支:
$ git clone https://git.openstack.org/openstack/neutron-lbaas-dashboard
$ cd neutron-lbaas-dashboard
$ git checkout OPENSTACK_RELEASE
2.安装仪表板面板插件:
$ python setup.py install
3.将_1481_project_ng_loadbalancersv2_panel.py文件从neutron-lbaas-dashboard / enabled目录复制到Dashboard Openstack_dashboard / local / enabled目录中。
此步骤可确保在插件枚举其所有可用面板时,Dashboard可以找到该插件。
4.通过在OPENSTACK_NEUTRON_NETWORK字典中编辑local_settings.py文件并将enable_lb设置为True,在Dashboard中启用插件。
5.如果将Dashboard配置为压缩静态文件以获得更好的性能(通常通过local_settings.py中的COMPRESS_OFFLINE设置),请再次优化静态文件:
$ ./manage.py collectstatic
$ ./manage.py compress
6.重新启动Apache以激活新面板:
$ sudo service apache2 restart
要查找面板,请单击仪表板中的项目,然后单击网络下拉菜单,并选择负载平衡器。
相同的neutron命令用于具有代理或Octavia的LBaaS v2。
1.首先在网络上创建负载均衡器。 在此示例中,专用网络是具有两个Web服务器实例的隔离网络:
$ neutron lbaas-loadbalancer-create --name test-lb private-subnet
2.您可以使用neutron lbaas-loadbalancer-show命令查看负载均衡器状态和IP地址:
$ neutron lbaas-loadbalancer-show test-lb
+---------------------+------------------------------------------------+
| Field | Value |
+---------------------+------------------------------------------------+
| admin_state_up | True |
| description | |
| id | 7780f9dd-e5dd-43a9-af81-0d2d1bd9c386 |
| listeners | {"id": "23442d6a-4d82-40ee-8d08-243750dbc191"} |
| | {"id": "7e0d084d-6d67-47e6-9f77-0115e6cf9ba8"} |
| name | test-lb |
| operating_status | ONLINE |
| provider | haproxy |
| provisioning_status | ACTIVE |
| tenant_id | fbfce4cb346c4f9097a977c54904cafd |
| vip_address | 192.168.1.22 |
| vip_port_id | 9f8f8a75-a731-4a34-b622-864907e1d556 |
| vip_subnet_id | f1e7827d-1bfe-40b6-b8f0-2d9fd946f59b |
+---------------------+------------------------------------------------+
3.更新安全组以允许流量到达新的负载平衡器。 创建新的安全组以及入口规则,以允许流量进入新的负载平衡器。 负载平衡器的neutron端口在上面显示为vip_port_id。
创建安全组和规则以允许TCP端口80,TCP端口443和所有ICMP流量:
$ neutron security-group-create lbaas
$ neutron security-group-rule-create \
--direction ingress \
--protocol tcp \
--port-range-min 80 \
--port-range-max 80 \
--remote-ip-prefix 0.0.0.0/0 \
lbaas
$ neutron security-group-rule-create \
--direction ingress \
--protocol tcp \
--port-range-min 443 \
--port-range-max 443 \
--remote-ip-prefix 0.0.0.0/0 \
lbaas
$ neutron security-group-rule-create \
--direction ingress \
--protocol icmp \
lbaas
使用neutron lbaas-loadbalancer-show命令的vip_port_id将安全组应用于负载均衡器的网络端口:
$ neutron port-update \
--security-group lbaas \
9f8f8a75-a731-4a34-b622-864907e1d556
此负载平衡器处于活动状态,随时可以在192.168.1.22上提供流量。
4.在进一步移动之前,请验证负载平衡器是否响应ping:
$ ping -c 4 192.168.1.22
PING 192.168.1.22 (192.168.1.22) 56(84) bytes of data.
64 bytes from 192.168.1.22: icmp_seq=1 ttl=62 time=0.410 ms
64 bytes from 192.168.1.22: icmp_seq=2 ttl=62 time=0.407 ms
64 bytes from 192.168.1.22: icmp_seq=3 ttl=62 time=0.396 ms
64 bytes from 192.168.1.22: icmp_seq=4 ttl=62 time=0.397 ms
--- 192.168.1.22 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.396/0.402/0.410/0.020 ms
1.在负载平衡器联机的情况下,您可以为端口80上的明文HTTP流量添加侦听器:
$ neutron lbaas-listener-create \
--name test-lb-http \
--loadbalancer test-lb \
--protocol HTTP \
--protocol-port 80
2.您可以开始构建池,并向池中添加成员以在端口80上提供HTTP内容。对于此示例,Web服务器为192.168.1.16和192.168.1.17:
$ neutron lbaas-pool-create \
--name test-lb-pool-http \
--lb-algorithm ROUND_ROBIN \
--listener test-lb-http \
--protocol HTTP
$ neutron lbaas-member-create \
--subnet private-subnet \
--address 192.168.1.16 \
--protocol-port 80 \
test-lb-pool-http
$ neutron lbaas-member-create \
--subnet private-subnet \
--address 192.168.1.17 \
--protocol-port 80 \
test-lb-pool-http
3.您可以使用curl验证通过负载平衡器到您的Web服务器的连接:
$ curl 192.168.1.22
web2
$ curl 192.168.1.22
web1
$ curl 192.168.1.22
web2
$ curl 192.168.1.22
web1
在此示例中,负载平衡器使用轮转算法和后端的Web服务器之间的流量交替。
4.您可以添加运行状况监视器,以便从池中除去无响应的服务器:
$ neutron lbaas-healthmonitor-create \
--delay 5 \
--max-retries 2 \
--timeout 10 \
--type HTTP \
--pool test-lb-pool-http
在此示例中,如果运行状况监视器以两个5秒的间隔时间未通过运行状况检查,则会从池中删除服务器。 当服务器恢复并再次开始响应运行状况检查时,它会再次添加到池中。
您可以在端口443上为HTTPS通信添加另一个侦听器。 LBaaS v2在负载均衡器上提供SSL / TLS终止,但此示例采用更简单的方法,并允许加密连接在每个成员服务器上终止。
1.首先创建侦听器,附加池,然后添加成员:
$ neutron lbaas-listener-create \
--name test-lb-https \
--loadbalancer test-lb \
--protocol HTTPS \
--protocol-port 443
$ neutron lbaas-pool-create \
--name test-lb-pool-https \
--lb-algorithm LEAST_CONNECTIONS \
--listener test-lb-https \
--protocol HTTPS
$ neutron lbaas-member-create \
--subnet private-subnet \
--address 192.168.1.16 \
--protocol-port 443 \
test-lb-pool-https
$ neutron lbaas-member-create \
--subnet private-subnet \
--address 192.168.1.17 \
--protocol-port 443 \
test-lb-pool-https
2.你也可以为https池添加一个健康监视器
$ neutron lbaas-healthmonitor-create \
--delay 5 \
--max-retries 2 \
--timeout 10 \
--type HTTPS \
--pool test-lb-pool-https
负载均衡器现在控制着80和443端口的流量。
部署在公用或提供商网络上的外部客户端可访问的负载平衡器不需要分配浮动IP地址。 外部客户端可以直接访问这些负载平衡器的虚拟IP地址(VIP)。
但是,部署到专用或隔离网络上的负载平衡器需要分配浮动IP地址,如果它们必须可由外部客户端访问。 要完成此步骤,您必须在私有和公共网络之间有一个路由器和一个可用的浮动IP地址。
您可以使用本节开头的neutron lbaas-loadbalancer-show命令来查找vip_port_id。 vip_port_id是分配给负载平衡器的网络端口的ID。 您可以使用neutron floatingip-associate将自由浮动IP地址与负载均衡器关联:
$ neutron floatingip-associate FLOATINGIP_ID LOAD_BALANCER_PORT_ID
配额可用于限制负载平衡器和负载平衡器池的数量。 默认情况下,两个配额都设置为10。
您可以使用neutron quota-update命令调整配额:
$ neutron quota-update --tenant-id TENANT_UUID --loadbalancer 25
$ neutron quota-update --tenant-id TENANT_UUID --pool 50
设置为-1会禁用租户的配额。
LBaaS v2代理每6秒为每个负载平衡器收集四种类型的统计信息。 用户可以使用neutron lbaas-loadbalancer-stats命令查询这些统计信息:
$ neutron lbaas-loadbalancer-stats test-lb
+--------------------+----------+
| Field | Value |
+--------------------+----------+
| active_connections | 0 |
| bytes_in | 40264557 |
| bytes_out | 71701666 |
| total_connections | 384601 |
+--------------------+----------+
active_connections计数是代理轮询负载平衡器时处于活动状态的连接总数。 自上次启动负载平衡器以来,其他三个统计信息是累积的。 例如,如果负载平衡器由于系统错误或配置更改而重新启动,则这些统计信息将被重置。