2016-11-07 79 views
3

场景

现在我们只有一个节点运行整个系统。我们想要的是区分“前端”节点和单个“后端”节点。如何正确部署Akka群集

  • “前端”的节点(N节点):维护通过网页套接字连接与客户端的持久连接
  • “后端”节点(1个节点):处理所有的请求未来形式的所有查询到前端节点数据库,并处理所需的域逻辑。

这种区分是必要因为某些原因:

工作做

我们将生活在前端节点上的演员与l在后台工作。我们已经使用akka.cluster.singleton.ClusterSingletonProxyClusterSingletonManager实例化了来自前端的后端节点ActorRef,同时在后端真正实例化它们。

问题

我们如何做的部署考虑到阿卡群集节点唐宁通知?

据我理解the Akka Cluster documentation about downingsome comments on the akka mailing list,推荐的方法在处理这个过程会是这样的:

  1. http://akka.io/downloads/
  2. 复制下载的阿卡分布并粘贴akka-cluster庆典脚本连同jmxsh-R5.jarresources/bin/文件夹(例如)
  3. 在分布式软件包中包含该文件夹(我在01上添加了以下行): 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. 我们计划将一个前端和后端节点设置为种子节点。这样,所有群集都可以在仅部署前端节点的情况下进行重构,或仅对后端节点进行部署。这是对的吗?

谢谢!

回答

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:
- 联动关闭将在阿卡2.5加以改进,请参阅: https://github.com/akka/akka-meta/issues/38
- 如果你想使用一个HTTP API来管理你的集群,请参阅:http://developer.lightbend.com/docs/akka-cluster-management/current/

+0

嗨@Bennie。感谢您的答复。 据我了解,清理过程发生在节点被删除时,并通过[Akka Cluster文档](http://doc.akka.io/docs/akka/current/common/cluster.html#Membership_Lifecycle)我理解这是进一步的步骤(上 - >无法访问 - >下 - >删除)。 我的问题是如何将节点标记为关闭(上 - >不可访问 - >关闭)。我一直在玩[ConstructR&Consul](https://github.com/Tecsisa/constructr-consul),但它没有处理下行步骤(只有在加入新成员时列出种子节点)。 –