配置无状态服务¶
API 服务¶
负载均衡器¶
HAProxy¶
HAProxy 提供了一个快速可靠的 HTTP 反向代理和负载均衡器,适用于 TCP 或 HTTP 应用程序。它特别适合在非常高的负载下进行网络爬虫,同时需要持久性或第 7 层处理。在最新的硬件上,它能够实际支持数万个连接。
HAProxy 的每个实例将其前端配置为仅接受指向虚拟 IP (VIP) 地址的连接。HAProxy 后端(终止点)是用于负载均衡的所有实例 IP 地址的列表。
注意
确保您的 HAProxy 安装不是单点故障,建议运行多个 HAProxy 实例。
您还可以通过其他方式确保可用性,例如使用 Keepalived 或 Pacemaker。
或者,您可以使用商业负载均衡器,它可以是硬件或软件。我们建议使用硬件负载均衡器,因为它通常具有良好的性能。
有关在您的节点上安装 HAProxy 的详细说明,请参阅 HAProxy 官方文档。
配置 HAProxy¶
重启 HAProxy 服务。
在您的环境中,在每个 OpenStack 控制器上找到您的 HAProxy 实例。以下是一个示例
/etc/haproxy/haproxy.cfg配置文件。使用以下配置文件配置您的实例,您需要在每个控制器节点上复制一份。global chroot /var/lib/haproxy daemon group haproxy maxconn 4000 pidfile /var/run/haproxy.pid user haproxy defaults log global maxconn 4000 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen dashboard_cluster bind <Virtual IP>:443 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:443 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:443 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:443 check inter 2000 rise 2 fall 5 listen galera_cluster bind <Virtual IP>:3306 balance source option mysql-check server controller1 10.0.0.12:3306 check port 9200 inter 2000 rise 2 fall 5 server controller2 10.0.0.13:3306 backup check port 9200 inter 2000 rise 2 fall 5 server controller3 10.0.0.14:3306 backup check port 9200 inter 2000 rise 2 fall 5 listen glance_api_cluster bind <Virtual IP>:9292 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:9292 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:9292 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:9292 check inter 2000 rise 2 fall 5 listen glance_registry_cluster bind <Virtual IP>:9191 balance source option tcpka option tcplog server controller1 10.0.0.12:9191 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:9191 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:9191 check inter 2000 rise 2 fall 5 listen keystone_admin_cluster bind <Virtual IP>:35357 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:35357 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:35357 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:35357 check inter 2000 rise 2 fall 5 listen keystone_public_internal_cluster bind <Virtual IP>:5000 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:5000 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:5000 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:5000 check inter 2000 rise 2 fall 5 listen nova_ec2_api_cluster bind <Virtual IP>:8773 balance source option tcpka option tcplog server controller1 10.0.0.12:8773 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8773 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8773 check inter 2000 rise 2 fall 5 listen nova_compute_api_cluster bind <Virtual IP>:8774 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:8774 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8774 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8774 check inter 2000 rise 2 fall 5 listen nova_metadata_api_cluster bind <Virtual IP>:8775 balance source option tcpka option tcplog server controller1 10.0.0.12:8775 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8775 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8775 check inter 2000 rise 2 fall 5 listen cinder_api_cluster bind <Virtual IP>:8776 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:8776 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8776 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8776 check inter 2000 rise 2 fall 5 listen ceilometer_api_cluster bind <Virtual IP>:8777 balance source option tcpka option tcplog server controller1 10.0.0.12:8777 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8777 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8777 check inter 2000 rise 2 fall 5 listen nova_vncproxy_cluster bind <Virtual IP>:6080 balance source option tcpka option tcplog server controller1 10.0.0.12:6080 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:6080 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:6080 check inter 2000 rise 2 fall 5 listen neutron_api_cluster bind <Virtual IP>:9696 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.12:9696 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:9696 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:9696 check inter 2000 rise 2 fall 5 listen swift_proxy_cluster bind <Virtual IP>:8080 balance source option tcplog option tcpka server controller1 10.0.0.12:8080 check inter 2000 rise 2 fall 5 server controller2 10.0.0.13:8080 check inter 2000 rise 2 fall 5 server controller3 10.0.0.14:8080 check inter 2000 rise 2 fall 5
注意
Galera 集群配置指令
backup指示三个控制器中的两个是待机节点。这确保了只有单个节点处理写入请求,因为 OpenStack 对多节点写入的支持尚未达到生产就绪状态。注意
Telemetry API 服务配置没有
option httpchk指令,因为它无法正确处理此检查。
配置内核参数以允许非本地 IP 绑定。这允许运行 HAProxy 实例绑定到 VIP 以进行故障转移。将以下行添加到
/etc/sysctl.confnet.ipv4.ip_nonlocal_bind = 1
重启主机,或者,要立即生效,请调用
$ sysctl -p
将 HAProxy 添加到集群,并确保 VIP 只能在运行 HAProxy 的机器上运行
pcs$ pcs resource create lb-haproxy systemd:haproxy --clone $ pcs constraint order start vip then lb-haproxy-clone kind=Optional $ pcs constraint colocation add lb-haproxy-clone with vip
crmsh$ crm cib new conf-haproxy $ crm configure primitive haproxy lsb:haproxy op monitor interval="1s" $ crm configure clone haproxy-clone haproxy $ crm configure colocation vip-with-haproxy inf: vip haproxy-clone $ crm configure order haproxy-after-vip mandatory: vip haproxy-clone
Pacemaker 与 systemd¶
Memcached¶
Memcached 是一个通用的分布式内存缓存系统。它用于通过在 RAM 中缓存数据和对象来加速动态数据库驱动的网站,从而减少必须读取外部数据源的次数。
Memcached 是一个内存缓存守护程序,可供大多数 OpenStack 服务用于存储临时数据,例如令牌。
由于复制访问目前处于实验状态,因此 HAProxy 不处理对 Memcached 的访问。相反,必须向 OpenStack 服务提供运行 Memcached 的所有主机列表。
Memcached 客户端实现哈希算法以在实例之间平衡对象。实例故障仅影响一定比例的对象,并且客户端会自动将其从实例列表中删除。SLA 为几分钟。
高可用性 API 服务¶
身份 API¶
请确保您已阅读 OpenStack Identity 服务入门文档。
将 OpenStack Identity 资源添加到 Pacemaker¶
以下部分详细介绍了如何在 SUSE 和 Red Hat 上将 Identity 服务添加到 Pacemaker。
SUSE¶
SUSE Enterprise Linux 和基于 SUSE 的发行版(例如 openSUSE)使用一组 OCF 代理来控制 OpenStack 服务。
运行以下命令将 OpenStack Identity 资源下载到 Pacemaker
# cd /usr/lib/ocf/resource.d # mkdir openstack # cd openstack # wget https://opendev.org/x/openstack-resource-agents/raw/branch/2025.2/ocf/keystone # chmod a+rx *
通过运行以下命令连接到 Pacemaker 集群,添加 Pacemaker 配置以获取 OpenStack Identity 资源
# crm configure
添加以下集群资源
clone p_keystone ocf:openstack:keystone \ params config="/etc/keystone/keystone.conf" os_password="secretsecret" os_username="admin" os_tenant_name="admin" os_auth_url="http://10.0.0.11:5000/v2.0/" \ op monitor interval="30s" timeout="30s"
注意
此配置创建了
p_keystone,一个用于管理 OpenStack Identity 服务的资源。使用以下命令从 crm configure 菜单提交您的配置更改
# commitcrm configure 支持批量输入。您可能需要将上述行复制并粘贴到您的实时 Pacemaker 配置中,然后根据需要进行更改。
例如,您可以从 crm configure 菜单输入
edit p_ip_keystone并编辑资源以匹配您首选的虚拟 IP 地址。Pacemaker 现在在您的所有节点上启动 OpenStack Identity 服务及其依赖资源。
Red Hat¶
对于 Red Hat Enterprise Linux 和基于 Red Hat 的 Linux 发行版,以下过程使用 Systemd 单元文件。
# pcs resource create openstack-keystone systemd:openstack-keystone --clone interleave=true
配置 OpenStack Identity 服务¶
编辑
keystone.conf文件以更改 bind(2) 参数的值bind_host = 10.0.0.12 public_bind_host = 10.0.0.12 admin_bind_host = 10.0.0.12
admin_bind_host参数允许您使用专用网络进行管理访问。为了确保所有数据都是高可用的,请确保所有内容都存储在 MySQL 数据库中(该数据库也是高可用的)
[catalog] driver = keystone.catalog.backends.sql.Catalog # ... [identity] driver = keystone.identity.backends.sql.Identity # ...
如果 Identity 服务将发送 ceilometer 通知,并且您的消息总线配置为高可用性,则需要确保 Identity 服务已正确配置为使用它。
配置 OpenStack 服务以使用高可用的 OpenStack Identity¶
您的 OpenStack 服务现在将 OpenStack Identity 配置指向高可用的虚拟集群 IP 地址。
对于 OpenStack Compute 服务,(如果您的 OpenStack Identity 服务 IP 地址是 10.0.0.11),请在
api-paste.ini文件中使用以下配置
auth_host = 10.0.0.11
使用此 IP 地址创建 OpenStack Identity Endpoint。
注意
如果您同时使用私有和公共 IP 地址,请创建两个虚拟 IP 地址并定义端点。例如
$ openstack endpoint create --region $KEYSTONE_REGION \ $service-type public http://PUBLIC_VIP:5000/v2.0 $ openstack endpoint create --region $KEYSTONE_REGION \ $service-type admin http://10.0.0.11:35357/v2.0 $ openstack endpoint create --region $KEYSTONE_REGION \ $service-type internal http://10.0.0.11:5000/v2.0
如果您正在使用 Dashboard (horizon),请编辑
local_settings.py文件以包含以下内容OPENSTACK_HOST = 10.0.0.11
Telemetry API¶
Telemetry 轮询代理可以配置为在多个代理之间分配其轮询工作负载。这可以实现高可用性 (HA)。
中央代理和计算代理都可以以高可用性部署运行。这意味着这些服务可以并行运行多个实例,并在这些运行实例之间分配工作负载。
Tooz 库提供服务实例组内的协调。它提供了一个高于几个后端 API,可用于构建分布式应用程序。
Tooz 支持 各种驱动程序,包括以下后端解决方案
您必须配置受支持的 Tooz 驱动程序才能进行 Telemetry 服务的高可用性部署。
有关在 ceilometer.conf 中设置的必需配置选项的信息,请参阅 OpenStack 配置参考 中的 协调 部分。
注意
如果未设置 backend_url 选项,则只能运行和正常运行中央和计算代理服务的一个实例。
实例的可用性检查由心跳消息提供。当与实例的连接丢失时,工作负载将在下一个轮询周期内重新分配到剩余实例中。
注意
Memcached 使用超时值,该值应始终设置为高于为 Telemetry 设置的心跳值的数值。
为了向后兼容并支持现有的部署,中央代理配置支持使用不同的配置文件。这是并行运行的服务实例组。要启用此配置,请在 OpenStack 配置参考 中的 ceilometer.conf 配置文件中的轮询部分中设置 partitioning_group_prefix 选项的值。
警告
对于中央代理池的每个子组,其 partitioning_group_prefix 相同,必须轮询不相交的米表子集,以避免样本丢失或重复。可以在 /etc/ceilometer/pipeline.yaml 配置文件中设置要轮询的米表列表。有关管道的更多信息,请参阅 数据处理和管道 部分。
要启用计算代理同时运行多个实例并进行工作负载分配,必须在 计算 部分的 ceilometer.conf 配置文件中将 workload_partitioning 选项设置为 True。