限制 API 服务调用的速率可确保高负载期间的操作更可靠并减少孤立对象的发生率。

如果客户端超出速率限制,则会收到 429 请求太多 HTTP 响应。响应中的 Retry-After 标头指示客户端执行进一步调用之前必须等待的时长。

您可以启用按服务进行速率限制。例如,您可能希望对 Nova API 服务调用执行比对 Neutron API 服务调用更为严格的限制。

过程

  1. viouser 用户身份登录到 OpenStack 管理服务器
  2. 如果您的部署未使用 custom.yml 文件,请将模板 custom.yml 文件复制到 /opt/vmware/vio/custom 目录。
    sudo mkdir -p /opt/vmware/vio/custom
    sudo cp /var/lib/vio/ansible/custom/custom.yml.sample /opt/vmware/vio/custom/custom.yml
  3. 在文本编辑器中打开 /opt/vmware/vio/custom/custom.yml 文件。
  4. 取消对 haproxy_throttle_period 参数的注释并将其设置为超出速率限制时客户端必须等待的秒数。
  5. 如果要为特定的 API 配置速率限制,请取消对这些服务的 max_requestsrequest_period 参数的注释,然后将其配置为所需值。

    下面列出了可以限制速率的 API 及相应的参数。

    选项

    说明

    haproxy_keystone_max_requests

    haproxy_keystone_request_period

    Keystone API

    haproxy_keystone_admin_max_requests

    haproxy_keystone_admin_request_period

    Keystone 管理员 API

    haproxy_glance_max_requests

    haproxy_glance_request_period

    Glance API

    haproxy_nova_max_requests

    haproxy_nova_request_period

    Nova API

    haproxy_nova_placement_max_requests

    haproxy_nova_placement_request_period

    Nova Placement API

    haproxy_cinder_max_requests

    haproxy_cinder_request_period

    Cinder API

    haproxy_designate_max_requests

    haproxy_designate_request_period

    Designate API

    haproxy_neutron_max_requests

    haproxy_neutron_request_period

    Neutron API

    haproxy_heat_max_requests

    haproxy_heat_request_period

    Heat API

    haproxy_heat_cfn_max_requests

    haproxy_heat_cfn_request_period

    Heat CloudFormation API

    haproxy_heat_cloudwatch_max_requests

    haproxy_heat_cloudwatch_request_period

    Heat CloudWatch API

    haproxy_ceilometer_max_requests

    haproxy_ceilometer_request_period

    Ceilometer API

    haproxy_aodh_max_requests

    haproxy_aodh_request_period

    Aodh API

    haproxy_panko_max_requests

    haproxy_panko_request_period

    Panko API

  6. 部署更新的配置。
    sudo viocli deployment configure --limit lb

    部署此配置会短暂中断 OpenStack 服务。

限制 Neutron 公共 API 调用

以下配置限制 Neutron 公共 API 调用。如果单个源 IP 地址在 10 秒内向 Neutron 公共 API 发送的请求超过 50 个,则负载平衡器将在持续 60 秒的时间内针对该源地址发送的所有后续请求返回 HTTP 429 错误。60 秒过后,源地址可以继续向 Neutron 公共 API 发送请求。

haproxy_throttle_period: 60
haproxy_neutron_max_requests: 50
haproxy_neutron_request_period: 10