SuperAPI AI 工具集

akka-net-management

部署与运维

查看项目

更新于 10-15 09:47

技能介绍

用途

Akka.Management 用于 Akka.NET 集群的管理与服务发现。当把 Akka.NET 集群部署到 Kubernetes 或云环境时,它可以用动态服务发现替代静态种子节点,实现集群自动组建(cluster bootstrap),并为负载均衡器提供健康检查端点。

适用场景包括:部署到 Kubernetes 或云环境、用动态服务发现替代静态种子节点、配置集群自动组建、为负载均衡器设置健康端点、集成 Azure Table Storage、Kubernetes API 或基于配置的发现。

主要能力

  • 提供用于集群管理的 HTTP 端点,并与 Akka.Cluster.Bootstrap 集成,通过服务发现实现动态集群组建,而非依赖静态种子节点。
  • 支持三种发现提供程序:Kubernetes API、Azure Table Storage、基于配置(HOCON)。
  • 暴露健康端点:/alive(存活,ActorSystem 运行时返回 200)、/ready(就绪,集群成员为 Up 时返回 200)、/cluster/members(调试,返回集群成员信息)。
  • 可与 ASP.NET Core 健康检查集成,注册 akka-liveness 与 akka-cluster-readiness 检查。

静态种子节点与 Akka.Management 的取舍:静态种子节点简单、无依赖,但不易扩展、需要已知 IP;Akka.Management 支持动态发现、可扩展到 N 个节点,但配置更多、有外部依赖。开发、单节点部署、固定基础设施适合静态种子节点;Kubernetes、自动扩缩容组、动态环境、生产集群适合 Akka.Management。

使用方式

所需 NuGet 包:核心管理包 Akka.Management 与 Akka.Management.Cluster.Bootstrap;发现提供程序三选一:Akka.Discovery.KubernetesApi(Kubernetes)、Akka.Discovery.Azure(Azure)、Akka.Discovery.Config.Hosting(静态配置)。

配置通过 Akka.Hosting 完成。基本设置包含模式选择:本地测试模式(LocalTest)直接返回;否则启用 Remoting,若启用集群引导则配置 Akka.Management,否则使用普通集群配置。

使用 Akka.Management 时需注意:清空种子节点(settings.ClusterOptions.SeedNodes = [])。随后调用 WithClustering、WithAkkaManagement(设置 HTTP 主机名、端口、绑定主机名 0.0.0.0 与绑定端口)以及 WithClusterBootstrap(设置服务名、端口名、所需联系点数量、探测间隔、稳定余量、是否联系所有联系点、是否按回退端口过滤、引导探测间隔等),最后配置发现提供程序。

健康检查集成:注册 builder.Services.AddHealthChecks(),在 Akka 配置中调用 WithActorSystemLivenessCheck() 与 WithAkkaClusterReadinessCheck(),再通过 app.MapHealthChecks 按标签映射 /health/live 与 /health/ready。

Aspire 集成快速参考:在 AppHost 中通过 WithEndpoint 配置 remote 与 management 端点,并设置环境变量 AkkaSettings__ClusterBootstrapOptions__Enabled=true、DiscoveryMethod=AzureTableStorage、FilterOnFallbackPort=false。更详细的 Aspire 模式参见 akka-net-aspire-configuration 技能。

适用场景与发现方法选择

  • 本地开发(单节点):不使用发现,使用种子节点。
  • Aspire 多节点:AzureTableStorage,FilterOnFallbackPort 为 false。
  • Kubernetes:Kubernetes,FilterOnFallbackPort 为 true。
  • Azure VM/VMSS:AzureTableStorage,FilterOnFallbackPort 为 true。
  • 固定基础设施:Config,FilterOnFallbackPort 为 true。
  • AWS ECS/EC2:AWS 发现插件,FilterOnFallbackPort 为 true。

限制与排错

集群无法组建:节点保持为各自独立的单节点集群。检查所有节点使用相同 ServiceName、RequiredContactPointsNr 与实际副本数一致、发现提供程序配置正确、网络允许管理端口(8558)流量、Kubernetes 下 RBAC 权限已设置。

脑裂(Split Brain):形成多个集群而非一个。可设置 ContactWithAllContactPoints = true、为较慢环境增大 StableMargin;Aspire 下设置 FilterOnFallbackPort = false(动态端口),Kubernetes 下设置 FilterOnFallbackPort = true(固定端口)。

Azure 发现问题:节点无法通过 Azure Tables 互相发现。检查连接字符串有效、存储账户允许表操作、所有节点使用相同 ServiceName、防火墙允许访问 Azure Storage。

参考文件:discovery-providers.md 提供 Config、Kubernetes、Azure 发现的完整代码与部署 YAML;configuration-reference.md 提供强类型配置模型类。