Overcloud 的外部负载平衡
配置 Red Hat OpenStack Platform 环境以使用外部负载均衡器
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 Submit。
第 1 章 将 overcloud 配置为使用外部负载均衡器
在 Red Hat OpenStack Platform (RHOSP)中,overcloud 将多个 Controller 节点用作高可用性集群,以确保 OpenStack 服务的最大操作性能。集群还为 OpenStack 服务提供负载均衡,该服务平均将流量分发到 Controller 节点,并减少每个节点的服务器过载。
默认情况下,overcloud 使用名为 HAProxy 的开源工具来管理负载平衡。HAProxy 负载均衡流量到运行 OpenStack 服务的 Controller 节点。haproxy
软件包包含侦听传入流量的 haproxy
守护进程,包括日志记录功能和示例配置。
overcloud 还使用高可用性资源管理器 Pacemaker 将 HAProxy 作为高可用性服务控制。这意味着 HAProxy 在每个 Controller 节点上运行,并根据您在每个配置中定义的一组规则分发流量。
您还可以使用外部负载均衡器来执行此分发。例如,您的组织可能会使用基于硬件的专用负载均衡器来处理到 Controller 节点的流量分布。要定义外部负载均衡器和 overcloud 创建的配置,您需要执行以下进程:
- 安装和配置外部负载均衡器。
- 使用 heat 模板参数配置和部署 overcloud,以将 overcloud 与外部负载均衡器集成。这需要负载均衡器和潜在的节点的 IP 地址。
在将 overcloud 配置为使用外部负载均衡器前,请确保在 overcloud 上部署并运行高可用性。
1.1. 为外部负载均衡器准备您的环境
要为外部负载均衡器准备您的环境,首先创建一个节点定义模板,并使用 director 注册空白节点。然后,检查所有节点的硬件,并手动标记节点到配置集。
使用以下工作流准备您的环境:
-
创建节点定义模板,并使用 Red Hat OpenStack Platform director 注册空白节点。
instackenv.json
的节点定义模板是一个 JSON 格式文件,其中包含用于注册节点的硬件和电源管理详情。 - 检查所有节点的硬件。这样可确保所有节点都处于 manageable 状态。
- 手动将节点标记为配置集。这些配置集标签与节点与类型匹配。然后,类别分配到一个部署角色。
流程
以
stack
用户身份登录 director 主机,再提供 director 凭证:$ source ~/stackrc
在stackenv
.json
中创建节点定义模板,并根据您的环境编辑以下示例:{ "nodes":[ { "mac":[ "bb:bb:bb:bb:bb:bb" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.205" }, { "mac":[ "cc:cc:cc:cc:cc:cc" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.206" }, { "mac":[ "dd:dd:dd:dd:dd:dd" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.207" }, { "mac":[ "ee:ee:ee:ee:ee:ee" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.208" } ] }
将文件保存到
stack
用户的主目录/home/stack/instackenv.json
中,然后将其导入到 director,然后将节点注册到 director:$ openstack overcloud node import ~/instackenv.json
将内核和 ramdisk 镜像分配给所有节点:
$ openstack overcloud node configure
检查每个节点的硬件属性:
$ openstack overcloud node introspect --all-manageable
重要节点必须处于可管理的状态。确保此进程完成运行。它可能需要 15 分钟来检查这些裸机节点。
获取节点列表以识别它们的 UUID:
$ openstack baremetal node list
通过在每个节点的
properties/capabilities
参数中添加 profile 选项,手动将每个节点标记到特定的配置集。例如,要标记三个节点以使用 Controller 配置集和一个节点来使用 Compute 配置集,请使用以下命令:$ openstack baremetal node set 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 --property capabilities='profile:control,boot_option:local' $ openstack baremetal node set 6faba1a9-e2d8-4b7c-95a2-c7fbdc12129a --property capabilities='profile:control,boot_option:local' $ openstack baremetal node set 5e3b2f50-fcd9-4404-b0a2-59d79924b38e --property capabilities='profile:control,boot_option:local' $ openstack baremetal node set 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 --property capabilities='profile:compute,boot_option:local'
profile:compute
和profile:control
选项将节点标记为每个对应的配置集。
其他资源
1.2. 为外部负载均衡器配置 overcloud 网络
要为 overcloud 配置网络,请隔离您的服务以使用特定的网络流量,然后为本地环境配置网络环境文件。此文件是描述 overcloud 网络环境的 heat 环境文件,指向网络接口配置模板,并为您的网络和 IP 地址范围定义子网和 VLAN。
流程
要为各个角色配置节点接口,请自定义以下网络接口模板:
要为每个角色配置带有 VLAN 的单个 NIC,请使用以下目录中的示例模板:
/usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans
要为每个角色配置绑定 NIC,请使用以下目录中的示例模板:
/usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans
-
通过从
/home/stack/network-environment.yaml
中复制文件并根据您的环境编辑内容来创建网络环境文件。
1.3. 创建外部负载均衡器环境文件
要使用外部负载均衡器部署 overcloud,请使用所需的配置创建新的环境文件。在本示例文件中,外部负载均衡器上配置多个虚拟 IP、每个隔离网络上的一个虚拟 IP,另一个用于 Redis 服务,再启动 overcloud 部署。如果 overcloud 节点 NIC 配置支持配置,则一些虚拟 IP 可以相同。
流程
使用以下示例环境文件
external-lb.yaml
创建环境文件,并根据您的环境编辑内容。parameter_defaults: ControlFixedIPs: [{'ip_address':'192.0.2.250'}] PublicVirtualFixedIPs: [{'ip_address':'172.16.23.250'}] InternalApiVirtualFixedIPs: [{'ip_address':'172.16.20.250'}] StorageVirtualFixedIPs: [{'ip_address':'172.16.21.250'}] StorageMgmtVirtualFixedIPs: [{'ip_address':'172.16.19.250'}] RedisVirtualFixedIPs: [{'ip_address':'172.16.20.249'}] # IPs assignments for the Overcloud Controller nodes. Ensure these IPs are from each respective allocation pools defined in the network environment file. ControllerIPs: external: - 172.16.23.150 - 172.16.23.151 - 172.16.23.152 internal_api: - 172.16.20.150 - 172.16.20.151 - 172.16.20.152 storage: - 172.16.21.150 - 172.16.21.151 - 172.16.21.152 storage_mgmt: - 172.16.19.150 - 172.16.19.151 - 172.16.19.152 tenant: - 172.16.22.150 - 172.16.22.151 - 172.16.22.152 # CIDRs external_cidr: "24" internal_api_cidr: "24" storage_cidr: "24" storage_mgmt_cidr: "24" tenant_cidr: "24" RedisPassword: p@55w0rd! ServiceNetMap: NeutronTenantNetwork: tenant CeilometerApiNetwork: internal_api AodhApiNetwork: internal_api GnocchiApiNetwork: internal_api MongoDbNetwork: internal_api CinderApiNetwork: internal_api CinderIscsiNetwork: storage GlanceApiNetwork: storage GlanceRegistryNetwork: internal_api KeystoneAdminApiNetwork: internal_api KeystonePublicApiNetwork: internal_api NeutronApiNetwork: internal_api HeatApiNetwork: internal_api NovaApiNetwork: internal_api NovaMetadataNetwork: internal_api NovaVncProxyNetwork: internal_api SwiftMgmtNetwork: storage_mgmt SwiftProxyNetwork: storage HorizonNetwork: internal_api MemcachedNetwork: internal_api RabbitMqNetwork: internal_api RedisNetwork: internal_api MysqlNetwork: internal_api CephClusterNetwork: storage_mgmt CephPublicNetwork: storage ControllerHostnameResolveNetwork: internal_api ComputeHostnameResolveNetwork: internal_api BlockStorageHostnameResolveNetwork: internal_api ObjectStorageHostnameResolveNetwork: internal_api CephStorageHostnameResolveNetwork: storage
注意-
parameter_defaults
部分包含每个网络的 VIP 和 IP 分配。这些设置必须与负载均衡器中每个服务相同的 IP 配置匹配。 -
parameter_defaults
部分定义 Redis 服务的管理密码(RedisPassword),其中包含ServiceNetMap
参数,该参数将每个 OpenStack 服务映射到特定的网络。负载平衡配置需要重新映射此服务。
-
1.4. 为外部负载平衡配置 SSL
要为外部负载均衡器配置加密端点,请创建额外的环境文件,使 SSL 访问端点,然后在外部负载平衡服务器上安装 SSL 证书和密钥的副本。默认情况下,overcloud 使用未加密的端点服务。
先决条件
如果您使用 IP 地址或域名访问公共端点,请选择以下环境文件之一包括在 overcloud 部署中:
-
要使用域名服务(DNS)访问公共端点,请使用文件
/usr/share/openstack-tripleo-heat-templates/environments/tls-endpoints-public-dns.yaml
。 -
要使用 IP 地址访问公共端点,请使用文件
/usr/share/openstack-tripleo-heat-templates/environments/tls-endpoints-public-ip.yaml
。
-
要使用域名服务(DNS)访问公共端点,请使用文件
流程
如果您使用自签名证书,或者证书签名者不在 overcloud 镜像的默认信任存储中,请通过从 heat 模板集合中复制
inject-trust-anchor.yaml
环境文件来将证书注入 overcloud 镜像中:$ cp -r /usr/share/openstack-tripleo-heat-templates/environments/inject-trust-anchor.yaml ~/templates/
在文本编辑器中打开该文件,并将 root 证书颁发机构文件的内容复制到
SSLRootCertificate
参数:parameter_defaults: SSLRootCertificate: | -----BEGIN CERTIFICATE----- MIIDgzCCAmugAwIBAgIJAKk46qw6ncJaMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV ... sFW3S2roS4X0Af/kSSD8mlBBTFTCMBAj6rtLBKLaQbIxEpIzrgvp -----END CERTIFICATE-----
重要证书颁发机构内容为所有新行需要相同的缩进级别。
将
OS::TripleO::NodeTLSCAData:
参数的资源 URL 更改为绝对 URL:resource_registry: OS::TripleO::NodeTLSCAData: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/tls/ca-inject.yaml
可选:如果您使用 DNS 主机名通过 SSL/TLS 访问 overcloud,请创建一个新的环境文件
~/templates/cloudname.yaml
,并在以下参数中定义 overcloud 端点的主机名:parameter_defaults: CloudName: overcloud.example.com DnsServers: 10.0.0.1
将以下值替换为您环境中的实际值:
-
cloud
Name :将overcloud.example.com
替换为 overcloud 端点的 DNS 主机名。 -
DnsServers
: 要使用的 DNS 服务器列表。配置的 DNS 服务器必须包含配置的CloudName
条目,该条目与公共 API 的 IP 匹配。
-
1.5. 使用外部负载均衡器部署 overcloud
要部署使用外部负载均衡器的 overcloud,请运行 openstack overcloud deploy
,并包含外部负载均衡器的额外环境文件和配置文件。
先决条件
- 为外部负载均衡器准备环境。有关如何准备您的环境的更多信息,请参阅 第 1.1 节 “为外部负载均衡器准备您的环境”
- 为外部负载均衡器配置了 overcloud 网络。有关如何配置网络的详情,请参考 第 1.2 节 “为外部负载均衡器配置 overcloud 网络”
- 已准备好外部负载均衡器环境文件。有关如何创建环境文件的详情,请参考 第 1.3 节 “创建外部负载均衡器环境文件”
- 为外部负载平衡配置了 SSL。有关如何为外部负载平衡配置 SSL 的详情,请参考 第 1.4 节 “为外部负载平衡配置 SSL”
流程
使用外部负载均衡器的所有环境和配置文件部署 overcloud:
$ openstack overcloud deploy --templates / -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml / -e ~/network-environment.yaml / -e /usr/share/openstack-tripleo-heat-templates/environments/external-loadbalancer-vip.yaml / -e ~/external-lb.yaml --control-scale 3 --compute-scale 1 --control-flavor control --compute-flavor compute / -e <SSL/TLS endpoint environment file> / -e <DNS hostname environment file> / -e <root certificate injection environment file> / -e <additional_options_if_needed>
将尖括号 <
;&
gt; 中的值替换为您为环境定义的文件路径。重要您必须按照本例中列出的顺序将网络环境文件添加到命令中。
这个命令包括以下环境文件:
-
network-isolation.yaml
:网络隔离配置文件。 -
network-environment.yaml
:网络配置文件。 -
external-loadbalancer-vip.yaml
:外部负载均衡虚拟 IP 地址配置文件。 external-lb.yaml
:外部负载均衡器配置文件。您还可以为此文件设置以下选项,并调整您的环境的值:-
--control-scale 3
: 将 Controller 节点扩展为 3。 -
--compute-scale 3
: 将 Compute 节点扩展为 3。 -
--control-flavor control
:将特定类别用于 Controller 节点。 -
--compute-flavor compute
:将特定类别用于 Compute 节点。
-
SSL/TLS 环境文件:
-
SSL/TLS 端点环境文件
:定义如何连接到 public endpoinst 的环境文件。使用tls-endpoints-public-dns.yaml
或tls-endpoints-public-ip.yaml
。 -
(可选)
DNS 主机名环境文件
:设置 DNS 主机名的环境文件。 -
根证书注入环境文件
:用于注入 root 证书颁发机构的环境文件。
-
在 overcloud 部署期间,Red Hat OpenStack Platform director 会置备您的节点。完成此过程需要一些时间。
-
要查看 overcloud 部署的状态,请输入以下命令:
$ source ~/stackrc $ openstack stack list --nested
1.6. 其他资源
第 2 章 示例配置:带有外部 HAProxy 负载均衡器的 Overcloud
此示例配置显示使用联合 HAProxy 服务器提供外部负载平衡的 overcloud。您可以根据您的环境要求选择不同的外部负载均衡器。
示例配置包括以下元素:
- 运行 HAProxy 的外部负载均衡服务器。
- 一个 Red Hat OpenStack Platform (RHOSP) director 节点。
- 一个 overcloud,它由高可用性集群中的 3 个 Controller 节点和 1 个 Compute 节点组成。
- 使用 VLAN 进行网络隔离。
这个示例为每个网络使用以下 IP 地址分配:
-
内部 API:
172.16.20.0/24
-
租户:
172.16.22.0/24
-
Storage:
172.16.21.0/24
-
存储管理:
172.16.19.0/24
-
外部:
172.16.23.0/24
这些 IP 范围包括 Controller 节点和负载均衡器绑定到 OpenStack 服务的虚拟 IP 的 IP 分配。
2.1. HAProxy 配置文件示例
示例文件显示了内部 HAProxy 配置参数。您可以使用示例配置参数作为配置外部负载均衡器的基础。
HAProxy 配置文件包含以下部分:
- 全局配置
- 默认配置
- 服务配置
director 在每个 Controller 节点上的 /etc/haproxy/haproxy.conf
文件中为非容器化环境提供此配置,并在 /var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
文件中为容器化环境提供。
除了全局、默认和服务参数外,还必须配置其他 HAProxy 参数。有关 HAProxy 参数的更多信息,请参阅位于 Controller 节点上的 /usr/share/doc/haproxyFE/configuration.txt
中的 HAProxy 配置手册,或在安装了 haproxy
软件包的任何系统中。
HAProxy 配置文件示例
global daemon group haproxy log /dev/log local0 maxconn 10000 pidfile /var/run/haproxy.pid user haproxy defaults log global mode tcp retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen aodh bind 172.16.20.250:8042 bind 172.16.20.250:8042 mode http server overcloud-controller-0 172.16.20.150:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.252:8042 check fall 5 inter 2000 rise 2 listen ceilometer bind 172.16.20.250:8777 bind 172.16.23.250:8777 server overcloud-controller-0 172.16.20.150:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8777 check fall 5 inter 2000 rise 2 listen cinder bind 172.16.20.250:8776 bind 172.16.23.250:8776 server overcloud-controller-0 172.16.20.150:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8776 check fall 5 inter 2000 rise 2 listen glance_api bind 172.16.23.250:9292 bind 172.16.21.250:9292 server overcloud-controller-0 172.16.21.150:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:9292 check fall 5 inter 2000 rise 2 listen glance_registry bind 172.16.20.250:9191 server overcloud-controller-0 172.16.20.150:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9191 check fall 5 inter 2000 rise 2 listen gnocchi bind 172.16.23.250:8041 bind 172.16.21.250:8041 mode http server overcloud-controller-0 172.16.20.150:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8041 check fall 5 inter 2000 rise 2 listen heat_api bind 172.16.20.250:8004 bind 172.16.23.250:8004 mode http server overcloud-controller-0 172.16.20.150:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8004 check fall 5 inter 2000 rise 2 listen heat_cfn bind 172.16.20.250:8000 bind 172.16.23.250:8000 server overcloud-controller-0 172.16.20.150:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.152:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.151:8000 check fall 5 inter 2000 rise 2 listen heat_cloudwatch bind 172.16.20.250:8003 bind 172.16.23.250:8003 server overcloud-controller-0 172.16.20.150:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8003 check fall 5 inter 2000 rise 2 listen horizon bind 172.16.20.250:80 bind 172.16.23.250:80 mode http cookie SERVERID insert indirect nocache server overcloud-controller-0 172.16.20.150:80 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:80 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:80 check fall 5 inter 2000 rise 2 listen keystone_admin bind 172.16.23.250:35357 bind 172.16.20.250:35357 server overcloud-controller-0 172.16.20.150:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:35357 check fall 5 inter 2000 rise 2 listen keystone_admin_ssh bind 172.16.20.250:22 server overcloud-controller-0 172.16.20.150:22 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:22 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:22 check fall 5 inter 2000 rise 2 listen keystone_public bind 172.16.20.250:5000 bind 172.16.23.250:5000 server overcloud-controller-0 172.16.20.150:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:5000 check fall 5 inter 2000 rise 2 listen mysql bind 172.16.20.250:3306 option tcpka option httpchk stick on dst stick-table type ip size 1000 timeout client 0 timeout server 0 server overcloud-controller-0 172.16.20.150:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-1 172.16.20.151:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-2 172.16.20.152:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 listen neutron bind 172.16.20.250:9696 bind 172.16.23.250:9696 server overcloud-controller-0 172.16.20.150:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9696 check fall 5 inter 2000 rise 2 listen nova_ec2 bind 172.16.20.250:8773 bind 172.16.23.250:8773 server overcloud-controller-0 172.16.20.150:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8773 check fall 5 inter 2000 rise 2 listen nova_metadata bind 172.16.20.250:8775 server overcloud-controller-0 172.16.20.150:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8775 check fall 5 inter 2000 rise 2 listen nova_novncproxy bind 172.16.20.250:6080 bind 172.16.23.250:6080 balance source server overcloud-controller-0 172.16.20.150:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6080 check fall 5 inter 2000 rise 2 listen nova_osapi bind 172.16.20.250:8774 bind 172.16.23.250:8774 server overcloud-controller-0 172.16.20.150:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8774 check fall 5 inter 2000 rise 2 listen nova_placement bind 172.16.20.250:8778 bind 172.16.23.250:8778 mode http server overcloud-controller-0 172.16.20.150:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8778 check fall 5 inter 2000 rise 2 listen panko bind 172.16.20.250:8779 transparent bind 172.16.23.250:8779 transparent server overcloud-controller-0 172.16.20.150:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8779 check fall 5 inter 2000 rise 2 listen redis bind 172.16.20.249:6379 balance first option tcp-check tcp-check send AUTH\ p@55w0rd!\r\n tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server overcloud-controller-0 172.16.20.150:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6379 check fall 5 inter 2000 rise 2 listen swift_proxy_server bind 172.16.23.250:8080 bind 172.16.21.250:8080 server overcloud-controller-0 172.16.21.150:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:8080 check fall 5 inter 2000 rise 2
2.1.1. 全局配置参数: HAProxy 配置文件示例
全局配置参数部分为负载均衡器定义一组进程范围参数。您可以使用配置文件中的示例参数来配置外部负载均衡器。根据您的环境调整参数值。
全局配置参数
global daemon user haproxy group haproxy log /dev/log local0 maxconn 10000 pidfile /var/run/haproxy.pid
示例显示了以下参数:
-
守护进程
:作为后台进程运行。 -
用户 haproxy
和组 haproxy
:定义拥有进程的 Linux 用户和组。 -
log
:定义要使用的 syslog 服务器。 -
maxconn
:设置进程的并发连接的最大数量。 -
pidfile
:设置用于进程 ID 的文件。
2.1.2. 默认值配置参数: HAProxy 配置文件示例
默认值配置参数部分定义在运行外部负载均衡器服务时要使用的一组默认值。您可以使用配置文件中的示例参数来配置外部负载均衡器。根据您的环境调整参数值。
默认值配置参数
defaults log global mode tcp retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s
示例显示了以下参数:
-
日志
:启用该服务的日志记录。global
日志
参数。 -
模式
:定义要使用的协议。在这种情况下,默认为 TCP。 -
retries
:在报告连接失败前设置服务器执行的重试次数。 -
timeout
:设置等待特定功能的最长时间。例如,超时 http-request
设置等待完整 HTTP 请求的最长时间。
2.1.3. 服务级别配置参数: HAProxy 配置文件示例
服务级别配置参数部分定义在将流量负载平衡到特定 Red Hat OpenStack Platform (RHOSP)服务时使用的一组参数。您可以使用配置文件中的示例参数来配置外部负载均衡器。根据您的环境调整参数值,并为您要负载平衡的每个服务复制 部分。
服务级别配置参数
此示例显示 ceilometer
服务的配置参数。
listen ceilometer bind 172.16.20.250:8777 bind 172.16.23.250:8777 server overcloud-controller-0 172.16.20.150:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8777 check fall 5 inter 2000 rise 2
要负载平衡的每个服务都必须与配置文件中的一个部分对应。每个服务配置包括以下参数:
-
listen
: 侦听请求的服务名称。 -
绑定
:服务侦听的 IP 地址和 TCP 端口号。每个服务绑定了代表不同网络流量类型的不同地址。 -
Server :提供服务的每个服务器的名称、服务器 IP 地址和侦听端口,以及连接参数:
-
检查
:(可选)启用健康检查。 -
回退 5
:(可选)在五个失败的健康检查后,该服务被视为离线。 -
inter 2000
:(可选)两个连续健康检查设置为 2000 毫秒或 2 秒之间的间隔。 -
增长 2:
(可选)在两个成功健康检查后,该服务被视为可操作。
在 ceilometer
示例中,服务标识了提供 ceilometer 服务的 IP 地址和端口 172.16.20.2500:8777
和 172.16.23.250:8777
。HAProxy 将对这些地址的请求定向到 overcloud-controller-0
(172.16.20.150:8777)、overcloud-controller-1
(172.16.20.151:8777)或 overcloud-controller-2
(172.16.0.152:8777)。
2.2. 使用负载均衡的服务的配置参数
对于使用负载平衡的 overcloud 中的每个服务,请使用以下示例作为配置外部负载均衡器的指南。根据您的环境调整参数值,并为您要负载平衡的每个服务复制 部分。
大多数服务使用默认的健康检查配置:
- 两个连续健康检查之间的间隔设置为 2000 毫秒,或 2 秒。
- 两个成功健康检查后,服务器将被视为可操作。
- 在五个健康检查失败后,该服务被视为离线。
每个服务都指示该服务的 Other information 部分中的默认健康检查或附加选项。
aodh
端口号: 8042
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen aodh bind 172.16.20.250:8042 bind 172.16.23.250:8042 server overcloud-controller-0 172.16.20.150:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8042 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8042 check fall 5 inter 2000 rise 2
ceilometer
端口号: 8777
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen ceilometer bind 172.16.20.250:8777 bind 172.16.23.250:8777 server overcloud-controller-0 172.16.20.150:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8777 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8777 check fall 5 inter 2000 rise 2
cinder
端口号: 8776
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen cinder bind 172.16.20.250:8776 bind 172.16.23.250:8776 server overcloud-controller-0 172.16.20.150:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8776 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8776 check fall 5 inter 2000 rise 2
glance_api
端口号: 9292
绑定到: storage, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的存储
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen glance_api bind 172.16.23.250:9292 bind 172.16.21.250:9292 server overcloud-controller-0 172.16.21.150:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:9292 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:9292 check fall 5 inter 2000 rise 2
glance_registry
端口号: 9191
绑定到: internal_api
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen glance_registry bind 172.16.20.250:9191 server overcloud-controller-0 172.16.20.150:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9191 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9191 check fall 5 inter 2000 rise 2
gnocchi
端口号: 8041
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen gnocchi bind 172.16.20.250:8041 bind 172.16.23.250:8041 server overcloud-controller-0 172.16.20.150:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8041 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8041 check fall 5 inter 2000 rise 2
heat_api
端口号: 8004
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
- 此服务使用 HTTP 模式而不是默认的 TCP 模式。
HAProxy 示例:
listen heat_api bind 172.16.20.250:8004 bind 172.16.23.250:8004 mode http server overcloud-controller-0 172.16.20.150:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8004 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8004 check fall 5 inter 2000 rise 2
heat_cfn
端口号: 8000
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen heat_cfn bind 172.16.20.250:8000 bind 172.16.23.250:8000 server overcloud-controller-0 172.16.20.150:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.152:8000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.151:8000 check fall 5 inter 2000 rise 2
heat_cloudwatch
端口号: 8003
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen heat_cloudwatch bind 172.16.20.250:8003 bind 172.16.23.250:8003 server overcloud-controller-0 172.16.20.150:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8003 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8003 check fall 5 inter 2000 rise 2
horizon
端口号: 80
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
- 此服务使用 HTTP 模式而不是默认的 TCP 模式。
- 此服务使用基于 Cookie 的持久性来与 UI 交互。
HAProxy 示例:
listen horizon bind 172.16.20.250:80 bind 172.16.23.250:80 mode http cookie SERVERID insert indirect nocache server overcloud-controller-0 172.16.20.150:80 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:80 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:80 check fall 5 inter 2000 rise 2
keystone_admin
端口号: 35357
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen keystone_admin bind 172.16.23.250:35357 bind 172.16.20.250:35357 server overcloud-controller-0 172.16.20.150:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:35357 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:35357 check fall 5 inter 2000 rise 2
keystone_admin_ssh
端口号: 22
绑定到: internal_api
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen keystone_admin_ssh bind 172.16.20.250:22 server overcloud-controller-0 172.16.20.150:22 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:22 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:22 check fall 5 inter 2000 rise 2
keystone_public
端口号: 5000
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen keystone_public bind 172.16.20.250:5000 bind 172.16.23.250:5000 server overcloud-controller-0 172.16.20.150:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:5000 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:5000 check fall 5 inter 2000 rise 2
mysql
端口号: 3306
绑定到: internal_api
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。但是,健康检查使用端口 9200。
- 此服务正一个时间点上只会负载均衡一台服务器。
- 只有在所有其他非备份服务器都不可用时,每个服务器才会在负载平衡中使用。
- 如果服务器离线,则所有连接都会立即终止。
- 您必须在两端启用 TCP keepalive 数据包发送。
- 您必须启用 HTTP 协议来检查服务器健康状况。
- 您可以配置粘性表来存储 IP 地址,以帮助保持持久性。
mysql 服务使用 Galera 提供高度可用的数据库集群。Galera 支持主动-主动配置,但为了避免锁定竞争,您必须使用负载均衡器强制执行的主动 - 被动配置。
HAProxy 示例:
listen mysql bind 172.16.20.250:3306 option tcpka option httpchk stick on dst stick-table type ip size 1000 timeout client 0 timeout server 0 server overcloud-controller-0 172.16.20.150:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-1 172.16.20.151:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2 server overcloud-controller-2 172.16.20.152:3306 backup check fall 5 inter 2000 on-marked-down shutdown-sessions port 9200 rise 2
neutron
端口号: 9696
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen neutron bind 172.16.20.250:9696 bind 172.16.23.250:9696 server overcloud-controller-0 172.16.20.150:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:9696 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:9696 check fall 5 inter 2000 rise 2
nova_ec2
端口号: 8773
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen nova_ec2 bind 172.16.20.250:8773 bind 172.16.23.250:8773 server overcloud-controller-0 172.16.20.150:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8773 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8773 check fall 5 inter 2000 rise 2
nova_metadata
端口号: 8775
绑定到: internal_api
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen nova_metadata bind 172.16.20.250:8775 server overcloud-controller-0 172.16.20.150:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8775 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8775 check fall 5 inter 2000 rise 2
nova_novncproxy
端口号: 6080
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
- 默认负载平衡方法是 round-robin。但是,对于此服务,请使用 源 方法。这个方法对源 IP 地址进行哈希处理,并使用正在运行的服务器的总权重来划分它。这个方法还指定接收请求的服务器,并确保相同的客户端 IP 地址始终到达同一服务器,除非服务器停机或启动。如果由于运行服务器数量的变化导致哈希结果发生变化,负载均衡器会将客户端重定向到不同的服务器。
HAProxy 示例:
listen nova_novncproxy bind 172.16.20.250:6080 bind 172.16.23.250:6080 balance source server overcloud-controller-0 172.16.20.150:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6080 check fall 5 inter 2000 rise 2
nova_osapi
端口号: 8774
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen nova_osapi bind 172.16.20.250:8774 bind 172.16.23.250:8774 server overcloud-controller-0 172.16.20.150:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8774 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8774 check fall 5 inter 2000 rise 2
nova_placement
端口号: 8778
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen nova_placement bind 172.16.20.250:8778 bind 172.16.23.250:8778 server overcloud-controller-0 172.16.20.150:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8778 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8778 check fall 5 inter 2000 rise 2
panko
端口号: 8779
绑定到: internal_api, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen panko bind 172.16.20.250:8779 bind 172.16.23.250:8779 server overcloud-controller-0 172.16.20.150:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:8779 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:8779 check fall 5 inter 2000 rise 2
redis
端口号: 6379
绑定到: internal_api (redis 服务 IP)
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的 internal_api
其他信息:
- 每个目标服务器都使用默认健康检查。
-
使用
tcp-check
send/expect 序列执行健康检查。要发送的字符串是info\ replication\r\n
,响应是role:master
。 -
Redis 服务使用密码进行身份验证。例如,HAProxy 配置使用带有 AUTH 方法和 Redis 管理密码的
tcp-check
。director 通常会生成一个随机密码,但您可以定义自定义 Redis 密码。 -
默认平衡方法是
round-robin
。但是,对于此服务,请使用第一个
方法。这样可确保第一个具有可用连接插槽的服务器接收连接。
HAProxy 示例:
listen redis bind 172.16.20.249:6379 transparent balance first option tcp-check tcp-check send AUTH\ p@55w0rd!\r\n tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server overcloud-controller-0 172.16.20.150:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.20.151:6379 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.20.152:6379 check fall 5 inter 2000 rise 2
swift_proxy_server
端口号: 8080
绑定到: storage, external
目标网络或服务器: overcloud-controller-0、overcloud-controller-1 和 overcloud-controller-2 上的存储
其他信息:
- 每个目标服务器都使用默认健康检查。
HAProxy 示例:
listen swift_proxy_server bind 172.16.23.250:8080 bind 172.16.21.250:8080 server overcloud-controller-0 172.16.21.150:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-1 172.16.21.151:8080 check fall 5 inter 2000 rise 2 server overcloud-controller-2 172.16.21.152:8080 check fall 5 inter 2000 rise 2