【问题标题】:How to properly deploy with Akka Cluster如何正确部署 Akka 集群
【发布时间】:2016-11-07 17:03:28
【问题描述】:

场景

现在我们只有一个节点运行整个系统。我们想要区分“前端”节点和单个“后端”节点。

  • “前端”节点(N 个节点):通过 WebSocket 连接与客户端保持持久连接
  • “后端”节点(1 个节点):处理来自查询数据库的所有前端节点的所有请求,并处理所需的域逻辑。

由于某些原因需要这种区分:

工作完成

我们已将前端节点上的参与者与后端节点上的参与者连接起来。我们已经使用akka.cluster.singleton.ClusterSingletonProxyClusterSingletonManager 从前端实例化后端节点ActorRefs,同时在后端真正实例化它们。

问题

考虑到 Akka 集群节点宕机通知,我们如何进行部署?

the Akka Cluster documentation about downingsome comments on the akka mailing list 了解,处理该过程时推荐的方法如下:

  1. http://akka.io/downloads/下载akka发行版
  2. akka-cluster bash 脚本与jmxsh-R5.jar 一起复制并粘贴到resources/bin/ 文件夹中(例如)
  3. 在分发包中包含该文件夹(我在build.sbt 中添加了以下行): mappings in Universal ++= (baseDirectory.value / "resources" / "bin" * "*" get) map (bin => bin -> ("bin/" + bin.getName))
  4. 在部署时,将要部署的节点设置为关闭,手动调用 bash 脚本,如:
    • 执行bin/akka-cluster %node_to_be_deployed:port% down
    • 部署新的代码版本
    • 执行bin/akka-cluster %deployed_node:port% join

疑问:

  1. 此分步程序正确吗?
  2. 如果要部署的节点在部署后IP和端口完全相同,是否需要设置downjoin
  3. 我们计划设置一个前端和后端节点作为种子节点。这样,可以在仅部署前端节点或仅部署到后端节点的同时重建所有集群。对吗?

谢谢!

【问题讨论】:

    标签: scala deployment akka akka-cluster


    【解决方案1】:

    为避免手动关闭,在节点终止时进行清理,请参阅: http://doc.akka.io/docs/akka/current/scala/cluster-usage.html#How_To_Cleanup_when_Member_is_Removed

    关于你的观点:

    1. 当 JVM 重新启动并执行清理代码时,您不需要此过程。只有当清理代码以某种方式失败时,您才需要按照过程中所述手动关闭。
    2. 当节点被其他节点标记为已移除时(执行清理代码后),可以使用相同的ip和端口组合重新加入集群。
    3. 是的,您可以重新部署一个前端节点。

    PS.:
    - 协调关闭将在 akka 2.5 中得到改进,请参阅: https://github.com/akka/akka-meta/issues/38
    - 如果您想使用 http API 管理集群,请参阅:http://developer.lightbend.com/docs/akka-cluster-management/current/

    【讨论】:

    • 嗨@Bennie。感谢您的答复。据我了解,清理过程在删除节点时进行,并且通过Akka Cluster documentation 我将其理解为进一步的步骤(向上-> 无法访问-> 向下-> 删除)。我的问题是如何将节点标记为关闭(向上-> 无法访问-> 向下)。我一直在玩ConstructR & Consul,但它不处理下降步骤(仅在加入新成员时列出种子节点)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2021-04-15
    • 2021-04-08
    • 2021-09-28
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多